Les Allergies
Alimentaires
Posez votre question Signaler

Méthode alculant l'inverse d'une matrice [Résolu]

question - Dernière réponse le 1 oct. 2011 à 17:22
Bonjour,
quelqu'un aurait-il un programme permettant (sous matlab) de calculer l'inverse d'une matrice?
je ne parle pas de la méthode préprogrammé "inv()" mais d'un programme entier svp..
merci d'avance
Lire la suite 

Méthode alculant l'inverse d'une matrice »

10 réponses
Réponse
+7
moins plus
Coucou question, c'est encore moi !
J'ai vu que tu t'étais inscrit donc ^_^
Cela est normal si tu ne peux pas m'envoyer de messages. Dans mon profil, je refuse que les membres me contactent par la messagerie.

D'où je trouve les programmes ? Quelle idée ! Je les écris !
J'en profite pour t'écrire ici la méthode d'inversion d'une matrice par pivot de Gauss. Pour la résolution d'un système par pivot de Gauss, je t'ai répondu sur ton autre sujet.
function B = calcul_inverse_gauss(A)

n=size(A,1);
B=eye(n);

for p=1:n
    vec=[(1:p-1) n (p:n-1)];
    test=1;
    while A(p,p)==0
        if test==n
            error('La matrice n''est pas inversible')
        end
        A=A(vec,:);
        B=B(vec,:);
        test=test+1;
    end
    B(p,:)=B(p,:)/A(p,p);
    A(p,:)=A(p,:)/A(p,p);
    for q=p+1:n
        B(q,:)=B(q,:)-A(q,p)*B(p,:);
        A(q,:)=A(q,:)-A(q,p)*A(p,:);
    end
end

for p=n:-1:2
    for q=p-1:-1:1
        B(q,:)=B(q,:)-A(q,p)*B(p,:);
        A(q,:)=A(q,:)-A(q,p)*A(p,:);
    end
end

Voilà ! Tu as plusieurs programmes pour inverser une matrice - programmes totalement inutiles cela dit - !
Bonne journée !
teouf - 18 mai 2009 à 18:58
pas mal ton prog super impressionner

par contre dsl je suis très novice dans matlab, j'ai pas trop compris la phase:

for p=1:n
vec=[(1:p-1) n (p:n-1)];
test=1;
while A(p,p)==0
if test==n
error('La matrice n''est pas inversible')
end
A=A(vec,:);
B=B(vec,:);
test=test+1;
end

peux tu m'expliquer

merci d'avance
Kia - 1 oct. 2011 à 17:22
Coucou.. J'ai une petite question concernant le programme ..

B=eye(n)

Le n c'est quoi dans ce cas la?
Est-ce le nombre de rangees?
Ajouter un commentaire
Réponse
+1
moins plus
Coucou question ! C'est encore moi ^_^
Décidément je ne te comprendrais jamais. Pourquoi veux-tu absolument recoder toutes les fonctions Matlab ? C'est dingue !
Cela n'est pas très grave, tu me répondras si tu en as envie.
Pour répondre à ta question, tu peux utiliser le programme que je t'ai donné la dernière fois pour calculer le déterminant, te souviens-tu ?
http://www.commentcamarche.net/forum/affich 6206577 methode mineurs principaux ou determinant
En effet, l'inverse d'une matrice est la transposée de la comatrice - matrice formée des cofacteurs - divisée par le déterminant. Voici donc ce que je te propose.
Tu reprends la fonction déterminant que je t'avais proposée.
function determinant = calcul_determinant(M)

determinant=0;

if size(M,1)==1
    determinant = M;
else
    for p=1:size(M,1)
        Mm=M;
        Mm(:,1)=[];
        Mm(p,:)=[];
        determinant = determinant + (-1)^(p+1)*M(p,1)*calcul_determinant(Mm);
    end
end

Et tu écris une autre fonction pour l'inverse.
function inverse = calcul_inverse(M)

inverse=zeros(size(M,1));

for p=1:size(M,1)
    for q=1:size(M,1)
        Mm=M;
        Mm(p,:)=[];
        Mm(:,q)=[];
        inverse(p,q) = (-1)^(p+q)*calcul_determinant(Mm);
    end
end

inverse = inverse.'/calcul_determinant(M);

Cela dit, de toutes les méthodes que j'aurais pu te proposer, je pense que c'est la plus lente ! ^_^
Il y a des tas d'algorithmes d'inversion beaucoup plus rapides, ne serait-ce que le pivot de Gauss - en particulier pour les matrices triangulaires - ou le passage par une factorisation LU que tu demandais ici - pourquoi t'appelles-tu un coup question et un coup sahid ? -
http://www.commentcamarche.net/forum/affich 6228341 programmation methode de factorisation lu
D'ailleurs, c'est très drôle, certains ici ont des passe-droits ici, ils peuvent intervenir dans des sujets qu'ils ne comprennent pas pour insulter les personnes sympathiques comme toi qui viennent demander poliment un programme - pas évident à faire me semble-t-il - et ils ont même des comparses qui viennent colorier leurs messages !
Pour la question que tu posais sur l'autre sujet sahid - ou question -, je ne vais pas pouvoir t'aider, mais tu peux essayer d'adapter cette routine lapack:
http://www.netlib.org/lapack/complex16/zgetrf.f
Mais dans le fond, c'est un peu bizarre de faire cela puisque Matlab utilise justement les routines lapack. Mais de toute façon, ta demande est bizarre ! ^_^
Je disais donc qu'il existait des méthodes plus rapides, je poursuis, et plus particulièrement pour des matrices spéciales comme les matrices symétriques, hermitiennes, bandes, creuses, etc...

Voilà, tu me diras si ça marche.

Bonne soirée sahid !
question - 6 mai 2008 à 21:49
salut
dou trouves tu tout ces algorithmes

j'essaie de programmer egalement la méthode du pivot de gauss en matlab (oui tu vas trouver ca bizarre toutes ces question :p)
bref voilà ce que j'ai
function x = gauss( A,b )
[n,n]=size(A);
for j= 2 : n
for i= j: n
A(i,:)=A(i,:)-A(j-1,:)*A(i,j-1)/A(j-1,j-1);
end
end

mais cette méthode ne marche pas avec ma matrice car cette méthode ne s'applique qu'avec les matrices triangulaires
or la mienne est simplement carrée

vois tu ce quil faudrait modifier par hasard?
merci
question3000Princess-Sarah - 8 mai 2008 à 13:05
je me suis inscrit
peux tu maider pour ca et me dire cmt tenvoyer de messages? merci
http://www.commentcamarche.net/forum/affich 6298307 pivot de gauss matlab
bouba113 - 17 févr. 2011 à 10:39
Bonjour;
j'ai éssayé de calculé linverse d'une matrice carré en utulisant ces programmes mais sa marche pas je ne sais pas pourquoi .j'ai ce message d'erreur qui s'afiche "Function definitions are not permitted at the prompt or in scripts".
merci pour votre aide j'en ai vraiment besoin.
Ajouter un commentaire
Réponse
+1
moins plus
SVP solution en pascal
Ajouter un commentaire
Ce document intitulé « méthode alculant l'inverse d'une matrice » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?