29.11.2010 | 01:50
LaPommes je napisao:
Ja ne prepisujem, i nikad nisam prepisivala, samo ovakav slican zahtijevan zadatak te tezine je do nedavno bio za rijesit, a ne isti...
Nisam shvatio što ovo znači. Ali dobro, nema veze.
zurila sam i nisam obracala paznju na koju temu sam kliknula,,,, zar je vazno, da se ispraviti, normalno je gresiti...
Zar je bilo potrebe koristiti psovke i i prijatelje takvih prostih rijeci....
Molim te, ne dociraj. Griješiti je normalno (isprika je na mjestu), ispraviti se može. Ispraviti je morao netko drugi, tko inače nema baš vremena na lopate. Ti si žurila postaviti pitanje, a, gle, još nisi dobila odgovor... Možda bi prije dobila pomoć da si poštovala pravila društva u koje si sama odlučila doći po nju.
Žao mi što su te moje "psovke" toliko pogodile. Admin će ih pobrisati ako smatra potrebnim (iako ih ja, kao moderator, ne bi ni napisao da sam ih smatrao neprimjerenim). Osim što nisu u stvari niti napisane (zvjezdice), nisu niti maliciozne, niti na ikog usmjerene, niti (barem sam ja tako mislio) uvredljive.
Što se rješenja tiče, najprije moraš znati matematičku podlogu. Nekako imam dojam da je ne znaš (jer da je znaš, vidjela bi da je zadatak zapravo lagan). Siguran sam da imaš literaturu gdje to sve piše, ali u žurbi nisi to proučila. Pa, da te poštedim traženja, pogledaj ovamo:
na stranici 13, poglavlje 1.6 "Primjene determinante", pa "Metoda adjunkte" odmah ispod toga.
Kao što si i sama zaključila, cijeli zadatak svodi se na izračun adjungirane matrice. Jednom kad nju imaš, sve ostalo je kikiriki.
Ako je dozvoljena rekurzija, onda je problem, kako reče StajpZG "polutrivijalan".
Prije svega, jasno ti je da se cijela ova priča može raditi samo s kvadratnim matricama (ako nije, prouči gornju literaturu). Da pojednostaviš priču, uz samu matricu, kao argument funkcijama prosljeđuj i njene dimenzije (obje su iste, dakle proslijedi samo jednu).
Trebaš funkciju koja vraća adjungiranu matricu, nazovimo je adjung(a,m) - a je matrica, m je dimenzija, dakle matrica A(m x m) - i drugu koja računa determinantu matrice koju dobije, nazovimo je determ(a,m).
Funkcija determ(a,m) treba biti napisana rekurzivno. Ako je dimenzija m=2, izračunaš determinantu jednostavnim izrazom a[1,1]*a[2,2]-a[1,2]*a[2,1] i vratiš rezultat.
Ako je m>2, determinantu računaš razvojem po prvom retku. Inicijaliziraš sumu na 0 i otvoriš for petlju (neka bude i) od 1 do m. U svakom prolazu najprije odrediš matricu kofaktora (nazovimo je b).
to su ti još dvije for petlje, jedna u drugoj, vanjska za retke (neka bude j), od 2 do m, unutarnja za stupce (neka bude k) od 1 do m. Prije nego uđeš u njih, inicijaliziraš si dva indeksa za kreiranje matrice kofaktora, redak=1 i stupac=1. U petlji retka je samo petlja stupca i nakon nje redak=redak++. U petlji stupca provjeriš da li je tekući stupac jednak stupcu kofaktora (tj. da li je k=i). Ako jest, ne radiš ništa, samo ideš u idući krug petlje. Ako nije, odrediš b[redak,stupac]=a[j,k] i povećaš stupac=stupac++
Kad imaš određenu matricu kofaktora za trenutni član ulazne matrice, pribrajaš sumi trenutni pribrojnik
suma=suma+(-2*((1+i)%2)+1)*a[1,i]*determ(b,m-1)
to ti je, dakle, rekurzivni poziv
Kad završi "i" (najvanjskija for petlja) suma sadrži vrijednost determinante i vraćaš je natrag.
U funkciji adjung(a,m) trebaš za svaki član matrice odrediti kofaktor (determinantu matrice kofaktora) i to onda pomnožiti s jedinicom predznaka i tim članom matrice. Dakle, opet dvije for petlje, vanjska "L" broji retke od 1 do m, unutarnja "i" broji stupce od 1 do m.
Onda unutar unutanje petlje imaš opet dvije petlje za odrediti matricu kofaktora (neka se isto zove b), kao i gore, samo što j ne ide od 2 do m, nego od 1 do m i moraš imati provjeru da li je j=L isto kao i za stupce.
Kad si dobila matricu kofaktora za trenutni član, odrediš trenutni član adjungirane matrice
adja[L,i]=(-2*((L+i)%2)+1)*a[L,i]*determ(b,m-1)
i tako redom dok se ne izvrte petlje L i i do kraja. Na kraju imaš gotovu izračunatu adjungiranu matricu. Ostatak zadatka je kuruza, vjerujem da ti s njim ne treba pomoć.
Izračun matrice kofaktora može se također napisati kao funkcija. Ako se znaš izboriti s prosljeđivanjem pointera na matricu (argument by reference) funkciji i uzimanjem pointera na drugu matricu kao rezultata, nije ti nikakav problem napisati i tu funkciju, da ne moraš dva puta imati isti kôd.