Stirlingin likiarvojen tarkkuus

Vastaa Viestiin
H
Harrastelija
Viestit: 25

Stirlingin likiarvojen tarkkuus

Viesti Kirjoittaja Harrastelija »

Kertymäfunktiolle f(n)=n! voidaan muodostaa likiarvo lausekkeella \(\sqrt{2*Pi*n}*(n/e)^{n}\) vaan tutkitaanpa kuinka tarkka se on kun n kasvaa :)

1! virhe pros=7.78629909
2! virhe pros=4.04978242
4! virhe pros=2.05760361
8! virhe pros=1.03572555
16! virhe pros=0.51941195
32! virhe pros=0.26006942
64! virhe pros=0.13012254
128! virhe pros=0.06508284
256! virhe pros=0.03254676
512! virhe pros=0.01627471
1024! virhe pros=0.00813768
2048! virhe pros=0.00406892
4096! virhe pros=0.00203448
8192! virhe pros=0.00101724
16384! virhe pros=0.00050862

Näyttää siis siltä, että prosentuaalinen virhe pienenee kun n kasvaa, mutta koska kertymäfunktio kasvaa niin tuhottoman nopeasti, absoluuttinen virhe on merkittävän suuri isoilla arvoilla.

Koodi: Valitse kaikki

program KertymaTutkimuksia;
uses bigdecimalmath, sysutils;
var n: LongInt;
	k,Stirling,e,Pii,virhe: BigDecimal;
	str: array [1..10] of char;
function kertoma(luku: LongInt):Bigdecimal; 
var i: LongInt;
	tulos: BigDecimal;
begin 
	tulos:=1;
	i:=2;
	while i<=luku do 
	begin
		tulos:=tulos*i;
		i:=i+1;
	end;
	kertoma:=tulos;
end;
begin
	e:=2.71828182845904523536;
	Pii:=3.14159265358979323846;
	n:=1;
	while (n<=20000) do
		begin
			k:=kertoma(n);
			Stirling:=sqrt(2*Pii*n)*Power((n/e),n);
			virhe:=100*(k-Stirling)/k;
			str:=BigDecimalToStr(virhe);
			writeln(n:3,'!    virhe pros=', str);
			n:=n*2;		    
		end;
end.
D
Disputator
Viestit: 152

Re: Stirlingin likiarvojen tarkkuus

Viesti Kirjoittaja Disputator »

Jäipä tämä kommentoimatta aikanaan, no vielä kerkeää:
Harrastelija kirjoitti: 10 Tammi 2024, 08:55
Kertymäfunktiolle f(n)=n! voidaan muodostaa likiarvo lausekkeella \(\sqrt{2*Pi*n}*(n/e)^{n}\) vaan tutkitaanpa kuinka tarkka se on kun n kasvaa :)

1! virhe pros=7.78629909
2! virhe pros=4.04978242
...
16384! virhe pros=0.00050862

Näyttää siis siltä, että prosentuaalinen virhe pienenee kun n kasvaa, mutta koska kertymäfunktio kasvaa niin tuhottoman nopeasti, absoluuttinen virhe on merkittävän suuri isoilla arvoilla.
...
Ihan hyvä huomio tosiaankin. Absoluuttinen virhe kasvaa (ilmeisesti) rajatta, mutta suhteellinen virhe menee nollaan.

edit: se on kertoma(funktio), kertymäfunktio on taasen todennäköisyyslaskennan termi. Yleensä kai puhutaan pelkästäään kertomasta eikä kertomafuntiosta.

Ilmiö esiintyy jo simppelissäkin tapauksessa, esimerkiksi:

\(f(n)=n^2+n\)

Tällöin hyvä asymptoottinen approksimaatio funktiolle f(n) on n2, kun n on suuri ja merkitään:

\(f(n)\sim n^2\)

Funktio f voidaan esittää muodossa:

\(f(n) = n^2(1+\frac{1}{n})\).

Tuosta muodosta voisi hätäisesti päätellä, että kun n kasvaa rajatta lähestyy f(n) lauseketta n2, koska 1+1/n menee kohti arvoa 1, kun n kasvaa. Päättely on kuitenkin väärä, mitään lähestymistä ei tapahdu, sillä funktion f ja lausekkeen n2 erotuksen itseisarvo on:

\(|f(n)-n^2| = n\),

mikä selvästi kasvaa rajatta. Kuitenkin suhteelle saadaan:

\(\frac{f(n)}{n^2} = 1+\frac{1}{n}\to 1\), kun \(n\to\infty\).

Miten sitten osoittaa se, että Stirlingin aprroksimaatiossa absoluuttinen virhe kasvaa rajatta?
SI Resurrection!
D
Disputator
Viestit: 152

Re: Stirlingin likiarvojen tarkkuus

Viesti Kirjoittaja Disputator »

Toisaalta kyllä ihmettelen, miten aloittaja on laskenut tietokoneella kertomat suurilla n:n arvoilla, esimerkiksi loppulistauksen:
8192! virhe pros=0.00101724
16384! virhe pros=0.00050862
Tuollaiset kertomat tai niiden likiarvot ovat ihan järkyttävän suuria lukuja.
SI Resurrection!
Vastaa Viestiin