已知f(x,y)=0以及z=g(x,y),如何用matlab求(x,z)的圖像?
如題
可以用 contourc 計算獲得 f(x,y) = 0 的數據,之後帶入 z = g(x, y):
[x, y] = deal(-1:.02:1);
c = contourc(x, y, bsxfun(f, x, y.), [0 0]);
plot(c(1, 2:end), g(c(1, 2:end), c(2, 2:end)))
如果是 2016b 以上版本可以藉助 fimplicit 獲得數據:
h = fimplicit(f);
plot(h.XData, g(h.XData, h.YData))
如果借用另一個回答的函數 f,g:
f = @(x, y) x .^ 2 + y .^ 2 - 1;
g = @(x, y) x .* y;
圖形如下:
謝邀。最近太久沒有寫MATLAB了,代碼寫得不好別噴我哈。
由於題主沒有說函數 和 的形式,我就只好舉個簡單的例子:
首先來寫一個fun.m文件代表 函數:
%fun.m
%f(x,y)
function f = fun(x,y)
f = x^2 + y^2 - 1;
end
假設 的定義域為 ,在這個區間上 實際上是有兩個解的,即一個 會對應兩個 的值。所以還是用MATLAB里的solve函數比較方便,可以直接求出兩個解。
%%
x = 0:1e-2:1;
syms yy
%%
%solve for y
for i = 1:length(x)
if (i == 1) y = double(solve(fun(x(i),yy) == 0));
else y = [y, double(solve(fun(x(i),yy) == 0))];
end
end
到了這裡實際上 就已經求出來了,是個2行的矩陣,下面的代碼就是計算並畫圖:
%%
%get z
z = y;
for i = 1:length(z(:,1))
z(i,:) = x.*y(i,:);
end
plot(x,z)
xlabel(x);
ylabel(z);
結果就出來啦:
可以看到兩個解對應的兩支曲線都被畫出來了。
請教類似的問題:
x∈(a,b), y=f(x), z=g(x,y)
請問可以畫x,y,z的三維圖像嗎?怎麼畫呢?
推薦閱讀:
※加速你的MATLAB開發(1): 自動生成MATLAB代碼
※機器學習筆記6 —— Matlab編程基礎
※漫談Simulink: 隱式和顯式的Solver
※MATLAB神經網路(六):GRNN