2016-05-23 15 views
0

Ich versuche, die Gleichung y "+ 4y = 0 mit Anfangsbedingungen y (0) = 1 und y '(0) = 0 in Matlab zu modellieren. Das Code-Schnipsel unten zeigt eine Arbeits Annäherung der Position als eine Funktion der Zeit für die oben ODE:Lösen von ODEs zweiter Ordnung in Matlab

clear  
syms y(t) 

%Differential Equation Conversion 
P = odeToVectorField(diff(y, 2) == -4*y); 
M = matlabFunction(P,'vars',{'t','Y'}); 

%Position Approximation 
pos_solution = ode45(M,[0 20],[1 0]); 
x = linspace(0,20,1000); 
y = deval(pos_solution,x,1); 

%Plot of Position as a function of time 
figure(3) 
plot(x,y,'b'); 

ich versuche, diese Daten erzeugt zu nehmen und die Geschwindigkeit des Systems als Funktion der Zeit, hat aber keine Ahnung, wie man Weitere Informationen hierzu erhalten Sie unter

+1

„die Wellenform Näherung für die Geschwindigkeit des Systems“ ... Ich weiß nicht, was das ist noch was 'y' repräsentiert. – TroyHaskin

+0

'y = deval (pos_solution, x, 1);' gibt das Integral von y ', d. H. Y (oder Position, wenn' y 'das darstellt) zurück. Wenn Sie y '(Geschwindigkeit, wenn y Position bedeutet, das Integral von y' '), dann verwenden Sie 'y = deval (pos_solution, x, 2);' wie in der Dokumentation. Oder verwenden Sie einfach y = deval (pos_solution, x); um beide zusammen zurückzugeben. – horchler

+0

Vielen Dank @horchler! Ich habe nicht wirklich verstanden, worum es in der Dokumentation mit 'deval (XINT, SOL, IDX) 'ging. Das macht es für mich klar! Sehr geschätzt. –

Antwort

0

Das optionale dritte Argument zu deval gibt an, welcher Index der Lösung zurückgegeben werden soll. Der Index entspricht dem Status vect oder (und Anfangsbedingungen) und die Ausgabe Ihrer ODE-Integrationsfunktion (M). Im konkreten Fall Ihres Systems entspricht der Index 1 der Position und der Index 2 der Geschwindigkeit. Wenn Sie Ausgang (und Grundstück) wollen beide, können Sie das dritte Argument weglassen:

... 
y = deval(pos_solution,x); 

% Plot of Position as a function of time 
figure(3) 
plot(x,y(1,:),'b',x,y(2,:),'r'); 
legend('Position','Velocity');