你好,我正试图在MATLAB上生成一个可视化的三维图。
我运行的用于绘制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.目前,我有一个工作代码,它使用MATLAB代码生成一个依赖于3个变量的简单球面函数的三维可视化。
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;当我试图用数学代码中使用的函数的导数替换用于生成球形代码的函数时,程序将不会运行。具体来说,如果我定义了f= 4x.^3 + 2*y_x +z,程序就不会运行,我认为这是因为函数依赖于一个非独立的乘积y_z。我想知道如何修改我的代码以产生一个与我最初的类似的图形,或者任何我需要查看的MATLAB函数的建议,以绘制依赖于3个变量的函数的三维图。任何帮助都将不胜感激,谢谢。
发布于 2018-10-29 00:56:45
将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;输出:

https://stackoverflow.com/questions/53037224
复制相似问题