2016-05-23 2 views
0

J'essaie de modéliser l'équation y "+ 4y = 0, avec les conditions initiales y (0) = 1 et y '(0) = 0, dans Matlab. L'extrait de code ci-dessous montre une approximation de travail de la position en fonction du temps pour l'ODE ci-dessus:Résoudre des ODE de deuxième ordre dans 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'); 

Je suis en train de prendre ces données produit et trouver la vitesse du système en fonction du temps, mais ont aucune idée comment

+1

« l'approximation de forme d'onde pour la vitesse du système » ... Je ne sais pas ce que cela est ni ce 'y' représente. – TroyHaskin

+0

'y = deval (pos_solution, x, 1);' renvoie l'intégrale de y ', c'est-à-dire y (ou position si 'y' représente cela). Si vous voulez y '(vitesse si y représente la position, l'intégrale de y' '), alors utilisez 'y = deval (pos_solution, x, 2);' selon la documentation. Ou utilisez juste 'y = deval (pos_solution, x);' pour retourner les deux ensemble. – horchler

+0

Merci beaucoup @horchler! Je ne comprenais pas vraiment de quoi parlait la documentation avec 'deval (XINT, SOL, IDX)'. Cela efface pour moi! Très appréciée. –

Répondre

0

Le troisième argument facultatif à deval spécifie l'index de la solution à renvoyer L'index correspond à l'état vect ou (et les conditions initiales) et la sortie de votre fonction d'intégration ODE (M). Dans le cas particulier de votre système, l'index 1 correspond à la position et l'indice 2 à la vitesse. Si vous voulez sortie (et l'intrigue) à la fois, vous pouvez omettre le troisième argument:

... 
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');