在matlab中绘制渐变,只显示空白

时间:2015-05-11 11:01:52

标签: matlab plot complex-numbers

我试图绘制复杂函数实部的渐变,但我得到的是一个空白图。我不明白我做错了什么,因为代码与其他函数(例如虚部)一起工作

% 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');

以下是我得到的图片enter image description here

我尝试重新调整图片,域名等等并调整其大小...但无法显示渐变(箭头)。我在这里做错了什么?

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

2 个答案:

答案 0 :(得分:3)

它看起来像我的工作,但箭头的线宽太小,你无法看到。

您可以通过为箭头图指定句柄来增加它,如下所示:

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

然后,在创建绘图之后,更改其中任意一个properties,如下所示:

set(hQuiver,'LineWidth',4)

或在调用quiver时执行所有操作:

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

在这种情况下,它提供以下内容:

enter image description here

编辑:

要回答您的第二个问题,您可以使用isinf将等于+ Inf或-Inf的元素设置为您想要的任何值:

Dx(isinf(Dx)) = 0;

Dy(isinf(Dy)) = 0;

答案 1 :(得分:1)

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