Bonjour à tous,
je vous demande si quelqu'un peut m'aider à résoudre mon problème ou de me donner quelques idées pour pouvoir avancer dans mon stage. Le problème est le suivant suivant:
j'ai un système différentiel de la forme:
dX(t)/dt = AX(t) + Bu(t) avec A et B des matrice données et u(t) est un vecteur colonne son dimension égal au nombre des lignes de la matrice B de la forme
(sin(k1t); sin(k2t);...;sin(kit)) et X(t) est un vecteur de taille n.Mon objectif est de résoudre ce problème avec une méthode numérique en utilisant matlab sur un interval du temps donné, pour ce faire j'ai utilisé la méthode d'Euler donc j'ai trouvé:
(X(t_n+1) - X(t_n))/dt = AX(t_n) + Bu(t_n)
ceci est équivalent à:
X(t_n+1)= (dtA + I)X(t_n) + dtBu(t_n) avec des condition initiale X(0) et u(0)
donc je veux résoudre ce problème avec matlab(c-a-d) de faire un petit programme qui donne la solution à chaque instant) je vous montre ce que j'ai fait sur matlab mais j'ai vu que sa marche pas sachant que je suis un débutant comme utilisateur de ce logiciel c'est pour ça j'ai besoin de vos idées
Merci d'avance.
%%%%%%%%%%%%%%%%
Programme :
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 t=1:10;% l'interval du temps dont le quel vari la valeur de temps (fin commentaire) n=100;%le nombre d'itération à faire dt=1;% le pas de temps fixé par l'utilisateur X0=[x_0; y_0; z_0]=[1; 1; 1];% la condition intiale et dans le cas général la condition est un vecteur de dimension N c-a-d X0= [x0; y0; z0; t0; ...] donné.(fin commentaire) u(0)=0;% condition initial du terme non linéaire dans ce cas u(0) est un scalaire mais dans le cas général u(0) c'est vacteur qui dépond de la taille de système.(fin commentaire) R_1=1/2;%valeur donnée par l'utilisateur pour remplir les matrices A et B (fin commentaire) R_2=3;% " --------------------- " c_1=5;%" ----------------------- " c_2=4;%" ----------------------- " L=10;%" ----------------------- " u(t)= sin(2*pi*t);% l'expression du terme non linéaire en dimension égal à 1 mais dans le cas général c'est u(t) c'est vecteur qui dépond que deu temps(fin commentaire) A=[1/(R2c2), 0, R1/(c2R2); 0, 1/1(R1c1), -R2/(c1c1R1); -1/L, 1/L, 0]; B=[-1/(R2c2); 0; 0]; for i=1:n X_{i+1} =[x_{i+1}; y_{i+1}; z_{i+1}]=(dt*A + eye(3))*[x_i, y_i, z_i] + dt*B*u(t_i); end plot(X)
Partager