Bonjour,
Je souhaiterai pouvoir résoudre un système d'équations différenntielles d'ordre 2 sous scilab en vu de résoudre l'équation d'un pendule à plusieurs articulations.
J'ai déjà réalisé un algorithme utilisant rungekutta4 pour afficher la courbe de la position d'un pendule simple en fonction du temps (résolution d'une simple équation différentielle d'ordre 2).
Que dois je changer pour résoudre un système?
Voilà mon programme:
function yp = fct2 (t,z,y)
yp=z
endfunction
-------------------------------------
function zp=fct3(t,z,y)
w=0.2;
n=0.05;
zp=-w^2*sin(y)-n*z
endfunction
-----------------------------------
// Méthode de Runge-Kutta ordre 4 :
z(1)=0;
t(1)=0;
y(1)=0.1;
h = 0.1;
exec('fct2.sci')
exec('fct3.sci')
for j = 1:1000
t(j)=0;
k1=fct3(t(j),z(j),y(j));
k10=fct2(t(j),z(j),y(j));
k2=fct3(t(j)+h/2,z(j)+h/2*k1,y(j)+h/2*k10);
k20=fct2(t(j)+h/2,z(j)+h/2*k1,y(j)+h/2*k10);
k3=fct3(t(j)+h/2,z(j)+h/2*k2,y(j)+h/2*k20);
k30=fct2(t(j)+h/2,z(j)+h/2*k2,z(j)+h/2*k20);
k4=fct3(t(j)+h,z(j)+h*k3,y(j)+ h/2*k30);
k40=fct2(t(j)+h,z(j)+h*k3,z(j) +h*k30);
z(j+1)=z(j)+h/6*(k1+2*k2+2*k3+k4);
y(j+1)=y(j)+h/6*(k10+2*k20+2*k30+k40);
end
plot((1:1001)*h,y,'r')
Merci pour votre aide
-----