Bonjour,

Je dois tracer l'évolution d'une vitesse angulaire d'une voiture dans un looping parfaitement rond. De ce fait j'ai utilisé Scilab, et j'ai eu un résultat satisfaisant. Mais le problème vient lors du changement de mes variables: En les rendant plus grandes pour simuler une situation réelle, Scilab se plaint qu'il y a trop de calculs à faire et refuse d'en faire plus de 500.
L'erreur que je reçois:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
lsoda--  at t (=r1), mxstep (=i1) steps   
needed before reaching tout
      where i1 is :        500                                                  
      where r1 is :   0.2343607491632D+01                                       
Excessive work done on this call (perhaps wrong jacobian type).
De ce fait, j'ai voulu utiliser la méthode d'Euler, mais je ne comprends pas comment l'utiliser. Pouvez-vous m'aider svp?

Mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
clear()
 
// Déclarer les variables et les fonctions nécessaires au calcul :
mu=0.01;
m=1760;
rho=1.225;
scx=0.0273;
R=6.;
g=9.81;
 
// Accélération angulaire
function tpp=f(t, tp)
    tpp=mu*tp(1)^2-1/(m*2)*rho*scx*R*tp(1)^2-1/R*mu*g*cos(t)-1/R*m*g*cos(t);
endfunction
 
tpInitiales=[25/R]; // Vitesse angulaire initiale [x]
t0=0; // Temps de départ
t=0:0.1*%pi:%pi; // Pas
tp =ode(tpInitiales,t0,t,f); // Vitesse angulaire
 
//Vitesse angulaire en fonction du temps
plot2d(t, tp(1,:), style=[2]);
 
b=gca();
b.title.text='Vitesse angulaire en fonction du temps';
b.x_label.text='Temps (s)';
b.y_label.text='Vitesse angulaire (rad.s^-1)';
J'avais trouvé cette fonction et l'ai retouchée pour l'adapter à mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
function [liste_tp,liste_t]=Euler(tp0,N,T) 
    // Version 3
    tp=tp0;liste_tp=[tp0]; 
    t=0;liste_t=[0];
    h=T/N; 
    for i=1:N 
        tp=tp+h*f(t,tp); 
        t=t+h; 
        liste_tp=[liste_tp,tp]; 
        liste_t=[liste_t,t];
    end 
endfunction
Mais elle me renvoie des résultats impossibles (Une vitesse angulaire de 4.88D+104 rad/s).

Merci en avance!