在MATLAB中绘制隐式代数方程

时间:2010-04-27 15:23:53

标签: matlab plot

我希望在MATLAB中绘制隐式函数。像x ^ 3 + xy + y ^ 2 = 36,这些方程不能制成简单的参数形式。有什么简单的方法吗?

4 个答案:

答案 0 :(得分:31)

以下是几个选项......

使用ezplot(或更新版本中推荐的fplot):

最简单的解决方案是使用函数ezplot

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

其中给出了以下情节:

enter image description here


使用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生成的图几乎相同的图:

enter image description here

答案 1 :(得分:6)

如果您想绘制隐式​​曲面,例如角形立方体,您可以执行以下操作。

这个想法是计算函数的所有值(即使它们不等于零),然后创建一个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

enter image description here

另外还有一个名为ezimplot3D的Matlab文件交换提交,似乎也可以完成这项工作,正如@knedlsepp建议的那样。

答案 2 :(得分:2)

Implot2和来自Matlab Central的implot似乎可以胜任。

答案 3 :(得分:2)

在R2016b中有两个新函数来绘制隐式函数:

fimplicit表示f(x,y)= 0
fimplicit3表示f(x,y,z)= 0