 |
Apprendre Maple Site dédié au logiciel de calcul formel Maple
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 02 Fév 2012 15:57 Sujet du message: opérateur particulier sur 2 matrices |
|
|
Bonjour,
Je voudrais créer un opérateur matriciel qui me permet à partir de deux matrices de réaliser les opérations suivantes :
- les diagonales restent à 1
- le terme en haut à droite est le produit des inverses des termes en haut à droite
- le terme en bas à gauche est le produit des termes en bas à gauche (voir l'image pour plus de détails)
Merci d'avance pour votre aide |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 03 Fév 2012 9:00 Sujet du message: Re |
|
|
Bonjour,
L'explication donnée dans les premières lignes ne correspond pas au résultat (21) escompté. Je pense que vous attendez ceci:
Code: |
> with(linalg):
> operateur:=proc(A::matrix, B::matrix)
> evalm(matrix([[1,1/(1/A[1,2]+1/B[1,2])],[A[2,1]+B[2,1],1]]))
> end proc:
> A:=matrix(2,2): B:=matrix(2,2): operateur(A,B);
[ 1 ]
[ 1 -----------------]
[ 1 1 ]
[ ------- + -------]
[ A[1, 2] B[1, 2]]
[ ]
[A[2, 1] + B[2, 1] 1 ]
|
Cela vous convient-il? |
|
Revenir en haut de page |
|
 |
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 03 Fév 2012 10:47 Sujet du message: |
|
|
OK la procédure est parfaite. C'est exactement ce que je voulais.
Par contre, dans mon programme, j'utilisais le package
with(LinearAlgebra): pour les matrices. Aussi, pour pouvoir utiliser votre procédure, il faut que je passe mes matrices avec un Grand M (pour matrices du package with(LinearAlgebra) en matrices avec un petit m (pour matrices du package with(linalg)).
Apparemment, convert peut me permettre de passer de matrices en with(LinearAlgebra) en matrices en with(linalg). Par contre, quel fonction peut me permettre de faire le contraire passer d'une matrice with(linalg) à une matrice LinearAlgebra.
Pour le moment, mon code qui ne fonctionne pas encore est le suivant :
Code: |
restart;
with(linalg):
with(LinearAlgebra):
with(Student[MultivariateCalculus]):
Expression des matrices de transfert
H_32 := Matrix([<1,0>,<1/k,1>]);
Matrix(%id = 187495476)
H_54 := Matrix([<1,0>,<1/(I*omega*c),1>]);
> operateurparallele := proc (A::matrix, B::matrix) evalm(matrix([[1, 1/(1/A[1, 2]+1/B[1, 2])], [A[2, 1]+B[2, 1], 1]])) end proc; A := matrix(2, 2); B := matrix(2, 2); operateurparallele(A, B);
H_61:=operateurparallele(H_32,H_54);
Error, recursive assignment
H_76 := Matrix([<1,-m*omega^2>,<0,1>]);
Matrix(%id = 201476976)
H_71 := MatrixMatrixMultiply(H_76, H_61);
|
Merci d'avance pour votre aide. |
|
Revenir en haut de page |
|
 |
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 03 Fév 2012 11:03 Sujet du message: |
|
|
J'ai fait un essai en transformant la procédure avec des matrices de type Matrix.
Code: |
restart;
with(linalg):
with(LinearAlgebra):
with(Student[MultivariateCalculus]):
Expression des matrices de transfert
H_32 := Matrix([<1,0>,<1/k,1>]);
Matrix(%id = 3367972)
H_54 := Matrix([<1,0>,<1/(I*omega*c),1>]);
Matrix(%id = 3368228)
> operateurparallele := proc (A::(M*atrix), B::(M*atrix)) Matrix([`<,>`(1, A[2, 1]+B[2, 1]), `<,>`(1/(1/A[1, 2]+1/B[1, 2]), 1)]) end proc; operateurparallele(A, B);
Error, testing against an invalid type
H_61:=operateurparallele(H_32,H_54);
Error, testing against an invalid type
H_76 := Matrix([<1,-m*omega^2>,<0,1>]);
Matrix(%id = 210853268)
H_71 := MatrixMatrixMultiply(H_76, H_61);
|
Par contre, mon code ne fonctionne tjs pas. Je vous remercie d'avance pour votre aide. |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 03 Fév 2012 12:44 Sujet du message: |
|
|
Voici le code avec LinearAlgebra:
Code: |
> restart; with(LinearAlgebra);
> H_32 := Matrix([[1, 0], [1/k, 1]]); H_54 := Matrix([[1, 0], [1/(I*omega*c), 1]]);
Matrix(%id = 51707096)
Matrix(%id = 51707160)
> operateurparallele := proc (A::Matrix, B::Matrix) Matrix([[1, A[2, 1]+B[2, 1]], [1/(1/A[1, 2]+1/B[1, 2]), 1]]) end proc:
> operateurparallele(H_32, H_54);
Error, (in operateurparallele) numeric exception: division by zero
|
Normal d'avoir ce message, à cause des 0 en position [1,2]. |
|
Revenir en haut de page |
|
 |
bendesarts
Inscrit le: 27 Fév 2009 Messages: 234
|
Posté le: 03 Fév 2012 16:16 Sujet du message: |
|
|
Merci pour ton aide.
Par contre, je n'ai pas bien compris ta remarque.
Qu'est-ce que je dois changer pour que la procedure fonctionne avec des matrices de type Matrix?
Merci d'avance pour ton aide. |
|
Revenir en haut de page |
|
 |
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 03 Fév 2012 17:04 Sujet du message: |
|
|
Rien à changer, ma remarque concernait les matrices de ton exemple qui comportaient un 0 en coefficient en position ligne 1colonne 2. |
|
Revenir en haut de page |
|
 |
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|

Développé par phpBB © 2001, 2006 phpBB Group
Traduction par : phpBB-fr.com
Apprendre Maple - ©
- Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.
|