Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Problème de calcul matriciel et mise en forme du résultat

Posté par
threepwood
13-03-14 à 21:46

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 !

Posté par
lafol Moderateur
re : Problème de calcul matriciel et mise en forme du résultat 17-03-14 à 14:23

Bonjour
pour ton premier problème, tu es conscient qu'il n'y a absolument pas unicité de Mx ?
par exemple Mx = \begin{pmatrix}41&0&0&0\\120&0&0&0\\200&0&0&0\end{pmatrix} convient aussi bien que la première que tu as donnée...

Posté par
threepwood
re : Problème de calcul matriciel et mise en forme du résultat 18-03-14 à 14:13

D'accord, je vais faire plus simple, et y aller etape par etape.

Question plus simple et sans chichis, donc, je m'arrangerai pour le reste:

J'ai l'equation matricielle suivante (un point-virgule symbolise la ligne suivante dans la matrice):

[ -1;0;0 ]*x1 + [M1]*[Ma]*x2 = [M2]*[Ma]*y1 + [M3]*[Ma]*y2

x1: scalaire reel
[M1], [M2], [M3]: matrices de reels 3x6
[Ma]: matrice de coefficients reels 6x1

Je suis nul en maths, et j'aimerais avoir le developpement pour resoudre cette equation,
et exprimer y1 et y2 independament l'un de l'autre en fonction de x1 et x2 et des coefficients contenus dans [Ma].

Quelque chose sous la forme, par exemple:
[ y1;y2 ] = [ Mx1 ]*x1*matrice composee des coeffs de MA + [ Mx2 ]*x2*matrice composee des coeffs de MA

Je vous remercie d'avance !

Posté par
threepwood
re : Problème de calcul matriciel et mise en forme du résultat 18-03-14 à 14:26

Je vais même faire encore plus simple, et revenir aux bases des bases:
comment résoudre une équation sous la forme:
[M1]*x = [M2]*y,
sachant que M1 et M2 ne sont pas carrées, de taille 3x6.
Je veux exprimer y en fonction de x.
Voila, on va déjà commencer par ça ^^

Posté par Profil Dlzlogicre : Problème de calcul matriciel et mise en forme du résultat 18-03-14 à 14:41

Bonjour,
J'ai l'impression que je comprends à peu près votre problème, mais j'en suis pas sûr.
Est-ce qu'on pourrait le reposer comme suit :
"Comment résoudre un système linéaire de n équations à m inconnues, avec n > m ?"

Posté par
threepwood
re : Problème de calcul matriciel et mise en forme du résultat 18-03-14 à 15:08

Oui, mais uniquement avec des techniques de calcul matriciel, puisque tout sera calcule' par Matlab, et que n et m pourront être variables d'un calcul a` l'autre.

Posté par
threepwood
re : Problème de calcul matriciel et mise en forme du résultat 18-03-14 à 15:13

Je souhaite utiliser une méthode de calcul matricielle pour résoudre ce problème.
Tout ce que je souhaite a l'instant présent, c'est savoir comment résoudre cette équation uniquement avec des manipulations matricielles (transposée, inverse, etc...). Pour l'instant juste des maths, quoi, un papier, un crayon, et la méthode pour arriver a` exprimer y = ... *x

Posté par Profil Dlzlogicre : Problème de calcul matriciel et mise en forme du résultat 18-03-14 à 15:18

J'ai pas Matlab, mais si nécessaire, je peux essayer de l'écrire sur Syslab et hors technique de calcul matriciel.
Donc, en fait je peux pas vous aider.

Posté par
threepwood
re : Problème de calcul matriciel et mise en forme du résultat 18-03-14 à 15:21

Je n'aurais pas du vous exposer tout ça; disons qu'on oublie.
Ne parlons plus de logiciel; parlons de maths. Un tableau, une craie, et on m'explique:
J'ai [Ma] = [Mb]*[X], comment calculer [X] sachant que [Ma] et [Mb], de même dimensions, ne sont pas carrées...

Posté par
Camélia Correcteur
re : Problème de calcul matriciel et mise en forme du résultat 18-03-14 à 15:41

Bonjour

Un peu dans le vide... Si M est une matrice de rang r ayant m colonnes et n lignes, il existe une matrice inversible P carrée m\times m et une matrice inversible Q carrée n\times n telles que

QMP=\begin{pmatrix} I_r & O_{r,m-r}\\ O_{n-r,r} & O_{n-r,m-r}\end{pmatrix}

I_r est la matrice carrée r\times r ayant des 1 sur la diagonale et des 0 ailleurs, les autres étant les matrices nulles.

Posté par
threepwood
re : Problème de calcul matriciel et mise en forme du résultat 18-03-14 à 15:52

On m'a donne une réponse, je vais vérifier si c'est vrai:
On multiplie membre a membre par la transposée de [Ma] pour rendre la matrice du coté gauche carrée donc inversible:
[Ma]*[X] = [Mb]
<=> [Ma]T * [Ma] * [X] = [Ma]T * [Mb]
<=> [X] = ( [Ma]T * [Ma] )^-1 * [Ma]T * [Mb]

Posté par Profil Dlzlogicre : Problème de calcul matriciel et mise en forme du résultat 18-03-14 à 15:54

Bon, je sais que je vais passer pour un hérétique, je veux bien qu'on me le dise, mais avec douceur.

La méthode employée est la suivante :
Le système comporte un certain nombre de paramètres, qui sont les termes de vos matrices [Ma] et [Mb].
Tous ces paramètres sont entachés d'une erreur. La solution optimale s'obtient en minimisant la somme des carrés des écarts, c'est à dire la somme des carrés des erreurs.
Cette somme est une fonction des différents paramètres, elle sera minimale pour les valeurs qui annulent la dérivée.
C'est une fonction de plusieurs variables, on calcule les dérivées partielles et on écrit qu'elles sont nulles (cf l'indépendance des écarts).
On obtient un système de n équations linéaires où les n inconnues sont les paramètres des équations de départ.
On peut résoudre ce système par la méthode de votre choix.

Posté par
Camélia Correcteur
re : Problème de calcul matriciel et mise en forme du résultat 18-03-14 à 16:15

Citation :
rendre la matrice du coté gauche carrée donc inversible


Toutes les matrices carrées ne sont pas inversibles!

Posté par
LeDino
re : Problème de calcul matriciel et mise en forme du résultat 18-03-14 à 17:49

Citation :
[M1]*x = [M2]*y,
sachant que M1 et M2 ne sont pas carrées, de taille 3x6.
Je veux exprimer y en fonction de x.

Je reformule :   A.X = B.Y

A :   matrice 3 x 6
B :   matrice 3 x 6
X :   vecteur à 6 composantes
Y :   vecteur à 6 composantes

A.X :  vecteur à 3 composantes
B.Y :  vecteur à 3 composantes

Donc tu as 3 équations à 6 inconnues (Xi)
Il n'y a donc pas de solution calculable.
Tu peux éventuellement écrire les Yi en fonction des Xi...

Citation :
On m'a donne une réponse, je vais vérifier si c'est vrai:
On multiplie membre a membre par la transposée de [Ma] pour rendre la matrice du coté gauche carrée donc inversible:

On va plutôt dire que BT.B est éventuellement inversible et qu'on s'intéresse à ce cas.

A.X = B.Y
  
==>   BT.A.X  =  BT.B.Y  
==>   (BT.B)-1.(BT.B).Y  =  Y  =  (BT.B)-1.BT.A.X

Cette dernière relation te donne les Yi en fonction linéaire des Xi.
C'est ça que tu cherches ?



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !