Programowanie w języku Delphi » Artykuły

Rozwiązywanie układu równań nieliniowych metodą itera

IDEA:
Dla uproszczenia rozważę układ dwóch równań. Niech będzie dany układ :
  F1(x,y)=0 i F2(x,y)=0                                    (1)
Niech x0 i y0 są przybliżonymi pierwiastkami układu równań (1).
Przekształcając ten układ do postaci:
x=fi1(x,y)    i  y=fi2(x,y) można zbudować ciągi iteracyjne:

x_1=fi1(x_0,y_0)    i  y_1=fi2(x_0,y_0)
x_2=fi1(x_1,y_1)    i  y_2=fi2(x_1,y_1)
x_3=fi1(x_2,y_2)    i  y_3=fi2(x_2,y_2)
.                  .
.                  .  
.                  .
x_n=fi1(x_(n-1),y_(n-1))    i  y_4=fi2(x_(n-1),y_(n-1))
Uwaga!! Dla uproszczenia stosuje dwa oznaczenia indeksów dolnych (x1=x_1).

To już właściwie koniec, jeżeli proces iteracyjny jest zbieżny to przy dostatecznie dużym n różnice
|x_n-x_(n-1)|<eps oraz="oraz" |y_n-y_(n-1)|<eps="|y_n-y_(n-1)|&lt;eps" gdzie="gdzie" eps="eps" jest="jest" założoną="założoną" dokładnością="dokładnością" wyznaczania="wyznaczania" pierwiastków.="pierwiastków." zachodzi,="zachodzi," że:="że:" bliskie="bliskie" zeru="zeru" i="i" chodzi="chodzi" o="o" wyrażenie="wyrażenie" f(x)="f(x)" przez="przez" x="..." zastosowanie="zastosowanie" sie="sie" do="do" powyższego="powyższego" algorytmu="algorytmu" :)=":)" program="program" mojego="mojego" autorstwa:="autorstwa:" to="to" crt="crt" przystosowany="przystosowany" szybkich="szybkich" procesorów.="procesorów." interakcja;="interakcja;" uses="uses" crt2;="crt2;" const="const" n="1300;" var="var" x,y,x0,y0,dx,dy:double;="x,y,x0,y0,dx,dy:double;" i:integer;="i:integer;" eps,epsp:double;="eps,epsp:double;" begin="begin" clrscr;="clrscr;" x0,="x0," y0,="y0," eps:="eps:" ');="');" read(x,y,eps);="read(x,y,eps);" i:="i+1;" x0:="x;" y0:="y;" repeat="repeat" x:="sqrt((x0*y0+5*x0-1)/2);" y:="sqrt(x0+3*ln(x0));" dx:="abs(x-x0);" dy:="abs(y-y0);" until="until" (i="(i" wtedy="Wtedy" f1(x_n,y_x)="F1(x_n,y_x)" f2(x_n,y_n)="F2(x_n,y_n)" czyli="Czyli" przykładowy="Przykładowy" uwaga!="Uwaga!" crt2="Crt2" write('podaj="write('Podaj">=1000)or((dx<=eps)and(dy<eps)); if="if" i="i">=1000 then begin Write('Uklad nie ma rozwiazan');end;
writeln('x= ',x0:0:5,' ');
writeln('y= ',y0:0:5,' ');
writeln('F1(x)=',2*x0*x0-x0*y0-5*x0+1:0:3,);
writeln('F2(x)=',x0+3*ln(x0)-y0*y0:0:3,
);
readkey;
end.

Oczywiście można tą metodę stosować to układów o wyszżym stopniu:)

6 komentarzy

a_s_f 2004-04-15 17:58

Co ty Snowak piszesz.Od tego jest forum a nie komentarze:)

Pawlik67 2004-02-25 16:11

czarownik>> nie ma pkt 4,  bo w Delphi po 3ce jest 5ka ;-)

czarownik 2004-02-23 11:45

Adam, po 3 jest chyba 4.. a nie 5. no chyba ze sie myle? ;-)

ŁF 2004-02-23 02:20

to na pewno powinno wylądować w dziale Delphi? kod jest przecież z TP.

Adam Boduch 2004-02-22 20:04

1) Formatowanie kodu
2) Znaczniki < delphi >
3) Jezeli to ma byc artykul to powinien to byc artykul, a nie fragment kodu... bardziej rozwiniete!
5) Czytac plik pomocy (pozycja "Pomoc" u dolu strony)

Ogolnie: cienko :-/