Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Programski kod za inverz matrice.....

[es] :: Art of Programming :: Programski kod za inverz matrice.....

[ Pregleda: 4409 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Cypher
Sarajevo

Član broj: 29207
Poruke: 66
*.as58.ob.bih.net.ba.



Profil

icon Programski kod za inverz matrice.....08.03.2005. u 19:26 - pre 232 meseci
Želio bih zamoliti za pomoć u vezi ovog zadatka.Naime zadata je kvadratna matrica(nXn),gdje se n i elementi njeni unose.Treba napisati algoritam koji će izbaciti inverz te matrice.Imama dojam da bih znao riješit zadatke za pojedinačne slučajeve n=2 ili3....ali za n........teško....

Hvala!

p.s.nekima će se ovo učinit lagano.....ali pomozite!
 
Odgovor na temu

NeznamTkoSam

Član broj: 39660
Poruke: 279
*.cmu.carnet.hr.



Profil

icon Re: Programski kod za inverz matrice.....08.03.2005. u 19:55 - pre 232 meseci
Koji programski jezik?
 
Odgovor na temu

Cypher
Sarajevo

Član broj: 29207
Poruke: 66
*.as58.ob.bih.net.ba.



Profil

icon Re: Programski kod za inverz matrice.....08.03.2005. u 20:46 - pre 232 meseci
ma pascal ili c++...svejedno je.....
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.drenik.net.



+3 Profil

icon Re: Programski kod za inverz matrice.....08.03.2005. u 21:43 - pre 232 meseci
Mozes da uradis preko Gausovog algoritma za odredjivanje inverzne matrice.
Ideja algoritma je vrlo jednostavna. Radi se sa dve matrice pocetnom i jedinicnom (cije su dimenzije jednake onim od pocetne matrice).
Od pocetne matrice treba da dobijes jedinicnu (dovoljan uslov da je determinanta razlicita od 0) primenom dozvoljenih operacija (pomocu kojih se dobija ekvivalentna matrica). Istovremenom primenom ovih operacija na polaznu jedinicnu matricu dobices inverznu kada pocetnu svedes na jedinicnu.
Owl
 
Odgovor na temu

Goran Rakić
Beograd

Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Programski kod za inverz matrice.....08.03.2005. u 23:03 - pre 232 meseci
Da, to jeste dobro resenje ali treba pronaci dobitnu kombinaciju elementarnih transformacija nad kolonama. (na papiru jeste lako ali nisam siguran bas kako bi se to moglo iskodirati, a da slozenost algoritma ne bude eksponencijalna - mada verovatno i postoji neko resenje za to)

Ipak, ukoliko su matrice manje mozes probati pomocu:


http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

Časlav Ilić
Braunšvajg, Nemačka

Član broj: 4945
Poruke: 565
*.informatik.uni-erlangen.de.



+27 Profil

icon Re: Programski kod za inverz matrice.....09.03.2005. u 14:39 - pre 232 meseci
Citat:
Goran Rakić:
Da, to jeste dobro resenje ali treba pronaci dobitnu kombinaciju elementarnih transformacija nad kolonama. (na papiru jeste lako ali nisam siguran bas kako bi se to moglo iskodirati, a da slozenost algoritma ne bude eksponencijalna - mada verovatno i postoji neko resenje za to)

U stvari, te kombinacije ne moraju da se traže, dovoljno je u svakom koraku pomnožiti i oduzeti tekuću vrstu od svih narednih tako da se anuliraju svi elementi ispod trenutnog položaja na dijagonali (doduše, uz jednu malu kvačicu). Zatim isto to krećući se odozdo, da se anulira sve iznad dijagonale. Tako da složenost ispadne kubna.

Citat:

Ipak, ukoliko su matrice manje mozes probati pomocu:

Uh, ovo je ne samo eksponencijalne složenosti (što možda nije ni bitno, jer mi se čini da je ovde neka obrazovna potreba), nego je, rekao bih, i dobrano zeznuto za implementaciju u odnosu na Gausov algoritam (koga čine, u suštini, tri ugnježdene petlje).
 
Odgovor na temu

Goran Rakić
Beograd

Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Programski kod za inverz matrice.....09.03.2005. u 16:01 - pre 232 meseci
Da sada sam skapirao kako se implementira gausov metod. Hvala na razjasnjenju. :) Jeste mnogo brze i lakse za implementaciju.

Sto se implementacije tice, resenje za determinantu postoji na ovom forumu, a za adjungovanu matricu pa to je samo determinanti. (naravno poslednja recenica je ironija, i svakako da je gausov metod jednostavniji)
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.nat-pool.bgd.sbb.co.yu.



Profil

icon Re: Programski kod za inverz matrice.....11.03.2005. u 14:47 - pre 232 meseci
Probaj LU dekompoziciju...

http://www.zpm.fer.hr/courses/...html/..%5Chtml%5C2.2%20LUP.htm

yooyo
 
Odgovor na temu

Cypher
Sarajevo

Član broj: 29207
Poruke: 66
*.as58.ob.bih.net.ba.



Profil

icon Re: Programski kod za inverz matrice.....16.03.2005. u 16:57 - pre 232 meseci
Moze li mi neko ovaj kod prebacit u pascal...bio bih jako zahvalan...

#include <iostream>
#include <cstdio>
#include <cmath>
#include <climits>

using namespace std;

#define MAX 100

struct matrica
{
float data[MAX][MAX];
int m, n;
};

float det(matrica &a)
{
float res = INT_MAX;
if (a.m != a.n)
{
printf("Ovo nije kvadratna matrica!");
}
else if (a.m == 1)
{
res = a.data[0][0];
}
else
{
res = 0;
for (int i = 0; i < a.m; i++)
{
matrica b;
b.m = a.m - 1;
b.n = a.n - 1;
int mcur = 0, ncur = 0;
for (int m = 0; m < a.m; m++)
for (int n = 0; n < a.n; n++)
{
if (m != i && n != 0)
{
b.data[mcur][ncur] = a.data[m][n];
ncur++;
mcur += ncur / b.n;
ncur %= b.n;
}
}
res += (i % 2 == 0?1:-1) * a.data[0] * det(b);
}
}
return res;
}

int main()
{
matrica a;
matrica trans;
matrica adj;
matrica inv;
scanf("%i", &a.m);
a.n = a.m;
trans.n = adj.n = inv.n = a.n;
trans.m = adj.m = inv.m = a.m;
for (int i = 0; i < a.m; i++)
for (int j = 0; j < a.n; j++)
{
scanf("%f", &a.data[j]);
trans.data[j] = a.data[j];
}
float c = 1.0 / det(a);
int maxw = 0;
for (int i = 0; i < adj.m; i++)
for (int j = 0; j < adj.n; j++)
{
matrica b;
b.m = trans.m - 1;
b.n = trans.n - 1;
int mcur = 0, ncur = 0;
for (int m = 0; m < trans.m; m++)
for (int n = 0; n < trans.n; n++)
{
if (m != i && n != j)
{
b.data[mcur][ncur] = trans.data[m][n];
ncur++;
mcur += ncur / b.n;
ncur %= b.n;
}
}
adj.data[j] = ((i + j) % 2 == 0?1:-1) * det(b);
inv.data[j] = c * adj.data[j];
}
for (int i = 0; i < inv.m; i++)
{
for (int j = 0; j < inv.n; j++)
{
printf("%+.2f\t", inv.data[j]);
}
printf("\n");
}
system("pause");
}

Hvala!
 
Odgovor na temu

[es] :: Art of Programming :: Programski kod za inverz matrice.....

[ Pregleda: 4409 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.