[FONT=Courier New][FONT=Courier New]Problème de calcul matriciel et mise en forme du résultat
Coucou tout le monde !
J'ai un projet sur lequel j'ai besoin de faire du calcul matriciel; et j'ai un certain nombre d'opérations que je souhaiterais automatiser avec Matlab. Problème: je suis nul en maths. Je n'ai jamais appri le calcul Matriciel, et maintenant j'en ai besoin !
Ce post a donc deux parties (vous pouvez répondre à l'une ou l'autre).
- 1) La première pose une question toute simple sur un exemple d'équation matricielle à résoudre.
- 2) La second vous expose un problème à résoudre; un problème que je dois résoudre pour le taf!
C'est donc une application très pratique des mathématiques, pas juste pour le fun, mais pour me permettre de conçevoir un système qui sera industrialisé
C'est partit !
1) Exemple d'équation matricielle à résoudre:
(formalisme Matlab: un point-virgule signale qu'on passe à la ligne suivante)
J'ai une matrice 3x4 Mx = [ 1 2 4 6 ; 8 10 12 14 ; 16 18 20 22 ]
Une Matrice 4x1 A = [ 1 ; 2 ; 3 ; 4 ]
Le produit matriciel B = Mx * A donne la matrice 3x1: B = [41 120 200].
Maintenant faisons l'opération inverse: Je ne connais pas Mx, et je veux résoudre:
Mx * A = B
avec A = [ 1 ; 2 ; 3 ; 4 ] et B = [41 120 200]
Sachant que A n'est pas une matrice carrée, impossible d'effectuer le calcul Mx = B * A^-1
(formalisme Matlab: ^ est le signe "puissance").
Comment calculer Mx ?
2) PROBLEME
(pardon pour les écarts de formalisme, mais il y a longtemps que j'ai quitté les bancs de l'école ^^)
Accrochez-vous, c'est partit !
Je dispose des deux systèmes d'équations suivants:
système (1):
dq1 = ( Ma(1,1)*VOUT + Ma(1,2)*V1 + Ma(1,3)*VIN ) * 1
dq2 = ( Ma(2,1)*VOUT + Ma(2,2)*V1 + Ma(2,3)*VIN ) * a
dq1p = ( Ma(3,1)*VOUT + Ma(3,2)*V1 + Ma(3,3)*VIN ) * ap
dq1n = ( Ma(4,1)*VOUT + Ma(4,2)*V1 + Ma(4,3)*VIN ) * ap
dq2p = ( Ma(5,1)*VOUT + Ma(5,2)*V1 + Ma(5,3)*VIN ) * a*ap
dq2n = ( Ma(6,1)*VOUT + Ma(6,2)*V1 + Ma(6,3)*VIN ) * a*ap
...pouvant s'écrire de manière matricielle: [dq] = [Ma] * [ VOUT ; V1 ; VIN ] (1)
[dq]: matrice 6x1, [dq] = [ dq1 ; dq2 ; dq1p ; dq1n ; dq2p ; dq2n ]
[Ma]: matrice 6x3, [Ma] = [ Ma(1,1) Ma(1,2) Ma(1,3) ; Ma(2,1) Ma(2,2) Ma(2,3) ; ... ; Ma(6,1) Ma(6,2) Ma(6,3).
Tous les coefficients Ma(i,j) sont réels et connus.
a,ap: scalaires (constantes), réels et pas définis. Je m'en servirai dans une dernière phase de calcul (que je ne épargnerai ici).
système (2):
Mb(1,1)*dq1 + Mb(1,2)*dq2 + Mb(1,3)*dq1p + Mb(1,4)*dq1n + Mb(1,5)*dq2p + Mb(1,6)*dq2n = dqout
Mb(2,1)*dq1 + Mb(2,2)*dq2 + Mb(2,3)*dq1p + Mb(2,4)*dq1n + Mb(2,5)*dq2p + Mb(2,6)*dq2n = 0
Mb(3,1)*dq1 + Mb(3,2)*dq2 + Mb(3,3)*dq1p + Mb(3,4)*dq1n + Mb(3,5)*dq2p + Mb(3,6)*dq2n = dqin
...pouvant s'écrire de manière matricielle: [ dqout ; 0 ; dqin ] = [Mb] * [dq] (2)
[dq]: matrice 6x1, [dq] = [ dq1 ; dq2 ; dq1p ; dq1n ; dq2p ; dq2n ], la même que dans le système (1)
[Mb]: matrice 3x6, [Mb] = [ Mb(1,1) Mb(1,2) Mb(1,3) Mb(1,4) Mb(1,5) Mb(1,6) ; ... ; Mb(3,1) Mb(3,2) Mb(3,3) Mb(3,4) Mb(3,5) Mb(3,6)
Tous les coefficients Mb(i,j) sont réels et connus.
On a donc:
[dq] = [Ma] * [ VOUT ; V1 ; VIN ] (1)
[ dqout ; 0 ; dqin ] = [Mb] * [dq] (2)
Pourquoi cette forme de départ? Car je souhaite automatiser le calcul avec Matlab, et j'ai une grande quantité de coefficients Ma et Mb qui seront très faciles et rapides à saisir sous cette forme, juste par observation d'un circuit électronique.
JE VEUX EXPRIMER UN RESULTAT SOUS LA FORME:
[VOUT ; V1 ; dqin] = [MV]*[1 ; a ; ap ; a*ap]*VIN - [MI]*[1;a;ap;a*ap]*dqout
ou
[VOUT ; V1 ; dqin] = [MV]*[1 a ap a ap]*VIN - [MI]*[1 a ap a ap]*dqout
ou
[VOUT ; V1 ; dqin] = [MV]*[1 0 0 0 ; 0 a 0 0 ; 0 0 ap 0 ; 0 0 0 a*ap]*VIN - [MI]*[1 a ap a ap]*dqout
ou... toute autre forme d'agencement matriciel de 1, a, ap, a*ap qui soit facilement exploitable pour la suite de mes calculs.
L'ingénieur s'explique maintenant:
J'ai un circuit électronique (même énormément de circuits différents, ce pourquoi je souhaite automatiser le calcul pour sélectionner les meilleurs candidats pour mon application).
Ce circuit (un convertisseur DC-DC capacitif) est soumis aux contraintes suivantes: une tension d'entrée VIN, un courant de charge qout. Ce sont mes variables d'entrée, celles que je vais imposer à mon circuit.
En réaction, ce circuit produit de lui-même les quantités suivantes: une tension de sortie VOUT, une tension sur un noeud interne V1, et consomme un courant qin. Ces 3 quantités sont mes variables de sortie; ce sont elles que je veux calculer, et exprimer d'une manière élégante en fonction de VIN, qout (variables d'entrée) et a, ap, a*ap (variables que je déterminerai plus tard pour optimiser une quantité que je vous épargnerai ici).
Les matrices Ma et Mb seront très facile à générer en un coup d'oeil sur le schéma de l'un de mes circuits, ce pourquoi je tiens à garder cette forme de départ.
Les calculs seront automatisés avec Matlab, capable d'effectuer des calculs rapidement, mais ne donnant pas accès à du calcul symbolique.
Ce sont les matrices MV et MI que je souhaite obtenir, qui contiendront des nombres réels, et qui pourront être facilement calculés par Matlab (fonctions inverse, identité, etc, etc).
Je vous laisse le choix de l'agencement de la matrice 1 a ap a*ap.
Pouvez-vous m'aider à aboutir à cette forme finale ?
Précisions, si besoin, sous demande. J'y répondrai avec plaisir au regard de l'importance que ce calcul a pour moi
Bons calculs à tous ![/FONT][/FONT]