Méthode alculant l'inverse d'une matrice

[Résolu/Fermé]
Signaler
-
 Kia -
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

3 réponses

Messages postés
78
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
13 septembre 2009
47
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 !
10
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

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
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?
Messages postés
78
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
13 septembre 2009
47
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 !
je te remercie
ca me fait plaisir de voir quelqun qui maide comme ca
jai cherché sur plusieurs sites etc moi je demande pas les choses comme ca au gens comme si ce sont des esclaves... je te dis ca car comme tu as pu le constater des impolis se permettent de faire ce genre de jugement

quand à moi appelle moi question car sahid est loin detre mon nom :p

sinon si je cherche des programmes en entier cest tout simplement car on minterdit a mon école dutiliser les méthodes préprogrammée..:(
cest idiot mais cest comme ca
là je vais tester le programme
et encore je te remercie 1000 fois car tu consacres de ton temps pour maider et je ten suis reconnaissant!
Messages postés
78
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
13 septembre 2009
47 > question
Bonsoir question
Je pense que tu as raison sur un point, même sur le web il doit être assez difficile de trouver les programmes Matlab faisant ce que tu demandes dans la mesure où il existe des méthodes préprogrammées. Dis-moi question, dans ton école, comptent-ils aussi t'obliger à calculer l'inverse d'une matrice avec un boulier ? Tant qu'on y est, pourquoi pas ! ^_^
Ce qu'on t'a demandé dans ton école, de quoi s'agit-il exactement ? J'ai toujours du mal à comprendre !
Dois-tu faire un gros programme sans utiliser les fonctions préprogrammées ou dois-tu recoder toutes ces petites fonctions préprogrammées ? Si le but de l'exercice est de recoder les fonctions, il serait bon que tu cherches aussi par toi-même, non ?
Quoiqu'il en soit, tu es le bienvenu question ! C'est un réel plaisir que de répondre à tes demandes, tu es très sympathique ! ^_^
>
Messages postés
78
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
13 septembre 2009

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
Messages postés
4
Date d'inscription
jeudi 8 mai 2008
Statut
Membre
Dernière intervention
11 mai 2008
>
Messages postés
78
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
13 septembre 2009

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
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.
Messages postés
25
Date d'inscription
dimanche 24 janvier 2010
Statut
Membre
Dernière intervention
17 mai 2013
2
SVP solution en pascal