--- title: Rozkład Fishera - Sprawozdanie author: Mateusz Reis 316276 tags: rpis --- # Rozkład Fishera - Sprawozdanie - Mateusz Reis 316276 ## 1. Wstęp Zadaniem było obliczyć wartość całki z funkcji gęstości rozkładu Fishera z zadanymi parametrami $m$ oraz $n$. Funkcja ta wyraża się wzorem : ![](https://i.imgur.com/lBtDMYP.png) Będziemy korzystać z **złożonego wzoru trapezów** oraz **metody Romberga** do obliczenia całki: ![](https://i.imgur.com/B0afN2S.png) Dla określonego $t>0$. ### 1.1 Złożony wzór trapezów Wzór ten pochodzi z pomysłu na obliczenie pola pod funckją dzięki przybliżeniu za pomocą trapezów. Mając funkcję $f(x)$ oraz przedziały całkowania $a$ oraz $b$. Używamy ich do wyznacznia wartości funkcji w tych punktach. Daje nam to łącznie 4 punkty z których tworzymy trapez tak jak na rysunku: ![](https://i.imgur.com/8DT1UUR.png) Wzór na całkę wyrazimy jako $$ \int_a^b f(x)=\frac{1}{2}(f(a)+f(b))*(b-a) $$ Jednak ten wzór jest dokładny tylko dla $f(x)\in \Pi_1$. Możemy uogólnić go dla funkcji wyższych rzędów dzieląc przedział całkowania na $n$ równych podprzedziałów. ![](https://i.imgur.com/lW9tWPn.png) Mamy $x_i=a+i*h$ gdzie $h=\frac{b-a}{n}$, wtedy wzór wyrazimy jako $$ \int_a^bf(x)=\frac{b-a}{n}\sum_{i=1}^{n-1} f(x_i) + \frac{f(a)+f(b)}{2} $$ ### 1.2 Metoda Romberga Metoda ta korzysta z wzoru trapezów jako pierwszej kolumny dwuwymiarowej tablicy Romberga, a kolejne wyliczane są rekurencyjnie korzystając z poprzednich za każdym razem poprawiając wynik. Kolejne komórki tabeli obliczymy w następujący sposób: ![](https://i.imgur.com/aK8Wr26.png) Przykład dla kolejno 2,4 oraz 8 elementów tablicy : ![](https://i.imgur.com/pg82x0U.png) Jak widać przybliżenie składające się z 8 elementów jest już nienajgorszą aproksymacją. ## 2. Implementacja Do wyliczenia metody Romberga użyje kodu, napisanego przeze mnie jako zadanie na ANL(kod zamieszczam razem z tym sprawozdaniem => plik romberg.cpp). Jest napisany w języku C++. Cała metoda jest opakowana w klasę, która operuje na liczbach typu ```double``` a jako argumenty konstruktora przyjmuje funkcję oraz granicę całkowania $a$ oraz $b$. Następnie przy użyciu metody ```getval(n)``` gdzie $n$ to precyzja (im większy $n$ tym większa precyzja) otrzymujemy wynik całkowania. Do wyliczenia całek metodą trapezów stworzyłem kod w C++. Analogiczny do tego opisanego wyżej. Obydwa programy można wywołać z linii poleceń terminala z argumentami $n,m,t,prec$ gdzie $n,m$ to liczby naturalne a $t$ to dodatnia liczba rzeczywista, będąca granicą całkowania.$prec$ oznacza jakiej precyzji chcemy użyć. ## 3.Wyniki Wykres funkcji $f(x)$ dla danych parametrów wygląda tak: ![](https://i.imgur.com/Edgwy9R.png) Poniżej wyniki całki dla takich samych parametrów, oraz $t\in\{1,2,3\}$. Jako punkt odniesienia przyjmiemy wyniki całek z wolphramalpha.com, nie będziemy rozważać $n=100,m=100$ ponieważ precyzja ```double``` na to nie pozwala... Zamiast tego sprawdziemy $n=10,m=10$ ### t=1 #### Wyniki z wolphramalpha: * $n=1,m=1$ wynik: 0.5 * $n=2,m=1$ wynik:0.57735026 * $n=5,m=2$ wynik: 0.56879884 * $n=10,m=1$ wynik: 0.65910686 * $n=10,m=10$ wynik: 0.5 #### Wyniki dla metody trapezów : * $n=1,m=1$ wolphramalpha: 0.5 |Precyzja|10|100|1000|10000|100000|1000000| |-|-|-|-|-|-|-| |Wynik|1591.9044|159.60852|16.400797|2.086901|0.65768496|0.51545061| |Różnica|1591.4044|159.10852|15,900797|1,586901|0,15768496|0,01545061| * $n=2,m=1$ wolphramalpha:0.57735026 |Precyzja|10|100|1000|10000|100000|1000000| |-|-|-|-|-|-|-| |Wynik|1768.1826|177.30247|18.238694|2.3399541|0.75249423|0.59451158| |Różnica|1767,60524974|176,72511974|17,66134374|1,76260384|0,17514397|0,01716132| * $n=5,m=2$ wolphramalpha: 0.56879884 |Precyzja|10|100|1000|10000|100000|1000000| |-|-|-|-|-|-|-| |Wynik|0.56970817|0.56880795|0.56879894|0.56879885|0.56879885|0.56879885| |Różnica|0,00090933|0,00000911|0,0000001|0,00000001|0,00000001|0,00000001| * $n=10,m=1$ wolphramalpha: 0.65910686 |Precyzja|10|100|1000|10000|100000|1000000| |-|-|-|-|-|-|-| |Wynik|1946.0225|195.15652|20.096558|2.5989665|0.85186412|0.677994| |Różnica|1945,36339314|194,49741314|19,43745114|1,93985964|0,19275726|0,01888714| * $n=10,m=10$ wolphramalpha: 0.5 |Precyzja|10|100|1000|10000|100000|1000000| |-|-|-|-|-|-|-| |Wynik|0.49950659|0.49999487|0.49999995|0.5|0.5|0.5| |Różnica|−0,00049341|−0,00000513|−0,00000005|0|0|0| #### Wyniki dla metody Romberga: * $n=1,m=1$ wolphramalpha: 0.5 |Precyzja|2|4|8|16|20|26| |-|-|-|-|-|-|-| |Wynik|2476.0517|607.12658|38.346837|0.64642411|0.5088686|0.50009694| |Różnica|2475,5517|606,62658|37,846837|0,14642411|0,0088686|0,00009694| * $n=2,m=1$ wolphramalpha:0.57735026 |Precyzja|2|4|8|16|20|26| |-|-|-|-|-|-|-| |Wynik|2750.2231|674.36997|42.614615|0.73998657|0.5872008|0.57745794| |Różnica|2749,7231|673,86997|42,114615|0,23998657|0,00985054|0,00010768| * $n=5,m=2$ wolphramalpha: 0.56879884 |Precyzja|2|4|8|16|20|26| |-|-|-|-|-|-|-| |Wynik|0.56881369|0.56879885|0.56879885|0.56879885|0.56879885|0.56879885| |Różnica|0,00001485|0,00000001|0,00000001|0,00000001|0,00000001|0,00000001| * $n=10,m=1$ wolphramalpha: 0.65910686 |Precyzja|2|4|8|16|20|26| |-|-|-|-|-|-|-| |Wynik|3026.8214|742.2114|46.923836|0.83809864|0.66994802|0.65922537| |Różnica|3026,16229314|741,55229314|46,26472914|0,17899178|0,01084116|0,00011851| * $n=10,m=10$ wolphramalpha: 0.5 |Precyzja|2|4|8|16|20|26| |-|-|-|-|-|-|-| |Wynik|0.495942|0.50002483|0.5|0.5|0.5|0.5| |Różnica|−0,004058|0,00002483|0|0|0|0| ### t=2 #### Wyniki z wolphramalpha: * $n=1,m=1$ wynik: 0.60817344 * $n=2,m=1$ wynik: 0.70710678 * $n=5,m=2$ wynik: 0.76995185 * $n=10,m=1$ wynik: 0.81233012 * $n=10,m=10$ wynik: 0.85515419 #### Wyniki dla metody trapezów : * $n=1,m=1$ wolphramalpha: 0.60817344 |Precyzja|10|100|1000|10000|100000|1000000| |-|-|-|-|-|-|-| |Wynik|3183.5048|318.85251|32.418379|3.7846986|0.92440448|0.63934702| |Różnica|3182,89662656|318,24433656|31,81020556|3,17652516|0,31623104|0,03117358| * $n=2,m=1$ wolphramalpha: 0.70710678 |Precyzja|10|100|1000|10000|100000|1000000| |-|-|-|-|-|-|-| |Wynik|3536.0148|354.18763|36.039361|4.2353391|1.0583511|0.74173191| |Różnica|3535,30769322|353,48052322|35.332254|3.5282323|0.35124436|0.03462513| * $n=5,m=2$ wolphramalpha: 0.76995185 |Precyzja|10|100|1000|10000|100000|1000000| |-|-|-|-|-|-|-| |Wynik|0.77427522|0.76999521|0.76995229|0.76995186|0.76995185|0.76995185| |Różnica|0.0043233654|0.00004336|0.00000044|0.00000001|0|0| * $n=10,m=1$ wolphramalpha: 0.81233012 |Precyzja|10|100|1000|10000|100000|1000000| |-|-|-|-|-|-|-| |Wynik|3891.6458|389.84048|39.69776|4.695378|1.1988973|0.85043732| |Różnica|3890.83342522|389.02814655|38.88543006|3.88304790|0.38656716|0.03810720| * $n=10,m=10$ wolphramalpha: 0.85515419 |Precyzja|10|100|1000|10000|100000|1000000| |-|-|-|-|-|-|-| |Wynik|0.85511916|0.85514661|0.85515412|0.85515419|0.85515419|0.85515419| |Różnica|-0.00003503|-0.00000758|-0.00000007|0|0|0| #### Wyniki dla metody Romberga: * $n=1,m=1$ wolphramalpha: 0.60817344 |Precyzja|2|4|8|16|20|26| |-|-|-|-|-|-|-| |Wynik|4951.8286|1213.9182|76.315991|0.90190541|0.62613163|0.60839544| |Różnica|4951.2204|1213.31|75.707817|0.29373197|0.017958195|0.0002219971| * $n=2,m=1$ wolphramalpha: 0.70710678 |Precyzja|2|4|8|16|20|26| |-|-|-|-|-|-|-| |Wynik|5500.1276|1348.3555|84.797345|1.033361|0.72705331|0.70735335| |Różnica|5499.4205|1347.6483|84.090238|0.32625418|0.019946532|0.00024656911| * $n=5,m=2$ wolphramalpha: 0.76995185 |Precyzja|2|4|8|16|20|26| |-|-|-|-|-|-|-| |Wynik|0.7704885|0.76995189|0.76995185|0.76995185|0.76995185|0.76995185| |Różnica|0.00053665|0.00000004|0|0|0|0| * $n=10,m=1$ wolphramalpha: 0.81233012 |Precyzja|2|4|8|16|20|26| |-|-|-|-|-|-|-| |Wynik|6053.2782|1483.9863|93.359075|1.171394|0.83428258|0.81260149| |Różnica|6052.46584146|1483.17396322|92.54674494|0.35906384|0.02195246|0.00027137| * $n=10,m=10$ wolphramalpha: 0.85515419 |Precyzja|2|4|8|16|20|26| |-|-|-|-|-|-|-| |Wynik|0.91399659|0.85467237|0.85515419|0.85515419|0.85515419|0.85515419| |Różnica|0.05884240|-0.00048182|0|0|0|0| ### t=3 #### Wyniki z wolphramalpha: * $n=1,m=1$ wynik: 0.66666666 * $n=2,m=1$ wynik: 0.70710678 * $n=5,m=2$ wynik: 0.86070250 * $n=10,m=1$ wynik: 0.88606258 * $n=10,m=10$ wynik: 0.95107269 #### Wyniki dla metody trapezów: * $n=1,m=1$ wolphramalpha: 0.66666666 |Precyzja|10|100|1000|10000|100000|1000000| |-|-|-|-|-|-|-| |Wynik|4775.0706|478.05132|48.3877|5.4332639|1.1415854|0.71360799| |Różnica|4774.40398286|477.38465678|47.72103316|4.76659728|0.47491878|0.04694133| * $n=2,m=1$ wolphramalpha: 0.70710678 |Precyzja|10|100|1000|10000|100000|1000000| |-|-|-|-|-|-|-| |Wynik|5303.8013|531.01554|53.779335|6.068955|1.3020988|0.82673537| |Różnica|5303.09420985|530.30843160|53.07222787|5.36184822|0.59499201|0.11962859| * $n=5,m=2$ wolphramalpha: 0.86070250 |Precyzja|10|100|1000|10000|100000|1000000| |-|-|-|-|-|-|-| |Wynik|0.87083933|0.86080448|0.86070353|0.86070252|0.86070251|0.86070251| |Różnica|0.01013683|0.00010198|0.00000103|0.00000002|0.00000001|0.00000001| * $n=10,m=1$ wolphramalpha: 0.88606258 |Precyzja|10|100|1000|10000|100000|1000000| |-|-|-|-|-|-|-| |Wynik|5837.2076|584.45045|59.221204|6.7128464|1.4666128|0.9434446| |Różnica|5836.32150963|583.56438306|58.33514131|5.82678386|0.58055022|0.05738202| * $n=10,m=10$ wolphramalpha: 0.95107269 |Precyzja|10|100|1000|10000|100000|1000000| |-|-|-|-|-|-|-| |Wynik|0.95435646|0.95106845|0.95107265|0.95107269|0.95107269|0.95107269| |Różnica|0.00328377|-0.00000424|-0.00000004|0|0|0| #### Wyniki dla metody Romberga: * $n=1,m=1$ wolphramalpha: 0.66666666 |Precyzja|2|4|8|16|20|26| |-|-|-|-|-|-|-| |Wynik|7427.5767|1820.6697|114.23779|1.1078519|0.69375078|0.66701819| |Różnica|7426.90999344|1820.00301913|113.57112726|0.44118520|0.02708412|0.00035153| * $n=2,m=1$ wolphramalpha: 0.70710678 |Precyzja|2|4|8|16|20|26| |-|-|-|-|-|-|-| |Wynik|8249.9923|2022.2892|126.92039|1.2646302|0.80467956|0.77498711| |Różnica|8249.28518019|2021.58205615|126.21328806|0.55752343|0.09757278|0.06788033| * $n=5,m=2$ wolphramalpha: 0.86070250 |Precyzja|2|4|8|16|20|26| |-|-|-|-|-|-|-| |Wynik|0.86395358|0.86070334|0.86070251|0.86070251|0.86070251|0.86070251| |Różnica|0.00325108|0.00000084|0.00000001|0.00000001|0.00000001|0.00000001| * $n=10,m=1$ wolphramalpha: 0.88606258 |Precyzja|2|4|8|16|20|26| |-|-|-|-|-|-|-| |Wynik|9079.6795|2225.6932|139.71767|1.4253762|0.91917075|0.88649229| |Różnica|9078.79346494|2224.80713671|138.83160672|0.53931363|0.03310817|0.00042971| * $n=10,m=10$ wolphramalpha: 0.95107269 |Precyzja|2|4|8|16|20|26| |-|-|-|-|-|-|-| |Wynik|1.0654108|0.94767525|0.95107269|0.95107269|0.95107269|0.95107269| |Różnica|0.11433810|-0.00339744|0|0|0|0| ## 4. Wnioski Jak możemy zauważyć w większości przypadków metoda trapezów dla tak skomplikowanej funckji podaje niezbyt dokładne wyniki, natomiast metoda Romberga radzi sobie zdecydowanie lepiej. Warto zwrócić również uwagę na to na jak wiele malutkich odcinków metoda trapezów musi podzielić przedział całkowania a by otrzymać względnie dokładny wynik. Dla człowieka podzielenie odcinka na 1000000 przedziałów i całkowanie w każdym końcu wydaje się awykonalne. Zdecydowanie łatwiejszym sposobem jest użycie metody Romberga, która już dla tablicy 20x20 daje nienajgorsze przybliżenie.