在MATLAB中绘制隐式代数方程

18

我希望能在MATLAB中绘制隐式函数,例如x ^ 3 + xy + y ^ 2 = 36这样的方程,这些方程不能简单地变成参数形式。是否有简单的方法?

4个回答

31

下面有几个选项...

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

enter image description here


@gnovice:它正常工作了!......效果很好......但是我对公式不太熟悉......无论如何,它能绘制出我的曲线 :) - Arkapravo
@govice:除了ezplot,还有其他方法吗?......ezplot效果很好......只是想问一些替代方法。(Matlab通常有替代方案) - Arkapravo
1
@Arkapravo:除了EZPLOT,我又添加了另一个选项。 - gnovice

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所建议的那样,似乎也可以完成这项工作。

@knedlsepp 谢谢你的建议 ;) - Ander Biguri
1
感谢您将它们添加到答案中! - knedlsepp

2

Implot2implot似乎可以在Matlab Central上完成此任务。


@Justin:谢谢,我会看一下的。 - Arkapravo

2

在R2016b中,有两个新函数可以绘制隐式函数:

fimplicit用于f(x,y) = 0
fimplicit3用于f(x,y,z) = 0


因为我无法评论,所以我在这里发布了一个答案 :) - joinhappy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接