bonjour,
Je rencontre un problème de taille de matrice l’ors de l’exécution de la fonction « mnrk4 »
Qui contient une fonction « matrices ».
Sachant que la fonction « matrices »s’exécute sans erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 ??? Error using ==> mtimes Inner matrix dimensions must agree. Error in ==> matrices at 21 A=inertie(q)+m*J'*J; Error in ==> mnrk4 at 10 [A B G F J]=matrices(q,qp,m,f);
Voici le corps des 2 fonctions :
la 2eme fonction
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
28
29
30
31 % Méthode numérique RUNGE-KUTTA d'ordre 4 function [q qp]=mnrk4(tau,q,qp,fr) %q,qp,tau,fr : sont des vecteurs colonne 1*3 global m f [A B G F J]=matrices(q,qp,m,f); %A B G J Jd: sont des matrices 3*3 % m,pas et f sont des constantes K1=pas*qp; Q1=pas*inv(A)*(tau-B*qp-G-F-J'*fr); [A B G F J]=matrices(q+K1/2,qp+Q1/2,m,f); K2=pas*(qp+K1/2); Q2=pas*inv(A)*(tau-B*qp-G-F-J'*fr); [A B G F J]=matrices(q+K2/2,qp+Q2/2,m,f); K3=pas*(qp+Q2/2); Q3=pas*inv(A)*(tau-B*qp-G-F-J'*fr); [A B G F]=matrices(q+K3,qp+Q3,m,f); K4=pas*(qp+Q3); Q4=pas*inv(A)*(tau-B*qp-G-F-J'*fr); q=q+1/6*(K1+2*K2+2*K3+K4); qp=qp+1/6*(Q1+2*Q2+2*Q3+Q4);
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
28
29
30
31
32
33
34
35
36
37
38
39
40 % Matrices function [ A B G F J Jd]=matrices(q,qp,m,f) g=[0;0;9.81]; % Matrice jacobienne J=jac(q); % Dérivée de la matrice jacobienne Jd=jacder(q,qp); % Matrice d'inertie if m==0 A=inertie(q); else A=inertie(q)+m*J'*J; même si je multiplie m.*J*J erreur end % Matrice des termes coriolis et centrifuges if m==0 B=corio_cent(q,qp); else B=corio_cent(q,qp)+m*J'*Jd; end % Matrice gravitationnelle if m==0 G=grav(q); else G=grav(q)+m*J'*g; end % Matrice des frottements visqueux if f==0 F=[0 0 0]; else F=frotvis(qp); end
Partager