簡體   English   中英

在MATLAB中繪制隱式代數方程

[英]Plotting Implicit Algebraic equations in MATLAB

我希望在MATLAB中繪制隱式函數。 像x ^ 3 + xy + y ^ 2 = 36一樣,不能將方程變成簡單的參數形式。 有沒有簡單的方法?

這里有幾個選擇...

使用ezplot (或在較新版本中建議使用fplot ):

最簡單的解決方案是使用ezplot函數:

ezplot('x.^3 + x.*y + y.^2 - 36', [-10 10 -10 10]);

這給你下面的情節:

在此處輸入圖片說明


使用contour

另一種選擇是生成一組點,您將在其中評估函數f(x,y) = x^3 + x*y + y^2 ,然后使用函數contour繪制其中f(x,y)輪廓線等於36:

[x, y] = meshgrid(-10:0.1:10);   % Create a mesh of x and y points
f = x.^3+x.*y+y.^2;              % Evaluate f at those points
contour(x, y, f, [36 36], 'b');  % Generate the contour plot
xlabel('x');                     % Add an x label
ylabel('y');                     % Add a y label
title('x^3 + x y + y^2 = 36');   % Add a title

上面給出的繪圖幾乎與ezplot生成的繪圖相同:

在此處輸入圖片說明

如果要繪制隱式曲面(例如,有角的立方體),則可以執行以下操作。

這個想法是計算函數的所有值(即使它們不等於零),然后創建一個isosurface來定義相等性。 在此示例中,隱式函數等於零。

fun=@(x,y,z)(1-x.^8-3.*y.^8-2.*z.^8+5.*x.^4.*z.^2.*y.^2+3.*y.^4.*x.^2.*z.^2) ;

[X,Y,Z]=meshgrid(-2:0.1:2,-2:0.1:2,-2:0.1:2);

val=fun(X,Y,Z);

fv=isosurface(X,Y,Z,val,0);

p = patch(fv);
isonormals(X,Y,Z,val,p)
set(p,'FaceColor' , 'red');
set(p,'EdgeColor' , 'none');
daspect([1,1,1])
view(3); axis tight
camlight 
lighting phong
axis off

在此處輸入圖片說明

此外,還有一個名為ezimplot3D的Matlab文件交換提交,似乎也可以完成此工作,正如@knedlsepp建議的那樣。

來自Matlab Central的Implot2implot似乎可以完成這項工作。

R2016b中有兩個用於繪制隱式函數的新函數:

f(x,y)= 0的幅度
f(x,y,z)= 0的fimplicit3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM