標籤:

已知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了,代碼寫得不好別噴我哈。

由於題主沒有說函數fg 的形式,我就只好舉個簡單的例子:

f(x,y)=x^2+y^2-1g(x,y)=xy

首先來寫一個fun.m文件代表f 函數:

%fun.m
%f(x,y)
function f = fun(x,y)
f = x^2 + y^2 - 1;
end

假設x 的定義域為[0,1] ,在這個區間上f(x,y)=0 實際上是有兩個解的,即一個x 會對應兩個y 的值。所以還是用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

到了這裡實際上y 就已經求出來了,是個2行的矩陣,下面的代碼就是計算z=g(x,y)並畫圖:

%%
%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

TAG:MATLAB | 函數 |