在 matlab 中绘制梯度,只出现空白

Plot gradient in matlab and nothing but blank appears

我正在尝试绘制复杂函数实部的梯度,但是我得到的是一个空白图形。我不明白我做错了什么,因为代码与其他功能一起使用(例如虚部)

% Set up
x = -3:0.2:3;
y1 = (-3:0.2:3);
y = (-3:0.2:3)*1i;

[X, Y]= meshgrid(x,y);

% Complex variable s
s = X + Y;

% Complex function f(z)
z = s + 1./s;

figure
subplot(1,2,1);
[Dx, Dy] = gradient(real(z),.2,.5);
quiver(x,y1,Dx,Dy)
title('u(x,y) gradient, vector field');

%%Imaginary part
subplot(1,2,2)
contour(x,y1,imag(z),linspace(-10,10,100)); title('Contour of Im(f)');
xlabel('x'); ylabel('y'); %clabel(C3);
title('Imaginary part');

下面是我得到的图片

我尝试重新缩放和调整图片、域等...但无法显示渐变(箭头)。我在这里做错了什么?

编辑: 我发现它显示空白可能是因为 Dy 和 Dx 变量中有一些 Inf 和 -Inf 值,是否有忽略这些值或将它们设置为 0 的选项?

在我看来是可行的,但是你的箭头线宽太小你看不到。

您可以通过为箭袋图分配句柄来增加它,如下所示:

hQuiver = quiver(x,y1,Dx,Dy);

然后,在创建绘图后,更改其中的许多 properties 中的任何一个,如下所示:

set(hQuiver,'LineWidth',4)

或者在对 quiver 的调用中完成所有操作:

hQuiver = quiver(x,y1,Dx,Dy,'LineWidth',4);

在这种情况下,它给出以下内容:

编辑:

要回答您的第二个问题,您可以使用 isinf:

将等于 +Inf 或 -Inf 的元素设置为您想要的任何值
Dx(isinf(Dx)) = 0;

Dy(isinf(Dy)) = 0;

不是空白。您已经绘制了箭袋图(通常用于光流图中)。它在由 x 和 y1 中的点组成的网格形成的每个位置处给出一个向内指向的箭头。