2017-03-23 8 views
0

私はこのwikiページに示す方向フィールドと位相の肖像画を取得しようとしています:van der pol発振器の方向フィールドの描画方法は?

Van der Pol oscillator in wikipedia

マイコード:

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 

電流出力: Actual output

所望の出力: wikiページに表示されているように、この上に方向フィールドを取得する方法

Desired output

おかげで、あなたは矢印が示すことにしたいすべての点でベクトル場を計算する必要が
Gopi

答えて

0

。そしてそれを震えでプロットします。例えば。

[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 
+0

おかげで、それは素晴らしい作品、しかし、一つ疑問が曲線のパスに近い方向フィールドの矢印は非常に小さく、ズームインしていない場合は明確ではないが、彼らとにかくを作るために矢筒プロットで、この矢印にサイズを与えることです彼らは大きく見える – Gopi

+0

私は助けることがうれしいです。 'quiver'は、矢印を描画するグリッドに比例させて重なり合わないので、' scale'引数 'quiver(x、y、u、v、scale) 'でこの値を変更することができます。あなたが震えドキュメントhttps://www.mathworks.com/help/matlab/ref/quiver.html –

+0

おかげでより多くの書式設定オプションを読み取ることができ、スケールが矢を調整するのに役立ちます – Gopi

関連する問題