web-dev-qa-db-ja.com

MATLABでの陰的代数式のプロット

MATLABで陰関数をプロットしたいと思います。 x ^ 3 + xy + y ^ 2 = 36のように、単純なパラメトリック形式にできない方程式。簡単な方法はありますか?

18
Arkapravo

ここにいくつかのオプションがあります...

ezplot (または fplot 新しいバージョンで推奨)の使用:

最も簡単な解決策は、関数 ezplot を使用することです。

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

これにより、次のプロットが得られます。

enter image description here


contour を使用:

もう1つのオプションは、関数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

31
gnovice

角のある立方体などの陰関数曲面をプロットする場合は、次のようにすることができます。

アイデアは、関数のすべての値を計算し(ゼロに等しくない場合でも)、次に、等式を定義する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

さらに、@ knedlseppが示唆しているように、 ezimplot3D と呼ばれるMatlabファイル交換の送信もあります。

6
Ander Biguri

R2016bで陰関数をプロットするための2つの新しい関数があります。

fimplicit for f(x、y)= 0
fimplicit for f(x、y、z)= 0

2
joinhappy

Implot2 とMatlab Centralの implot が仕事をしているようです。

2
Justin Peel