Je conçois actuellement un petit programme pour résoudre plus simplement des exercices portant sur la commande numérique d'un système. Le but étant, à partir de trois matrices de départ, calculer des gains qui servirons ensuite à être implémenter dans un programme matlab/Simulink pour réaliser la commande d'un moteur. Seulement, l'une des fonctions de mon programme n'est pas au point:
- Code: Select all
Define LibPub calculh(f,g,v,w,l,n)=
Func
:Local h,j,u,p2,p1,f1,g1
:Disp round(g|t=l,3)
:[h1,h2]→h
:Define j=det(z*identity(n)-(round(f|t=l,3)+round(g|t=l,3)*h))
:Disp "equation caractéristique"
:round(j,3)
:Disp expand(j)
:polyCoeffs(j)→u
:expand(−u[2])→u[2]
:expand(u[3])→u[3]
:p1:=2*^(−v*w*l)*cos(w*l*√(1-v^(2)))
:p2:=^(−2*v*w*l)
:Disp "équation à résoudre"
:Disp p1=u[2]
:Disp p2=u[3]
:Return solve(system(u[2]=p1,u[3]=p2),h1,h2)
:EndFunc
f est une matrice 2*2 et g 2*1 (une colonne). Je cherche dans cette fonction à faire une identification entre les coefficients d'une équation déterminées à partir des matrices f et g, et les coefficients p1 et p2 de l'équation caractéristique afin de déterminer les gains h1 et h2. Voila ce que j'obtiens:
equation caractéristique
z^(2)-0.051*h1*z-0.636*h2*z-1.644*z+6.36e−16*h1*h2-0.045327*h1+0.636*h2+0.740327
équation à résoudre
1.70209=0.051*h1+0.636*h2+1.644
0.740818=h1*(6.36e−16*h2-0.045327)+0.636*h2+0.740327
h1=−1.888764705882215 and h2=1.51457547169814 or h1=0. and h2=0.
Les résultats ne sont pas les bons(normalement 0.603 et 0.043) parce qu'il y a un terme qui fausse toute l'équation: 6.36e−16*h1*h2. On est censé pouvoir négliger ce terme pour réaliser le calcul de h1 et h2. J'ai tout essayé, des arrondis et des troncatures notamment, mais impossible de faire disparaître ce terme de mon équation. C'est pourquoi j'en viens à demander votre aide. Si vous avez besoin de plus de détails (calcul de f et g notamment) je peux les fournir.
Merci à la grande âme qui se penchera sur mon problème
Cordialement