在复坐标上定义的Matlab绘图函数
我想画一些像这样的图: -轴为实数且为复数向量(通常为纯实数或imag)的imag部分 -在给定的情况下进行一些三维可视化在复坐标上定义的Matlab绘图函数,matlab,plot,Matlab,Plot,我想画一些像这样的图: -轴为实数且为复数向量(通常为纯实数或imag)的imag部分 -在给定的情况下进行一些三维可视化 首先,将复函数定义为(Re(x),Im(x))的函数。在复分析中,您可以将任何复函数分解为其实部和虚部。换言之: F(x) = Re(x) + i*Im(x) F(x,y) = Re(x,y) + i*Im(x,y) 在二维网格的情况下,显然可以扩展到根据(x,y)定义函数。换言之: F(x) = Re(x) + i*Im(x) F(x,y) = Re(x,y)
首先,将复函数定义为
(Re(x),Im(x))
的函数。在复分析中,您可以将任何复函数分解为其实部和虚部。换言之:
F(x) = Re(x) + i*Im(x)
F(x,y) = Re(x,y) + i*Im(x,y)
在二维网格的情况下,显然可以扩展到根据(x,y)
定义函数。换言之:
F(x) = Re(x) + i*Im(x)
F(x,y) = Re(x,y) + i*Im(x,y)
在你的情况下,我假设你想要2D方法。因此,让我们使用I
和J
分别表示实部和虚部。另外,让我们从一个简单的例子开始,比如cos(x)+i*sin(y)
,它是基于非常流行的。它不精确,但我稍微修改了一下,因为情节看起来不错
以下是您将在MATLAB中执行的步骤:
I
和J
meshgrid
的东西将起作用surf
,或mesh
)% // Step #1
F = @(I,J) cos(I) + i*sin(J);
% // Step #2
[I,J] = meshgrid(-4:0.01:4, -4:0.01:4);
% // Step #3
K = F(I,J);
% // Let's make it look nice!
mesh(I,J,abs(K));
xlabel('Real');
ylabel('Imaginary');
zlabel('Magnitude');
colorbar;
这是您得到的结果图:
让我们慢慢地逐步完成这段代码。步骤1是根据I
和J
定义的匿名函数。步骤#2将I
和J
定义为矩阵,其中I
和J
中的每个位置为您提供在其匹配空间位置处的实坐标和虚坐标,以便在复函数中进行评估。我已经将这两个域定义为介于[-4,4]之间。第一个参数跨越实轴,而第二个参数跨越虚轴。很明显,如果你认为合适的话,可以改变限制。确保步长足够小,以使绘图平滑。步骤#3将获取每个复数值并评估结果。之后,创建一个三维网格图,该图将在前两个维度中绘制实轴和虚轴,并在第三个维度中绘制复数的大小abs()
取MATLAB中的绝对值。如果矩阵中的内容是实数,那么它只返回数字的正数。如果矩阵中的内容是复杂的,则返回复杂值的大小/长度
我已经标记了轴,并在侧面放置了一个颜色条
,以将曲面图的高度可视化为颜色。它还以更令人愉悦和直观的方式让您了解值的高度和长度
作为向您的方向的轻轻推动,让我们从这个复杂函数中取一个片段。让我们使实部等于0,而虚部介于[-4,4]
之间。您可以使用plot3
来绘制点,而不是使用mesh
或surf
。因此,请尝试以下方法:
F = @(I,J) cos(I) + i*sin(J);
J = -4:0.01:4;
I = zeros(1,length(J));
K = F(I,J);
plot3(I, J, abs(K));
xlabel('Real');
ylabel('Imaginary');
zlabel('Magnitude');
grid;
默认情况下,plot3
不提供网格,这就是存在grid
命令的原因。这就是我得到的:
正如预期的那样,如果函数是纯虚构的,那么应该只有正弦贡献(i*sin(y)
)
如果需要,您可以使用它并添加更多跟踪
希望这有帮助 多宽泛的回答啊。:)