2015-05-11 1 views
2

Я пытаюсь построить градиент реальной части сложной функции, однако то, что я получаю, является пустой фигурой. Я не понимаю, что я делаю неправильно, так как код работает с другими функциями (например, мнимую часть)График градиента в Matlab и ничего не пусто

% 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

Я попытался изменить масштаб и изменить размер изображения , домен и т. д., но не смогли отобразить градиент (стрелки). Что я здесь делаю неправильно?

EDIT: Я обнаружил, что он отображается пустым, возможно, потому что в переменных Dy и Dx есть значения Inf и -Inf, есть ли возможность игнорировать эти значения или установить их в 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

EDIT:

Чтобы ответить на ваш вопрос второстепенный, вы можете установить элементы, которые равны + Inf или -Inf любое значение вы хотите использовать isinf:

Dx(isinf(Dx)) = 0; 

и

Dy(isinf(Dy)) = 0; 
+0

Спасибо, я частично решил проблему. Я узнал, что ничего не сделал, потому что там, где Inf и -Inf приводят к переменным Dx и Dy. Можно ли указать Matlab установить 0 этих значений? – mickkk

+1

Да! Что-то вроде 'Dx (isinf (Dx)) = 0;' и то же для 'Dy'. Я добавлю эту информацию в ответ. –

+0

спасибо! он отлично работает! – mickkk

1

это не пусто. Вы построили диаграмму колчана (обычно используемую в оптических схемах). Он дает стрелку направленности внутрь в каждом месте, образованном сеткой, с точками в x и y1.