Решение ODE для комплексной переменной в полярных координатах (MATLAB) - PullRequest
0 голосов
/ 18 марта 2020

Я хочу решить ODE, где представляющая интерес переменная представляет собой комплексное число в терминах полярных координат, z = r*exp(i*p). Я использовал пример здесь , где они выбрали z = x + i*y. Я примерно знаю, как должна выглядеть динамика системы (это хорошо известное сокращение модели Курамото), и я почти уверен, что она не должна иметь функций, вызывающих проблемы у ode45 (). Однако системы, кажется, взрываются. Я полагаю, что это из-за того, как я установил определения или возвращенные значения во втором функциональном файле, но я не уверен. У кого-нибудь есть предложения? Спасибо!

Второй функциональный файл и вызов:

% Set up ICs and t, then solve
zv0 = [0.8; 3];
tspan = [0 100];
[t, zv] = ode45(@imaginaryODE, tspan, zv0);
% Plot
plot(t,zv(:,1))
function fv = imaginaryODE(t, zv)
% Construct z from argument and angle
z = abs(zv(1)).*exp(1i.*angle(zv(2)));
% Evaluate for the function defined in complexf.m
zp = complexf(t, z);
% Return argument and angle
fv = [abs(zp); angle(zp)];
end

Первый функциональный файл:

function f = complexf(t, z)
% Constants
omega0 = 2.*pi/24;
gamma = 1/100;
k = 1;
% Function
f = (1i.*omega0 - gamma).*z + (k/2).*(z - (z^2).*conj(z));
end
...