bonsoir,
Je vais essayer d'expliquer mon problème clairement.
Je dois résoudre une EDO pour caractériser le comportement mécanique d'un métal subissant des chargement cyclique, on obtient un cycle d'hytérésis.
Mon système est définit comme ceci:
Puis ma fonction principale est:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 function dy=f_iso(t,y) global Q b K n E sigma0 epoint if abs(y(1))-Q*(1-exp(-b*y(2)))-sigma0<0 dy(2)=0 else dy(2)=((abs(y(1))-Q*(1-exp(-b*y(2)))-sigma0)/K)^n end dy(3)=sign(y(1))*dy(2); dy(1)=E*(epoint-dy(3)); dy=dy'; end
Ce qui me donne la première branche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 global Q b K n E sigma0 epoint b=5; Q=-150 ; E=140000; sigma0=200; K=800; n=6; epoint=0.001; % 1ere branche [Tn,N]=ode45('f_iso',[0 10],[0 0 0]); sigma1=N(:,1); ep1=N(:,3); e1=ep1+sigma1./E; plot(e1,sigma1)
Ensuite je veux tracer 9 autres branches sachant que à partir de la deuxième ça devient cyclique.
Pour cela je fais une boucle for :
A chaque itération Ti=Ti+20 et Tf=Tf+20 et comme condition initiale je prends la valeur du dernier vecteur précédent .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 L=length(N) for w = 0:10 epoint=-epoint [Tn,N]=ode45('f_iso',[10*(2*w+1) (30+20*w)],[N(L,:)]); sigma2=N(:,1); ep2=N(:,3); e2=ep2+sigma2./E; L=length(N) end
Mais je ne sais pas comment ployer pour faire en sorte d'avoir toutes les courbes sigma=f(e) sur un meme grave avec la boucle for...
De plus avec cette boucle, les valeurs vont être écraser à chaque itération donc ça va pas marcher...
merci
Partager