Ваш первый график показывает несколько ветвей многозначной «функции». На самом деле это не функция в обычном смысле, поскольку для данного z
у вас есть более одного значения функции. Вы можете воспроизвести это, только обойдя более одного раза вокруг начала координат, то есть более чем 2*pi
в вашей угловой переменной. То, что вы изображаете, является основной ветвью этой функции, то есть листом, который соответствует сложным фазам в диапазоне от -pi
до pi
.
Кроме того, есть более фундаментальная проблема. Как только вы переключаетесь на комплексные числа, представленные как двойные, вы теряете любую информацию о дополнительной фазе вокруг начала координат (комплексные числа, представленные как вещественная + мнимая часть, приведут только к главному значению их комплексной фазы, которое находится между -pi
и pi
). Поэтому вам нужно вычислить квадратный корень «вручную» из тригонометрической формы комплексного числа:
r = (0:1:15)'; % create a matrix of complex inputs
theta = pi*(-2:0.05:2);
z = r*exp(1i*theta);
%w = z.^(1/2) ; % calculate the complex outputs
w = sqrt(r)*exp(1i*theta/2);
figure('Name','Graphique complexe','units','normalized','outerposition',[ 0.08 0.1 0.8 0.55]);
subplot(121)
surf(real(z),imag(z),real(w),imag(w)) % visualize the complex function using surf
xlabel('Real(z)')
ylabel('Imag(z)')
zlabel('Real(u)')
cb = colorbar;
colormap jet; % gradient from blue to red
cb.Label.String = 'Imag(v)';
subplot(122)
surf(real(z),imag(z),imag(w),real(w)) % visualize the complex function using surf
xlabel('Real(z)')
ylabel('Imag(z)')
zlabel('Imag(v)')
cb = colorbar;
colormap jet; % gradient from blue to red
cb.Label.String = 'Real(u)';
![result from polar solution](https://i.stack.imgur.com/rT7cB.png)
Как видите, функция работает так, как должна. Обратите внимание, что не имеет смысла иметь «масштаб в радианах» на рисунке. Все, что вы строите, имеет «линейные» размеры: реальные и воображаемые части. Радианы имеют смысл только для углов , т.е. theta
-подобных величин.
Также вы можете заметить, что на приведенном выше рисунке есть круглые края, поскольку мы строим графики с использованием полярных координат. Можно создать прямоугольный сюжет, но это займет гораздо больше работы. Вот частичное решение. Идея состоит в том, чтобы дважды сшить одну и ту же сетку, чтобы построить две ветви функции:
r0 = 15;
re = linspace(-r0, r0, 31).'; % create a matrix of complex inputs
im = linspace(-r0, r0, 31);
z = re + 1j*im;
theta = angle(z); % atan2(imag(z), real(z));
r = abs(z);
% concatenate the same mesh twice (plotting trick) back to back, insert nan in between
w1 = sqrt(r).*exp(1i*theta/2); % first branch
w2 = sqrt(r).*exp(1i*(theta+2*pi)/2); % second branch
z = [z, nan(size(w1,1),1), z(:,end:-1:1)];
w = [w1, nan(size(w1,1),1), w2(:,end:-1:1)];
figure('Name','Graphique complexe','units','normalized','outerposition',[ 0.08 0.1 0.8 0.55]);
subplot(121)
surf(real(z),imag(z),real(w),imag(w)) % visualize the complex function using surf
xlabel('Real(z)')
ylabel('Imag(z)')
zlabel('Real(u)')
cb = colorbar;
colormap jet; % gradient from blue to red
cb.Label.String = 'Imag(v)';
subplot(122)
surf(real(z),imag(z),imag(w),real(w)) % visualize the complex function using surf
xlabel('Real(z)')
ylabel('Imag(z)')
zlabel('Imag(v)')
cb = colorbar;
colormap jet; % gradient from blue to red
cb.Label.String = 'Real(u)';
Вот результат:
![result from Cartesian solution](https://i.stack.imgur.com/TOAa3.png)
Как видите, сложная часть выглядит странно. Это потому, что фаза комплексных чисел прыгает вдоль отрицательной реальной полуоси. Это может быть исправлено, но требует гораздо больше работы, это оставлено читателю в качестве упражнения. Причина, по которой я ввел в данные столбец nan
s, состоит в том, чтобы предотвратить появление аналогичного артефакта перехода на первом графике. Другой вариант заключается в том, чтобы построить две ветви функции по отдельности, с hold on
между ними, но тогда потребуется дополнительная работа для нормализации цветовой карты на рисунках.
Наконец, не стоит использовать jet
, а вместо этого использовать цветовую карту parula
по умолчанию. Струя очень вредна для людей с нарушенным цветовым зрением, и parula
близка к воспринимаемой форме Для краткого введения в проблему я предлагаю посмотреть этот замечательный разговор от отвратительных парней.