Воспроизведение трехмерной визуальной диаграммы функции, зависящей от 3 переменных, нарисованных с помощью Mathematica с использованием Matlab - PullRequest
0 голосов
/ 29 октября 2018

Здравствуйте. Я пытаюсь создать рабочий код на MATLAB для визуальной трехмерной диаграммы

3-D Diagram

3DДиаграмма, созданная в Mathematica

Код, который я запустил для рисования фигуры в Mathematica:

F[x_, k_, r_] := x^4 + k x^2 + r*x
ContourPlot3D[
Evaluate[D[F[x, k, r], x]], {k, -2.5, 2}, {r, -2.2, 3}, {x, -1.4, 
1.3}, PlotPoints -> 7, ViewPoint -> {-1.5, 1.5, 1.4}, Axes -> True,
ContourStyle -> {EdgeForm[]}, 
AxesLabel -> TraditionalForm /@ {k, r, x}] // Timing

В настоящее время я пытаюсь создать аналогичную трехмерную диаграмму, но с MATLAB.В настоящее время у меня есть рабочий код, который создает трехмерное визуальное изображение простой сферической функции, зависящей от 3 переменных, с использованием кода MATLAB

a = 10;
x = linspace(-a,a);
y = linspace(-a,a);
z = linspace(-a,a);
[x,y,z] = meshgrid(x,y,z);
f = x.^2 + y.^2 + z.^2;
k = 100;
p = patch(isosurface(x,y,z,f,k));
isonormals(x,y,z,f,p)
p.FaceColor = 'blue';
p.EdgeColor = 'none';
title(sprintf('Contours of f(x,y,z) = x^2 + y^2 + z^2\nwith        f(x,y,z) = k = %d',k));
xlabel('x-axis');
ylabel('y-axis');
zlabel('z-axis');
axis equal;
grid on;
box on;
axis([-10 10 -10 10 -10 10]);
camlight left;
lighting phong;

3-D MATLAB Sphere

Когда я пытаюсь заменить функцию, используемую для генерации сферического кода, той же производной функции, которая использовалась в моем коде Mathematica, программа не запустится.В частности, если я определил f = 4x. ^ 3 + 2 * y x + z, программа не запустится, что, я считаю, связано с тем, что функция зависит от независимого продукта y z.Я хочу знать, как я могу изменить свой код, чтобы получить фигуру, аналогичную той, которую я изначально представлял, или какие-либо предположения о том, какие функции MATLAB мне нужно изучить, чтобы нарисовать трехмерную диаграмму функции, зависящей от 3 переменных.Любая помощь будет оценена, спасибо.

1 Ответ

0 голосов
/ 29 октября 2018

Определите DF = 4*x.^3 + 2*k.*x + r; как градиент F. Здесь .^ и .* используются для поэлементной мощности и умножения, поскольку x, k и r являются матрицами.

x = linspace(-1.4, 1.3);
k = linspace(-2.5, 2);
r = linspace(-2.2, 3);
[x,k,r] = meshgrid(x,k,r);
DF = 4*x.^3 + 2*k.*x + r;
v = 0.1;
p = patch(isosurface(x,k,r,DF,v));
isonormals(x,k,r,DF,p)
p.FaceColor = 'blue';
p.EdgeColor = 'none';
title(sprintf('Contours of DF(x,k,r) = 4x^3 + 2kx + r\nwith        DF(x,k,r) = v = %d',v));
xlabel('x-axis');
ylabel('y-axis');
zlabel('z-axis');
axis equal;
axis square;
grid on;
box on;
axis([-1.4 1.3 -2.5 2 -2.2 3]);
camlight left;
lighting phong;

Выход: enter image description here

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