sprawozdanie lab5


Politechnika Świętokrzyska
Laboratorium Metod obliczeniowych
Temat:
Grupa 312A:
Wykonanie zadania P4
Aukasz Gos
Kamil Kasprzyk
1. Cel
Celem zadania było napisania programu rozwiązującego zadanie P4.
2. Część teoretyczna
Różniczkowanie numeryczne
Wzory różniczkowania numerycznego znajdują zastosowanie wtedy, gdy trzeba
wyznaczyć pochodne odpowiedniego rzedu funkcji f(x), która określona jest tablicą lub
ma skomplikowaną postać analityczną. Podstawowy sposób konstruowania wzorów
różniczkowania numerycznego polega na różniczkowaniu wzorów interpolacyjnych.
Zastępujemy więc daną funkcję f(x) wielomianem interpolacyjnym Wn(x) w interesujacym
nas przedziale [a,b], a następnie przyjmujemy
( k ) ( k )
f ( x ) = W ( x ) dla a Ł x Ł b
n
gdzie k jest rzędem pochodnej. Jeżeli błąd interpolacji jest określony wzorem
R = f ( x ) - W ( x )
n n
to błąd pochodnej wynosi
( k ) ( k )
rn( k ) ( x ) = f ( x ) - W ( x )
n
Należy podkreślić, że różniczkowanie numeryczne jest na ogół operacją mniej dokładną
niż interpolacja. W szczególności bowiem błąd różniczkowania w węzłach interpolacji
może być różny od zera, chociaż błąd interpolacji jest równy zero.
Z każdego wielomianu interpolacyjnego można wyprowadzić wzór różniczkowania
numerycznego. Ogólnie mówiąc wzory te klasyfikuje się według wykorzystywanych różnic:
zwykłych, wstecznych i centralnych.
Wzór Taylora:
Wyprowadzanie wzorów i szacowanie dokładności z użyciem szeregu Taylora
Na podstawie rozwinięcia Taylora funkcji:
f(x + h)=f(x) + f'(x)h + f''(x)h +&

możemy szacować dokładność przybliżeń numerycznych w funkcji rzędu pochodnej i
kroku h.
Przykład:
rozwinięcie Taylora ograniczone do pierwszego nie skracającego się czynnika:
( ) ( ) ( ) 1 ( ) 2 1 ( ) 3
2! 3!
f( x + h) = f(x ) + f'(x) h + f '' (x) h + f '''(x) h

f( x  h)= f(x ) - f'(x) h + f '' (x) h - f '''(x) h


skąd: f( x + h) - f( x  h)=2f'(x)h + ( ) ( ) h
!
Oszacowanie pochodnej ilorazem różnicowym centralnym:
( )
f'(x)= ( ) ( ) - h

Wnioski: wzór jest dokładny dla wielomianów do 2 stopnia, błąd jest proporcjonalny do
h .
Wrażliwość przybliżeń różnicowych na błędy reprezentacji i zakłócenia w danych
Stwierdzenie, że błąd jest zależny z określoną potęgą od kroku h sugeruje, że zmniejszanie
kroku
wyrażenia różnicowego może tylko poprawić jakość wyniku (dokładność pochodnej). W
tej
analizie nie uwzględniono jednak błędu reprezentacji maszynowej wartości funkcji.
Dodatkowo
silny wpływ na błędy wyznaczanej pochodnej mogą mieć zakłócenia pomiaru wartości
funkcji (np.
szumy addytywne w próbkowaniu sygnału).
Wnioski:
wyższy rząd większy krok mniejsze wzmocnienie błędu reprezentacji
znaczne zakłócenia w danych lepiej korzystać z wielomianu aproksymującego
Wzór Stirlinga:
Wzór Stirlinga różniczkowania numerycznego jest najdokładniejszy ponieważ
wykorzystuje informację
o przebiegu funkcji po obu stronach punktu, w którym obliczamy pochodną.
Obliczanie pochodnej na końcach przedziału zmienności argumentu funkcji zmusza do
wykorzystania dwóch pierwszych wzorów.
Trzeba zwrócić uwagę, że błędy zaokrągleń nieistotne
w procesie interpolacji mogą mieć decydujący wpływ ma błąd różniczkowania
numerycznego.
Ponadto ze wzoru na błąd różniczkowania z zastosowaniem różnic centralnych widać, że
błąd rośnie gdy h maleje.
3. Kod programu
package matematyka.zadania;
public class P4 {
//obliczanie jednej kolumny w tablicaRoznicWstecznych
public static void oblicz(double[][] tab, int index){
for(int i=0; i if(tab[index-1][i+1] != 0.0)
tab[index][i]= (tab[index-1][i+1] - tab[index-
1][i]);
}
}
/**
* Funkcja zwraca tylko te wyniki z tablic różnic
wstecznych
* które są wykorzystywane w dalszych obliczeniach
* @param double[][] - tab tablica punktów
* @return double[] tablica wyników
*/
public static double[] obliczRozniceWsteczne(double[][]
tab){
double[] tmpTab = new double[tab.length-1];
double[][] tablicaRoznicWstecznych = new
double[tab.length][tab.length];
//zapisanie do tablicy wartości f(x)
for(int i=0; i tablicaRoznicWstecznych[0][i] = tab[i][1];
//wypełnienie tablicaRoznicWstecznych wynikami
for(int i=0; i<(tab.length); i++){
oblicz(tablicaRoznicWstecznych, i+1);
}
//wyświetlenie zawartości tablicy oraz przygotowanie
tablicy zwrotnej
for(int i=0; i for(int j=0; j<(tab.length); j++){
System.out.print(tablicaRoznicWstecznych[i][j]+",
");
}
System.out.println(" ");
if(i>0)
tmpTab[i-1] =
tablicaRoznicWstecznych[i][(tab.length-1)-i];
}
return tmpTab;
}
public static void main(String[] args) {
double h = 0.2;
double[][] tab = new double[7][2];
tab[0][0]= 1.4;
tab[0][1]= 0.985450;
tab[1][0]= 1.6;
tab[1][1]= 0.999574;
tab[2][0]= 1.8;
tab[2][1]= 0.973848;
tab[3][0]= 2;
tab[3][1]= 0.909297;
tab[4][0]= 2.2;
tab[4][1]= 0.808496;
tab[5][0]= 2.4;
tab[5][1]= 0.675463;
tab[6][0]= 2.6;
tab[6][1]= 0.515501;
double[] result = obliczRozniceWsteczne(tab);
double wynik = 0.0;
String wzor ="f(x) = 1/"+h+" * [ ";
for(int i=0; i< result.length; i++){
wynik += (1/(i+1)*result[i]);
wzor += "1/"+(i+1)+" * "+result[i];
if(i != (result.length-1))
wzor += " + ";
else
wzor += " ] ";
}
wynik *= (1/h);
System.out.println(wzor+ " = "+ wynik);
}
}
4. Komunikaty wyświetlane przez program
0.98545, 0.999574, 0.973848, 0.909297, 0.808496, 0.675463, 0.515501,
0.014123999999999914, -0.025725999999999916, -0.06455100000000003, -
0.10080100000000003, -0.13303299999999996, -0.15996200000000005, 0.0,
-0.03984999999999983, -0.03882500000000011, -0.036250000000000004, -
0.03223199999999993, -0.026929000000000092, 0.0, 0.0,
0.0010249999999997206, 0.002575000000000105, 0.004018000000000077,
0.005302999999999836, 0.0, 0.0, 0.0,
0.0015500000000003844, 0.001442999999999972, 0.0012849999999997586, 0.0,
0.0, 0.0, 0.0,
-1.0700000000041232E-4, -1.5800000000021353E-4, 0.0, 0.0, 0.0, 0.0, 0.0,
-5.0999999999801204E-5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
f(x) = 1/0.2 * [ 1/1 * -0.15996200000000005 + 1/2 * -0.026929000000000092 +
1/3 * 0.005302999999999836 + 1/4 * 0.0012849999999997586 + 1/5 * -
1.5800000000021353E-4 + 1/6 * -5.0999999999801204E-5 ] =
-0.7998100000000002


Wyszukiwarka

Podobne podstrony:
2010 LAB5 Sprawozdanieid 064
sprawozdanie programowanie lab5 fin
Lab5 sprawozdanie
lab5 sprawozdanie
sprawozdanie felixa2
Sprawozdanie Konduktometria
zmiany w sprawozdaniach fin
Lab5
Errata do sprawozdania
2009 03 BP KGP Niebieska karta sprawozdanie za 2008rid&657
Sprawozdanie nr 3 inz
Sprawozdanie FundacjaBioEdu2007
Lab5 1 R4 lab51
Sprawozdanie Ćw 2

więcej podobnych podstron