Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 10. 11. 2010 16:39

muab
Zelenáč
Příspěvky: 3
Reputace:   
 

matlab inverzni matice

Potrebuju vysvetlit jak funguje tento program vim ze vytvari inverzni matice  ale nevim jak presne.

funkce([1 0 1 0; 0 1 0 1; 0 0 1 0; 1 0 0 1])

function y = funkce(x)
[r,s] = size(x);


if r ~= s
    disp('Zadejte pouze ctvercovou matici.')
    y = [];
    return
end


y = eye(r);


for j = 1 : r
    for i = j : r
        if x(i,j) ~= 0
            for k = 1 : r
                s = x(j,k); x(j,k) = x(i,k); x(i,k) = s;
                s = y(j,k); y(j,k) = y(i,k); y(i,k) = s;
            end
            t = 1/x(j,j);
            for k = 1 : r
                x(j,k) = t * x(j,k);
                y(j,k) = t * y(j,k);
            end
            for L = 1 : r
                if L ~= j
                    t = -x(L,j);
                    for k = 1 : r
                        x(L,k) = x(L,k) + t * x(j,k);
                        y(L,k) = y(L,k) + t * y(j,k);
                    end
                end
            end           
        end
        break
    end


    if x(i,j) == 0
        disp('Chybna matice!')
        y = 'chyba';
        return
    end
end
x

dekuji za odpoved

Offline

 

#2 10. 11. 2010 18:27

Lumikodlak
Místo: Praha
Příspěvky: 212
Pozice: Programator nebo tak neco :-)
Reputace:   19 
 

Re: matlab inverzni matice

Podle me to provadi pomoci Gauss - Jordanovy metody.

Nebo ches podrobnejsi vysvetleni - co znamenaji ty cykly, podminky a podobne?

Offline

 

#3 10. 11. 2010 18:35

muab
Zelenáč
Příspěvky: 3
Reputace:   
 

Re: matlab inverzni matice

jo to by bylo dobre diky moc

Offline

 

#4 10. 11. 2010 19:09

Lumikodlak
Místo: Praha
Příspěvky: 212
Pozice: Programator nebo tak neco :-)
Reputace:   19 
 

Re: matlab inverzni matice

ok, to bude ale tezke :-) no neco zkusim napsat

'x' je ta puvodni matice, ktera se prevadi na jednotkovou, 'y' je ze zacatku jednotkova a prevede se na inverzni.

for j = 1 : r
  Tady prochazis vsechny sloupce, takze v 'j' mas cislo sloupce, ktery se snazis vynulovat (krome diagonaly - tam bude 1).

    for i = j : r
  V tomhle cyklu hledas prvni radek pod diagonalou (vcetne), ktery nema v tom j-tem sloupci nulu.

        if x(i,j) ~= 0
  To vybere ten "nenulovy" radek.

            for k = 1 : r
                s = x(j,k); x(j,k) = x(i,k); x(i,k) = s;
                s = y(j,k); y(j,k) = y(i,k); y(i,k) = s;
            end
  To vymeni j-ty a i-ty radek, takze na diagonale, v x(j,j), bude nenulove cislo.

            t = 1/x(j,j);
            for k = 1 : r
                x(j,k) = t * x(j,k);
                y(j,k) = t * y(j,k);
            end
  Tady se ten radek vydeli tak aby na diagonale byla jednicka.

            for L = 1 : r
                if L ~= j
                    t = -x(L,j);
                    for k = 1 : r
                        x(L,k) = x(L,k) + t * x(j,k);
                        y(L,k) = y(L,k) + t * y(j,k);
                    end
                end
            end           
  Tenhle cyklus odecte nasobek toho radku s jednickou na diagonale od vsech ostatnich tak, aby vsude jinde v j-tem sloupci byly nuly.

        break - vyskoci z cyklu po nalezeni nenuloveho radku - je v te podmince 'if x(i,j) ~= 0' a vyskoci z toho cyklu 'for i = j : r'

    if x(i,j) == 0
        disp('Chybna matice!')
        y = 'chyba';
        return
    end
  Vypise zpravu v pripade, ze nenasel nenulovou hodnotu ve sloupci pod diagonalou (vcetne), takze k matici neexistuje inverzni.

Jestli neco neni jasne tak se ptej, mozna ze odpovim (nebo nekdo jiny)

Offline

 

#5 10. 11. 2010 19:17

muab
Zelenáč
Příspěvky: 3
Reputace:   
 

Re: matlab inverzni matice

velmi dekuji

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson