Как нарисовать поле направления генератора Ван дер Поля?
Я пытаюсь получить поле направления и фазовый портрет, показанные на этой вики-странице:
Ван дер Пол осциллятор в Википедии
Мой код:
options = odeset('MaxStep',0.5);
temp = inputdlg('Enter mu value');
mu = str2double(temp{1,1});
[t,y] = ode45(@(t,y) vdp1_1(t,y,mu),[0 10],[2; 0],options);
plot(y(:,1),y(:,2));
hold on
quiver(y(:,1), y(:,2), gradient(y(:,1)), gradient(y(:,2) ))
hold off
function dydt = vdp1_1(t,y,mu)
dydt = zeros(2,1);
dydt(1) = y(2);
dydt(2) = [mu * (1-y(1)^2)*y(2)-y(1)];
end
Желаемый результат: Как получить поле направления поверх этого, как показано на рисунке вики-страницы
https://upload.wikimedia.org/wikipedia/commons/4/42/VanDerPolOscillator.png
Спасибо,
Гопи
1 ответ
Решение
Вам нужно рассчитать векторное поле в каждой точке, где вы хотите, чтобы была показана стрелка. И тогда вы строите это с колчаном. Например.
[Xs,Ys]=meshgrid(-5:5,-5:5); % Will define the positions where we want to plot
Us=Ys; % From your equations, these are the values of the field at each point
Vs=mu*(1-Xs.^2).*Ys-Xs;
quiver(Xs,Ys,Us,Vs) % Should plot the field you want, just add the trajectory on top