我想绘制一些像这样的数字:
-axis是真实的,并且是某些复数值向量的一部分(通常是纯粹的或真实的)
- 在给定的情况下有一些3D可视化
答案 0 :(得分:3)
首先,将复杂函数定义为(Re(x), Im(x))
的函数。在复杂分析中,您可以将任何复杂函数分解为其实部和虚部。换句话说:
F(x) = Re(x) + i*Im(x)
对于二维网格,您显然可以扩展到以(x,y)
方式定义函数。换句话说:
F(x,y) = Re(x,y) + i*Im(x,y)
在您的情况下,我假设您需要2D方法。因此,让我们使用I
和J
分别表示实部和虚部。另外,让我们从一个简单的示例开始,例如cos(x) + i*sin(y)
基于非常受欢迎的Euler exponential function。它并不准确,但我对其进行了略微修改,因为情节看起来不错。
以下是您在MATLAB中要做的步骤:
I
和J
meshgrid
的工作surf
或mesh
)。NB:因为这是一个复数值函数,所以让我们绘制输出的幅度。你对你的细节非常模糊,所以让我们假设我们正在绘制幅度。
让我们逐行代码执行此操作:
% // 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将获取每个复数值并评估结果是什么。之后,您将创建一个3D网格图,该图将绘制前两个维中的实轴和虚轴以及第三个维中复数的幅度。 abs()
取MATLAB中的绝对值。如果矩阵内的内容是真实的,那么它只返回数字的正数。如果矩阵内的内容很复杂,则返回复数值的大小/长度。
我已经标记了轴并在侧面放置了colorbar
,以将表面图的高度可视化为颜色。它还可以让您了解这些值的高度和长度,以更加愉悦和直观的方式。
轻轻推动你的方向,让我们从这个复杂的功能中取出一片。让实部分等于0,而虚部则跨越[-4,4]
。您可以使用mesh
绘制积分,而不是使用surf
或plot3
。因此,尝试这样的事情:
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)
)。
如果需要,您可以使用它并添加更多痕迹。
希望这有帮助!