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

Rješavanje jednačina sa više nepoznatih, V2

[es] :: Art of Programming :: Rješavanje jednačina sa više nepoznatih, V2

[ Pregleda: 7560 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

peromalosutra
Ivan Rajkovic
Software engineer
Luxoft
Berlin

Član broj: 54774
Poruke: 849
*.dialup.blic.net.



+144 Profil

icon Rješavanje jednačina sa više nepoznatih, V227.11.2005. u 21:12 - pre 190 meseci
Napravio sam program koji rjesava sistem od 3 jednacine sa 3 nepoznate i htio bih da ga proširim tako da može da radi sa praktično neograničenim brojem jednačina (npr. 1000 jednačina sa 1000 nepoznatih) i sve sam u programu tome podredio, ali ne znam kako da uradim funkciju RAZVIJ_DET (koja računa determinantu matrice), tako da može da radi sa matricama n*n, (n<maxint). Kod mene ova funkcija radi samo sa matricama 3*3 i to mi je jedina prepreka da u potpunosti završim program.



Code:

program SISTEM_JEDNACINA;
Uses WinCrt;
const jednacina=3;
type MATRICA= array[0..jednacina,0..jednacina+1] of Real;
var d:array[0..jednacina] of real;
    a,det:MATRICA;
    X:array[1..jednacina] of real;
    var i:integer;
    


procedure UNOS;
var i,j:integer;
begin
writeln (' UNESI JEDNACINU OBLIKA ax+by+cz=d ');
for i:=1 to jednacina do
    begin
    writeln;
    writeln (i,') ');
    for j:=1 to jednacina+1 do
        begin
        write ('a[',i,',',j,']=');
        readln(a[i,j]);
        end;
    end;
end;

procedure DETERMINANTA (a:matrica; n:integer; var det:matrica);
{pravi matricu za odredjivanje determinante, gdje je n=0 matrica sistema,
 n=1 matrica za 1. nepoznatu, n=2 za drugu, itd. }
var i,j:integer;
begin
writeln (n,')-------------------------');
for i:=1 to jednacina do
    begin
    writeln;
    for j:=1 to jednacina do
        begin
        if j=n
           then det[i,j]:=a[i,jednacina+1]
           else det[i,j]:=a[i,j];
        write (det[i,j]:3:2,'  ');
        end;
    end;
    writeln;
writeln;
end;

function RAZVIJ_DET (det:matrica):real;
{funkcija koja odredjuje determinantu matrice}
begin
RAZVIJ_DET:=det[1,1]*det[2,2]*det[3,3]+det[2,1]*det[3,2]*det[1,3]+det[3,1]*det[1,2]*det[2,3]
           -det[3,1]*det[2,2]*det[1,3]-det[2,1]*det[3,3]*det[1,2]-det[1,1]*det[3,2]*det[2,3];
end;

begin
UNOS;
writeln;
for i:=0 to jednacina do
    begin
    DETERMINANTA (a,i,det);
    d[i]:=RAZVIJ_DET(det);
    writeln ('d[',i,']=',d[i]:3:2);
    end;
if d[0]=0
   then
   begin
   write ('> Greska, D=0');
   exit;
   end;
writeln;
for i:=1 to jednacina do
    begin
    x[i]:=d[i]/d[0];
    writeln ('x[',i,']=',x[i]:3:2);
    end;

end.


ps: Ovo je pitanje možda više za matematički podforum, ali sam ga zbog programerske prirode postavio ovdje.

HVALA!
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.cmu.carnet.hr.

Sajt: www.dump.hr


Profil

icon Re: Rješavanje jednačina sa više nepoznatih, V227.11.2005. u 21:23 - pre 190 meseci
Objani kako se racuna determinanta, pa cu ti ja pomoci.
... Ili jednostavno pricekaj nekoga tko zna.
 
Odgovor na temu

peromalosutra
Ivan Rajkovic
Software engineer
Luxoft
Berlin

Član broj: 54774
Poruke: 849
*.dialup.blic.net.



+144 Profil

icon Re: Rješavanje jednačina sa više nepoznatih, V228.11.2005. u 15:03 - pre 190 meseci
Pa ima više načina za računanje determinante matrice; Ja sam koristio Sarusovo pravilo koje važi za matrice 3*3. Baš smo u školi učili način kako se matrice n-tog reda mogu pretvoriti u matrice (n-1)-og reda i na osnovu toga ću riješititi problem, samo sada moram da smislim kako da to implementiram u program.
Sad ću pokušati da napravim proceduru koja će matricu n-tog reda svoditi na matricu 3. reda, ako uspijem - problem je riješen.
 
Odgovor na temu

Srđan Krstić
Srđan Krstić
Princeton, NJ

Član broj: 7526
Poruke: 416
*.Princeton.EDU.

Jabber: srkiboy@elitesecurity.org
ICQ: 193836365
Sajt: www.princeton.edu/~skrsti..


Profil

icon Re: Rješavanje jednačina sa više nepoznatih, V228.11.2005. u 17:01 - pre 190 meseci
Za resavanje sistema n jednacina sa n nepoznatih koristi se Gausov algoritam. Nisam kuci trenutno, kad odem naci cu disk sa raznoraznim algoritmima pa cu da posaljem kod. Ideja je da se uz pomoc svake jednacine eliminise po jedna promeljiva iz svih ostalih (sto je upravo kao da razvijas determinantu). Npr:



Sada prvu jednacinu pomnozis sa i dodas drugoj, cime eliminises iz druge jednacine, i tako dalje do n-te. Onda predjes na drugu i eliminises nadalje, itd itd. Na kraju ces dobiti jednu jednacinu tipa , odakle trivijalno dobijas , pa vratis to u pretposlednju da dobijes , itd. Inace, ustvari si eliminisanjem dobio matricu u kojoj su ispod glavne dijagonale sve nule, pa ce determinanta biti samo proizvod elemenata na dijagonali.

Elem, to je tako u teoriji, ako mozes da iskucas sam super, ako ne kad nadjem kod i malo kasvetnije objasnjenje okacicu. Inace slozenost algoritma je .

[Ovu poruku je menjao Srđan Krstić dana 28.11.2005. u 18:07 GMT+1]
I HAD A NIGHTMARE
IT ALL STARTED NORMAL
10101010
10110011
THEN ALL OF A SUDDEN
1100102
GAAAAH
_____________________________
www.princeton.edu/~skrstic
www.niwifi.co.sr
 
Odgovor na temu

Mihailo Kolundzija
Novi Sad

Član broj: 11323
Poruke: 100
*.epfl.ch.



+1 Profil

icon Re: Rješavanje jednačina sa više nepoznatih, V201.12.2005. u 19:41 - pre 190 meseci
Pogledaj odgovarajuće poglavlje knjige "Numerical Recipes in C".

http://www.library.cornell.edu/nr/cbookcpdf.html
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1339
*.ubisoft.com.cn.

ICQ: 14293955
Sajt: https://github.com/milost..


+46 Profil

icon Re: Rješavanje jednačina sa više nepoznatih, V214.12.2005. u 09:59 - pre 190 meseci
Malo teorije uvek pomogne:

http://mathworld.wolfram.com/Determinant.html
 
Odgovor na temu

[es] :: Art of Programming :: Rješavanje jednačina sa više nepoznatih, V2

[ Pregleda: 7560 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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