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

Olympiades mathématiques, énigmes et défis
threepwood
Messages: 8
Enregistré le: 13 Mar 2014, 20:54

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

par threepwood » 13 Mar 2014, 22:32

[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]



Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 14:25

par Cliffe » 16 Mar 2014, 18:26

ça serait super avec les balises LaTeX :lol3:

Edit :
Je viens de tout lire ^^. Tu pourrais simplifier en allant droit au but. Les personnes qui passent par ici maîtrise le calcul matriciel et les outils comme MatLab. Tu aurais plus de réponses en évitant la partie élec par exemple.

J'ai l'impression que la réponse à la première question suffit pour la deuxième. Je te conseille Maple qui fait du calcul formel :

[CENTER]Image [/CENTER]

Tu peux aussi faire une petite application qui automatise tes calculs avec Maple : maplet
Des exemples : http://www.maplesoft.com/applications/category.aspx?CID=1331

threepwood
Messages: 8
Enregistré le: 13 Mar 2014, 20:54

par threepwood » 18 Mar 2014, 15:14

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 !

threepwood
Messages: 8
Enregistré le: 13 Mar 2014, 20:54

par threepwood » 18 Mar 2014, 15:27

Je vais faire plus simple, et revenir aux bases des bases; ça me suffira pour la suite:

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 ^^

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 14:25

par Cliffe » 18 Mar 2014, 15:42

Une équation matriciel n'est rien d'autre qu'un système d'équations.

Exemple simple :

[CENTER][/CENTER]

Maintenant tu peut utiliser des logiciels comme maple qui te font tous les calculs. A tu compris mon exemple du début ?

threepwood
Messages: 8
Enregistré le: 13 Mar 2014, 20:54

par threepwood » 18 Mar 2014, 16:11

Je souhaite utiliser une methode de calcul matriciel pour resoudre ce probleme.
Impossible pour moi d'utiliser un outil de calcul formel, j'ai quelques dizaines de millions de calculs a faire. Ce sera implémenté en Matlab, puis compilé en C avant d’être exécuté pendant quelques jours pour me donner les résultats. Sachant egalement que pour chaque calcul, les tailles de Ma et Mb seront variables.
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

threepwood
Messages: 8
Enregistré le: 13 Mar 2014, 20:54

par threepwood » 18 Mar 2014, 16:22

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...

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 14:25

par Cliffe » 18 Mar 2014, 16:35

Quel est ton niveau en math ?
Sais-tu multiplier des matrices et résoudre des systèmes d'équations ?

threepwood
Messages: 8
Enregistré le: 13 Mar 2014, 20:54

par threepwood » 18 Mar 2014, 16:51

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]

Cliffe
Membre Rationnel
Messages: 967
Enregistré le: 12 Juin 2012, 14:25

par Cliffe » 18 Mar 2014, 17:21

Et si tu as plusieurs solutions ?

 

Retourner vers ⚔ Défis et énigmes

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 16 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite