Я хочу построить неявные функции в MATLAB. Подобно x ^ 3 + xy + y ^ 2 = 36, уравнения, которые нельзя превратить в простую параметрическую форму. Есть ли простой метод?
Построение неявных алгебраических уравнений в MATLAB
Ответ 1
Вот несколько вариантов...
Использование 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
:
Ответ 2
Если вы хотите построить неявную поверхность, например, куполообразный куб, вы можете сделать что-то вроде следующего.
Идея состоит в том, чтобы вычислить все значения функции (даже если они не равны нулю), а затем создать isosurface
, который определит ваше равенство. В этом примере неявная функция равна нулю.
[email protected](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
Кроме того, имеется представление в файле Matlab File Exchange под названием ezimplot3D, которое, похоже, выполняет эту работу, как предлагает @knedlsepp.
Ответ 3
Implot2 и implot от Matlab Центральная кажется, что выполняет эту работу.
Ответ 4
Есть две новые функции для построения неявной функции в R2016b:
fimplicit для f (x, y) = 0
fimplicit3 для f (x, y, z) = 0