Menu
Archwium
Kategorie
Miniblog
Szukaj

[4]

15 Mar 2008, 22:06:45, Infa, Projekty | Trackback

Metody nieliniowe
Zastosować metodę Newtona do obliczania 1/x bez dzielenia. Zastosować do obliczenia 1/a dla a=2.1 z x_0=0.5 i 1001 z x_0=1e-3 - zbadać eksperymentalnie, czy mamy zbieżność kwadratową, tzn. liczyć e_{n+1}/(e_n*e_n) dla kolejnych n (e_n=|x_n-1/a|).
W raporcie: błędy |e_n| i |e_{n+1}/(e_n*e_n)| dla kolejnych n - za warunek stopu |1-x_n*a| < 1e-10*|x0| lub |x_{n+1}-x_n| < 1e-10 lub ilość iteracji przekroczy 30 (obliczenia w arytmetyce podwójnej precyzji).

program zad4;
var	e,x:array[0..50] of double;
	n:integer;
	a:double;

procedure e_n;
begin
	e[n]:=(x[n] - 1/a);
end;

begin
	writeln('dla a=2.1 i x_0=0.5');
	a:=2.1;
	x[0]:=0.5;
	n:=0;
	
	repeat
		e_n;
		write(n,'. ',abs(e[n]),' |');
		x[n+1]:=2*x[n] - a*x[n]*x[n];
		n:=n+1;
		e_n;
		writeln(abs(e[n]/(e[n-1]*e[n-1])));
	until (n > 31) or (abs(1 - x[n-1]*a) < 0.0000000001*abs(x[0])) or (abs(x[n]-x[n-1]) < 0.0000000001);

	writeln;
	writeln('dla a=1001 i x_0=1e-3');
	a:=1001;
	x[0]:=0.001;
	n:=0;
	
	repeat
		x[n+1]:=2*x[n] - a*x[n]*x[n];
		e_n;
		write(n,'. ',abs(e[n]),' |');
		n:=n+1;
		e_n;
		writeln(abs(e[n]/(e[n-1]*e[n-1])));
	until (n > 31) or (abs(1 - x[n-1]*a) < 0.0000000001*abs(x[0])) or (abs(x[n]-x[n-1]) < 0.0000000001);
end.

Wynik z konsoli:

maniek@maniek:~$ ./zad4
dla a=2.1 i x_0=0.5
0.  2.3809523809523829E-0002 | 2.1000000000000002E+0000
1.  1.1904761904761925E-0003 | 2.0999999999958052E+0000
2.  2.9761904761845415E-0006 | 2.0999990931275731E+0000
3.  1.8601182443303554E-0011 | 1.8174277792319519E+0004

dla a=1001 i x_0=1e-3
0.  9.9900099900101984E-0007 | 1.0009999998947988E+0003
1.  9.9900099889604959E-0010 | 1.0009836974136574E+0003
2.  9.9898472876109104E-0016 | 8.4875550648696237E+0008

Komentarze:

  1. karski

    16 Mar 2008, 01:12:19 | Permalink

    Ciekawy dział, tylko czy byłaby możliwość zapisu w nieco czytelniejszy sposób? może wzorki przez latex’a przepuścić i skonwertować do html’a. Oczywiście da się to odczytać, ale zawsze to ładniej :) I jeszcze fajnie byłoby zobaczyć output z tego programu, bo nie każdy ma kompilator do Turbo Pascala(???), co prawda może sobie do innego języka np:C zawsze przepisać ale … :) output by się przydał.

  2. 16 Mar 2008, 12:25:52 | Permalink

    karski: właśnie miałem zamiar wrzucać „wynik” moich programów, a co do Latex’a to szczerze mówiąc, nie bardzo chce mi się bawić dla kilku wzorków, ale może z czasem o tym pomyśle ;)

  3. 18 Mar 2008, 19:49:12 | Permalink

    Ok, dodałem output programów.

Dodaj komentarz:

HTML w komentarzach jest wyłączony, możesz jednak skorzystać z Textile Lite.

<< Powrót do reszty wpisów