2017-03-23 10 views
0

나는이 위키 페이지에 표시된 방향으로 필드 및 위상 초상화를 얻기 위해 노력하고 있어요 :van der pol oscillator의 방향 필드를 그리는 방법은 무엇입니까?

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