totostyle
Member
السلام عليكم
عندي مشكل في « mnrk4 ».ه
عندي مشكل في « mnrk4 ».ه
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 ».
??? 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);
Sachant que la fonction « matrices »s’exécute sans erreur.
Voici le corps des 2 fonctions :
% 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);
la 2eme fonction
% 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
Je rencontre un problème de taille de matrice l’ors de l’exécution de la fonction « mnrk4 »
Qui contient une fonction « matrices ».
??? 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);
Sachant que la fonction « matrices »s’exécute sans erreur.
Voici le corps des 2 fonctions :
% 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);
la 2eme fonction
% 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