Построение неявных алгебраических уравнений в MATLAB - PullRequest
18 голосов
/ 27 апреля 2010

Я хочу построить неявные функции в MATLAB. Как и x ^ 3 + xy + y ^ 2 = 36, уравнения, которые нельзя преобразовать в простой параметрический вид Есть ли простой метод?

Ответы [ 4 ]

31 голосов
/ 27 апреля 2010

Вот несколько вариантов ...

Использование 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

6 голосов
/ 04 марта 2015

Если вы хотите построить неявную поверхность, например куб Рогатый, вы можете сделать что-то вроде следующего.

Идея состоит в том, чтобы вычислить все значения функции (даже если они не равны нулю), а затем создать 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

Кроме того, существует Matlab File Exchange, называемый ezimplot3D , который, похоже, тоже выполняет эту работу, как предполагает @knedlsepp.

2 голосов
/ 16 ноября 2016

В R2016b есть две новые функции для построения неявной функции:

явный для f (x, y) = 0
fimplicit3 для f (x, y, z) = 0

2 голосов
/ 27 апреля 2010

Implot2 и implot от Matlab Central, кажется, делают эту работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...