Apprendre Maple Index du Forum Apprendre Maple
Site dédié au logiciel de calcul formel Maple
 
  Page d'accueilPage d'accueil   FAQFAQ    RechercherRechercher    Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs 
S'enregistrerS'enregistrer    ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

opérateur particulier sur 2 matrices

 
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Maple en algèbre linéaire
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
bendesarts



Inscrit le: 27 Fév 2009
Messages: 234

MessagePosté le: 02 Fév 2012 15:57    Sujet du message: opérateur particulier sur 2 matrices Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 03 Fév 2012 9:00    Sujet du message: Re Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
bendesarts



Inscrit le: 27 Fév 2009
Messages: 234

MessagePosté le: 03 Fév 2012 10:47    Sujet du message: Répondre en citant

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)Smile 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
Voir le profil de l'utilisateur Envoyer un message privé
bendesarts



Inscrit le: 27 Fév 2009
Messages: 234

MessagePosté le: 03 Fév 2012 11:03    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 03 Fév 2012 12:44    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
bendesarts



Inscrit le: 27 Fév 2009
Messages: 234

MessagePosté le: 03 Fév 2012 16:16    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
ALS



Inscrit le: 11 Sep 2006
Messages: 647

MessagePosté le: 03 Fév 2012 17:04    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Apprendre Maple Index du Forum -> Maple en algèbre linéaire Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  
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


phpBB

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.