我正在尝试绘制复杂函数实部的梯度,但是我得到的是一个空白图。我不明白我做错了什么,因为代码与其他函数(例如虚部)一起使用
% 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;
关于matlab - 在matlab中绘制梯度但只出现空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30165977/