طلب مساعدة لتشخيص الخطا matlab

totostyle

Member
السلام عليكم
عندي مشكل في « 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
 
لايوجد اي خطا في البرنامج
ياليت تكتب المشكلة باللغة العربية
=====
برنامجك يجب ان يكون كالاتي ((( انسخه وضعه في ملف mat جديد واحذف الملف القديم ...لتجنب المشاكل))

اما عبارة الخطا
??? Input argument "q" is undefined.

Error in ==> mnrk4 at 10
[A B G F J]=matrices(q,qp,m,f);

فالبرنامج بحاجة الى قيم المدخلات
q,qp,m,f

يمكنك تحميل التصحيح من المرفقات

=======
% 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


 

المرفقات

  • mnrk4.rar
    664 بايت · المشاهدات: 11
طلب مساعدة لتشخيص الخطا matlab (لاحظ الملفات المرفقة)

السلام عليكم
اعتذر يا اخي الكريم على الكتابة بالفرنسية (ادرس بهذه اللغة)
اعيد صياغة السؤال
أواجه مشكل حجم المصفوفة في mnrk4 والذي يحتوي بداخله 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);

مع العلم أني جربت matrices على حدا بنجاح وهذا بإعطاء قيم اللازم إدخالها مثال
q=[12;5;0];qp=[14;20;13];f=1;m=5;
و عندما يتعلق الأمر ب mnrk4 أجد رسالة الخطأ السابق ذكرها مع العلم أني قد أدخلت أيضا
tau=[20;-50;16]; fr=[0;0;0] ;
ولكي تستطيع الإقتراب أكثر إليك أخي هذه الملفات المرفقة لتجريب
أشكرك أخي الكريم على المساعدة التي تقدمها إلي وأنا بأمس الحاجة إليها (إعداد مشروع تخرج)
 

المرفقات

  • simul.rar
    3.5 KB · المشاهدات: 15
للإفادة

السلام عليكم
لقد نجحت في تشخيص الخطأ يا إخوتي و لتعم الفائدة إليكم التصحيح
بالنسبة ل matrices لا يوجد تغيير
بالنسبة ل mnrk4 قمت بتعديل مقدمة و نهاية الدالة بالشكل التالي
function [Q Qp]=mnrk4
global m f tau q qp fr pas


Q=q+1/6*(K1+2*K2+2*K3+K4);
Qp=qp+1/6*(Q1+2*Q2+2*Q3+Q4);
مع إضافة global m f tau q qp fr pas في البرنامج الرئيسي

تحياتي لمن حاولوا مساعدتي ولم يستطيعوا
 
السلام عليكم
لقد نجحت في تشخيص الخطأ يا إخوتي و لتعم الفائدة إليكم التصحيح
بالنسبة ل matrices لا يوجد تغيير
بالنسبة ل mnrk4 قمت بتعديل مقدمة و نهاية الدالة بالشكل التالي
function [Q Qp]=mnrk4
global m f tau q qp fr pas


Q=q+1/6*(K1+2*K2+2*K3+K4);
Qp=qp+1/6*(Q1+2*Q2+2*Q3+Q4);
مع إضافة global m f tau q qp fr pas في البرنامج الرئيسي

تحياتي لمن حاولوا مساعدتي ولم يستطيعوا

بارك الله بك واحسنت العمل بان اضفت الصواب
بقي ان ترفع لنا في ملف المرفقات
التصحيحات كلها
=====
عملك متقن لك مني تحية وسلام
:gift:
 
لقد وضعت ملفا بإمكانكم تجريب التصحيح
يجب إدخال('path(path,'C:\................\simul\mnrk4 هذه العبارة في command window
ثم تجريب'test'
 

المرفقات

  • simul.rar
    3.1 KB · المشاهدات: 3
عودة
أعلى