Arytmetyka zmiennoprzecinkowa.
W zależności od sposobu zapisu wyróżnia się liczby:
stałoprzecinkowe
zmiennoprzecinkowe
W liczbach stałoprzecinkowych w ciągu bitów przedstawiających liczbę binarną miejsce przecinka jest umownie ustalone i nie zmienia się podczas wykonywania obliczeń.
Liczby przechowywane są w komórkach pamięci. Komórka ze stałym przecinkiem podzielona jest na trzy części. Komórka składa się z 13 bitów i ma wygląd:
znak część część
liczby całkowita ułamkowa
W przypadku liczby ujemnej wpisujemy w miejsce znaku „1”, a gdy liczba jest dodatnia „0”.
Ex.1.
Zapisz liczby w komórkach pamięci ( 13 bitowych ).
+1110.11011
- 1110.11011
+0.00000001
W systemie zmiennoprzecinkowym liczby dają się zapisać w postaci półalgorytmicznej
X = m * 10c , gdzie m - mantysa; c - cecha; 10 - zasada numeracji ( p ). Liczby przechowywane są w komórkach pamięci. Komórki te składają się z czterech części i są one 13 bitowe.
znak mantysa cecha
liczby
Przecinek znajduje się tu po bicie znaku. Cecha ze znakiem wskazuje faktyczne położenie przecinka w danej liczbie.
Ex. 2
Przedstaw liczby w zapisie półalgorytmicznym:
a) X1 = 111,01 = 11,101 * 101 = 1,1101 * 1010 = 0,11101 * 1011
b) X2 = 0,00101 = 0,0101 * 10-1 = 0,101 * 10 -10 = 1,01 * 10 -11 = 10,1 * 10 -100 = 101 * 10 -101
Ex. 3.
Zapisz w komórkach pamięci ( 13 bitowych ) liczby:
0,11101101 * 1011
0,011101101 * 10100
0,0011101101
Gdy mantysa nie mieści się to należy ją zaokrąglić. Zazwyczaj z tego powodu nakłada się ograniczenia mantysy 0,1 ≤ |m| ≤ 1.
Ten sposób zapisu liczb zmiennoprzecinkowych nazywa się zapisem znormalizowanym.
Normalizowanie liczby X = 0,011101101 * 10100 = 0,11101101 * 10100 - 1 = 0,11101101*1011
Ex. 4.
Dodaj dwie liczby o 8 bitowej mantysie i 4 bitowym wykładniku.
A = 0 00101001 1101
B = 0 00011010 1010
ANOR = 0 10100100 1011
BNOR = 0 11010000 0111
A = 0 10100100 1011
+ B = 0 00001101 1011
0 10110001 1011
Tak więc widzimy, żeby dodać dwie liczby należy je najpierw znormalizować, następnie zrównać cechy i dopiero dodać do siebie.
Ex. 5.
Pomnóż liczby A i B
A = 0 10000000 1001
B = 0 01000000 0011
ANOR = 0 10000000 1001
* BNOR = 0 10000000 +0010
0 01000000 1011
Ex. 6.
Odejmij od liczby A liczbę B
A = 0 1000000 1001
B = 1 0100000 0011
A = 0 10000000 1001
- B = 1 00000001 1001
0 01111111 1001
Widzimy, żeby odjąć dwie liczby trzeba zrównać ich cechy i odjąć mantysę.
Przedziały liczb stałoprzecinkowych zapisywanych w komórkach pamięci.
k
r l k - l - 1
Maksymalną liczbą jaką możemy zapisać w pamięci jest liczba:
1..1,1..1 = 1..1,1..1 +0,0..01 - 0,0..01 = 10..0,0..0 - 0,0..01 = 2l - 2 -(k -l - 1)
r k-l-1 k-l-1 l +1
Minimalną liczbą jest liczba 2 - ( k - l - 1 )
Przedział liczb zapisywanych w pamięci jest następujący 2 - ( k - l - 1 ) ≤ |x| ≤ 2l - 2 -(k -l - 1)
Przedziały liczb zmiennoprzecinkowych zapisywanych w komórkach pamięci.
k
r k - r - 2
Maksymalną liczbą jaką możemy zapisać w pamięci jest liczba:
0,1..1 * 101..1 = ( 1,0..0 - 0,0..01 ) * 101..1= ( 1 - 2 -r ) *
r k-l-1 r
Minimalną liczbą jest liczba 2-r * 2 k - r - 2
Przedział liczb zapisywanych w pamięci 2-r * 2 k - r - 2 ≤ |x| ≤ ( 1 - 2 -r ) *
Błędy obliczeń.
Niech x, y są liczbami zmiennoprzecinkowymi. Działania f (x ⊕ y ), gdzie ⊕ oznacza dowolną operację arytmetyczną, mają do pewnego stopnia inne własności niż dokładne działania arytmetyczne.
Ex. 1.
Sprawdź czy fl ( fl ( a + b ) + c ) = fl ( a + fl ( b + c )), gdy:
a = (0) 11001110 (0) 011
b = (0) 10000011 (0) 110
c = (1) 10000011 (0) 110
a = (0) 00011001 (0) 110
+ b = (0) 10000011 (0) 110
(0) 100011100 (0)110
+ c =(1) 10000011 (0)110
(0) 00011001 (0) 110 = (0) 11001000 (0) 011 = a
fl ( a + fl ( b + c )) = (0) 11001110 (0) 011
Wartością dokładną wielkości nazywamy wielkość wynikającą z definicji.
Wartością przybliżoną wielkości nazywamy wartość liczbową otrzymaną w wyniku obliczeń.
Niech X będzie wartością dokładną, a „x” przybliżoną. Błędem bezwzględnym wartości przybliżonej nazywamy każdą liczbę Δx spełniającą warunek:
| X - x | ≤ Δx
Błędem względnym wartości przybliżonej x obarczonej błędem bezwzględnym Δx nazywamy liczbę:
Ex. 2.
Niech x = 0,2. Liczba x ma w zapisie binarnym nieskończone rozwinięcie równe (0) 00110011.. Najbliższa jej liczba, którą można przedstawić stosując 5 bitową mantysę i 3 bitową cechę wynosi x = (0) 1100 (1) 10 = ( 0,187)10. Oszacuj błędy.
Δx = |X - x| = 0,2 - 0,1875 = 0,0125
Typy błędów:
wejściowe - dane wprowadzane do maszyny odbiegają od dokładnych wartości danych
błędy obcięcia - powstają podczas obliczeń na skutek zmniejszenia liczby działań ( np.: przy obliczaniu szeregów matematycznych )
błędy zaokrągleń
Ex. 3.
Oblicz sumę liczb x1 = 0,48; x2 = 0,24; x3 = 0,12. Liczby są zapisywane w komórkach pamięci 8 - bitowych * 5 bitowa mantysa, 3 bitowa cecha )
x1 = (0) 1111 (1) 01 = 0,46875, bo (1*2-1 + 1*2-2 + 1*2-3 + 1*2-4) * 2-1
x2 = (0) 1111(1) 10 = 0,234375
x3 = (0) 1111(1) 11 = 0,1171875
x1 = (0) 1111 (1) 01
+ x2 = (0) 0111(1) 01
(0)10110 (1) 01 = (0) 1011 (1) 00
+ x3 = (0) 1111 (1) 11
(0) 1100 (1) 00 = (1*2-1 + 1* 2-2 + 0* 2-3 + 0*2-4)*20 = 0,75
Granicznym błędem bezwzględnym nazywa się najmniejszą liczbę dodatnią δ, większą od modułu błędu bezwzględnego |ε| ≤ δ.
Granicznym błędem względnym nazywa się najmniejszą liczbę δ' większą od modułu błędu bezwzględnego ε' ≤ δ.
Działanie |
Błąd bezwzględny |
Błąd względny |
+ ( - ) |
δ = δ1 + δ2 |
|
* |
δ = δ1*|x1| + δ2*|x2| |
δ' = δ1' + δ2' |
/ |
|
δ' = δ1' + δ2' |
Rozwiązywanie równań nieliniowych z jedną niewiadomą.
Rozróżniamy równania:
algebraiczne typu Wn(x) = a0*xn + a1*xn+1 + ... + an, gdzie Wn(x) = 0.
W takich równaniach nie można podać analitycznego rozwiązania równania o stopniu większym niż 4.
przestępne typu F(x) = lg(x+2) - cos x, gdzie F(x) = 0
W tego typu równaniach nie można podać analitycznego rozwiązania.
Rozwiązanie numeryczne polega na:
ustaleniu istnienia pierwiastków i ich liczby
obliczeniu pierwiastków z zadaną dokładnością i ocenie błędu
Istnieją dwie metody rozwiązania równań:
metody wymagające wyznaczenia tzw. przedziałów izolacji, w których się znajduje pierwiastek
metody wymagające przybliżenia początkowego pierwiastka
Ustalanie istnienia pierwiastków.
Jeżeli funkcja F(x) jest ciągła w przedziale [a,b] i spełnia w warunki:
F(a) * F(b) < 0
F(x) < 0 lub F(x) > 0
to przedział [a,b] jest przedziałem izolacji.
Jeżeli znaki funkcji na granicach przedziałów są takie same to wiemy, że:
równanie w przedziale [a,b] nie ma pierwiastków
równanie w przedziale [a,b] ma parzystą liczbę pierwiastków
Natomiast jeżeli znaki funkcji na krańcach przedziału są różne, to wiemy że funkcja ma w danym przedziale co najmniej jeden pierwiastek.
Aby ustalić przedziały izolacji dla pierwiastków należy, począwszy od punktu x = a badać wartość funkcji F(x), aż do punktu x = b z krokiem h, który powinien być jak najmniejszy. Jeżeli F(x) * F(x+h) < 0 to przedział [x, x+h] zawiera pierwiastek funkcji F.
Należy też sprawdzić warunek
(F(x) - F(x-h))*(F(x-h) - F(x)) > 0.
Jeżeli warunek jest nie spełniony to krok dzielimy na pół dopóki w przedziale (x-h, x+h) nie
będzie lub będą dwa pierwiastki.
Ex. 1.
Metodą dzielenia przedziałów wyznaczyć przedziały izolacji dla funkcji
x3 - 6x2 + 3x + 10 = 0 , gdy x ∈ [-2; 6]
Przyjmijmy h = 1,5.
F(-2) = -12
F(-0,5) = 6,875 α1 ∈ [ -2 ; -0,5 ]
W tym przedziale nie ma pierwiastków
F(1) = 8 lub jest ich parzysta liczba
F(2,5) = -4,375 α2 ∈ [ 1 ; 2,5 ]
F(4) = -8
F(5,5) = 11,375 α3 ∈ [ 4 ; 5,5 ]
Dla x = -1 przedział izolacji wynosi [ -2 ; -0,5 ]
Dla x = 2 przedział izolacji wynosi [ 1 ; 2,5 ]
Dla x = 5 przedział izolacji wynosi [ 4 ; 5,5 ]
Istnieją trzy metody badania wartości pierwiastka w przedziale izolacji z określoną dokładnością:
metoda połowienia
metoda siecznych
metoda stycznych
Metoda połowienia.
x1 x2 x0
a3 b3
a2 b2
a1 b1
a0 b0
Założenia:
Funkcja F(x) musi być ciągła w przedziale [a0, b0].
F(a0)*F(b0) < 0 , więc funkcja na granicy przedziałów musi mieć przeciwne znaki.
W przedziale [a0, b0] musi być dokładnie jeden pierwiastek.
Procedura:
Znaleźć kolejne przedziały [a0, b0] ⊃ [a1, b1] ⊃ [a2, b2] ⊃ ... takie, zę każdy z nich zawiera pierwiastek równania α. Przedziały Pi = [ai, bi] wyznacza się rekurencyjnie w sposób:
wyznaczamy środek przedziału pi-1: xi-1 =
xi-1 jest pierwszym przybliżeniem pierwiastka równania
powstają dwa przedziały [ai-1, xi-1] oraz [xi-1, bi-1]. Wybieramy ten, w którym funkcja ma przeciwne znaki na końcach przedziału
Pi = [ai, bi] utożsamiamy z wybranym przedziałem
Kolejne przybliżenia xi-1 =
dążąc do dokładnej wartości pierwiastka równania α
Procedurę należy powtarzać, dopóki długość kolejnego przedziału nie okaże się mniejsza od wartości ε > 0 ; | bi - ai | < ε, gdzie ε jest dokładnością obliczeń.
Ex. 2.
Metodą połowienia wyznaczyć pierwiastki równania x3 - 6x2 + 3x + 10 = 0, wiedząc że α1 ∈ [-2; -0,5], α2 ∈ [1; 2,5], α3 ∈ [4; 5,5] i dokładności ε = 0,1
Pierwszy pierwiastek:
Krok 1
x0 = 1 / 2 * ( -0,5 - 2 ) = -1,25
F(-1,25) = -5,078
F(-2) = -12
F(-0,5) = 6,875
α1 ∈ [ 1,25 ; -0,5 ]
Obliczmy |-0,5-(-1,25)| = 0,75 > ε = 0,1
Krok 2
x1 = ˝*(-0,5-1,25) = -0,875
F(-0,875) = 2,111
F(-1,25) = -5,078
α2 ∈ [ -1,25 ; -0,875 ]
Obliczmy |-0,875 - (-1,25)| = 0,375 > ε = 0,1
Krok 3
x2 = ˝*(-0,875-1,25) = -1,0625
F(-1,0625) = -1,160
F(-0,875) = 2,111
F(-1,25) = -5,078
α3 ∈ [ -1,0625 ; -0,875 ]
Obliczmy |-0,875 - (-1,0625)| = 0,185 > ε = 0,1
Krok 4
x3 = ˝*(-0,875-1,0625) = -0,96875
F(-0,96875) = 0,5537
F(-1,0625) = -1,160
F(-0,875) = 2,111
α4 ∈ [ -1,0625 ; -0,96875 ]
Obliczmy |-0,96875 - (-1,0625)| = 0,09375 < ε = 0,1
Zatem naszym pierwiastkiem obliczonym z dokładnością do 0,1 jest liczba -0,96875
Metoda siecznych ( reguła falsi ).
x0 x0 x0
a1 b1
a2 b2
a3 b3
a0 b 0
Założenia:
Funkcja F(x) musi być ciągła w przedziale [a0, b0].
F(a0)*F(b0) < 0 , więc funkcja na granicy przedziałów musi mieć przeciwne znaki.
W przedziale [a0, b0] musi być dokładnie jeden pierwiastek.
Procedura:
Metoda ta polega na identyfikacji liniowej funkcji F(x):
znaleźć kolejne przedziały [a0, b0] ⊃ [a1, b1] ⊃ [a2, b2] ⊃ ... takie, zę każdy z nich zawiera pierwiastek równania α.
Przedziały Pi = [ai, bi] wyznacza się rekurencyjnie poprzez wyznaczenie współrzędnej punktu przecięcia prostej przechodzącej przez punkt ( ai, F(ai) ) i ( bi , F(bi))
wyznaczamy punkt xi-1 =
xi-1 jest pierwszym przybliżeniem pierwiastka równania, a następne są obliczane ze wzoru xi-1 =
powstają dwa przedziały [ai-1, xi-1] oraz [xi-1, bi-1]. Wybieramy ten, w którym funkcja ma przeciwne znaki na końcach przedziału
Pi = [ai, bi] utożsamiamy z wybranym przedziałem
Kolejne przybliżenia xi-1 dążą do dokładnej wartości pierwiastka równania α
Procedurę należy powtarzać, dopóki | xi - xi-1 | < ε, gdzie ε jest dokładnością obliczeń.
Metoda stycznych ( Newtona ).
F(x0)
F(x1)
F(x2)
F(x3)
x1 x2 x3
Założenia:
Funkcja F(x) musi być ciągła w przedziale [a0, b0].
F(a0)*F(b0) < 0 , więc funkcja na granicy przedziałów musi mieć przeciwne znaki.
W przedziale [a0, b0] musi być dokładnie jeden pierwiastek.
Istnieje w przedziale [a0, b0] F'(x) i F''(x), które są różne od zera i mają stały znak.
Procedura:
Za początkowe przybliżenie α należy przyjąć punkt x0, w którym spełniony jest warunek F(x0) * F''(x0) > 0 ,a zatem x0 = a0
Kolejne przybliżenia obliczamy ze wzoru xi = xi-1 -
Kolejne przybliżenia xi-1 liczone według wzoru xi = xi-1 -
dążą do dokładnej wartości pierwiastka równania α
Procedurę należy powtarzać, dopóki | xi - xi-1 | < ε, gdzie ε jest dokładnością obliczeń.
Ex. 3.
Odnaleźć metodą stycznych pierwiastek równania F(x) = 0, gdzie F(x) = ln(x) + x-2 dla α∈[1,3] i ε = 0,01.
Badamy warunki:
F(1) = -1; F(3) = 1,098 zatem F(1) * F(3) < 0
F'(x) = 1 / x + 1 ; F''(x) = -1/x2 zatem x∈[1;3] F'(x)≠0 i F''(x)≠0
Dla x∈[1;3] F'(x) > 0 a F''(x) < 0
Rozwiązanie:
Ponieważ dla x0 = 1 F(x0) = -1, F''(x0) = -1, więc F(x0) * F''(x0) > 0, więc jako pierwsze przybliżenie pierwiastka równania α przyjmiemy x0 = 1.
Krok 1
x1 = x0 -
= 1 - (-1/2 ) = 1,5
| 1 - 1,5 | = 0,5 > ε = 0,01
Krok 2
x2 = x1 -
= 1,5 - (-0,095/1,667 ) = 1,557
| 1,5 - 1,557 | = 0,057 > ε = 0,01
Krok 3
x3 = x2 -
= 1,557 - (-0,0002391/1,6927 ) = 1,557 + 0,000145 = 1,557145
| 1,557 - 1,557145 | = 0,000145 < ε = 0,01
Tak więc przyjmujemy, że α = x3 = 1,557145 z dokładnością do ε = 0,01.
Interpolacja funkcji .
Przedstawienie funkcji polega na wyborze spośród zbioru funkcji F funkcji f, która przybliża funkcję ze zbioru F. Jednym ze sposobów wyboru funkcji przybliżającej jest interpolacja. Jako funkcje przybliżające najczęściej stosuje się wielomiany algebraiczne. Funkcję przybliżającą można przedstawić tabelarycznie lub graficznie.
Wartość cechy x |
Wartość cechy y |
x0 x1 : xn |
y0 y1 : yn |
Funkcja f jest określona w n+1 punktach zwanych węzłami interpolacyjnymi funkcji f. Jeśli zatem dla różnych x0, x1, ..., xn otrzymano wartości y0, y1, ..., yn, wtedy istnieje dokładnie jeden wielomian algebraiczny W(x) stopnia n, którego W(xi) = yi, dla i=0,1,2, ..., n.
Jako wzór wyrażający zależność y od x możemy przyjąć:
y = a0 + a1*x + a2*x2 + ... + an*xn
Mając daną tabelaryczną wartość funkcji w węzłach interpolacyjnych możemy zbudować układ n+1 równań algebraicznych z n+1 niewiadomymi, którymi są współczynniki a0, a1,...,an.
y0 = a0 + a1*x0 + a2*x02 + ... + an*x0n
y1 = a0 + a1*x1 + a2*x12 + ... + an*x1n
:
yn = a0 + a1*xn + a2*xn2 + ... + an*xnn
Wyznacznik macierzy współczynników jest wyznacznikiem Vandermonde'a o postaci:
1 x0 x02 ... x0n
D = 1 x1 x12 ... x1n
: : : : :
1 xn xn2 ... xnn
Ponieważ węzły interpolacyjne są różne, tj. xi ≠ xj dla i ≠ j, to zawsze wyznacznik Vandermonde'a jest różny od zera, a zatem równanie ma dokładnie jedno rozwiązanie o różnych wartościach ai, określone wzorem Cramera:
gdzie: Dij są kolejnymi dopełnieniami algebraicznymi elementów i- tej kolumny macierzy
współczynników.
Oznacza to, że istnieje tylko jeden wielomian W(x), który ma postać:
wielomianu Lagrange'a
wielomianu Newtona
Wielomian Lagrange'a.
Podstawiając do wzoru W(x) = a0 + a1*x + a2*x2 + ... + an*xn wartości a1 oraz dokonując grupowania otrzymujemy postać W(x) = y0*L0(x) + y1*L1(x) + ... + yn*Ln(x), gdzie Ln(x) są wielomianami stopnia co najwyżej n.
Ponieważ w węzłach powinna zajść równość W(xi) = yi to wartość wielomianu we wszystkich węzłach oprócz węzła z numerami „i” powinna być równa 0, a wartość wielomianu w tym węźle powinna być równa 1, czyli:
0 , gdy i ≠ j
Li(xi) = 1 , gdy i = j
Aby określić funkcję Li(x) należy znaleźć wielomian stopnia n, który w punktach
x0, x1, ..., xj-1, xj+1, ..., xn jest równy zero, a w punkcie xj = 1.
Lj(x) = λ*(x - x0)*(x - x1)* ... (x - xj-1)*(x - xj+1)* ... *(x - xn)
Lj(xj) = 1
więc λ*(xj - x0)*(xj - x1)* ... (xj - xj-1)*(xj - xj+1)* ... *(xj - xn) = 1, to po wyrugowaniu ( zastąpieniu innym wyrażeniem ) λ otrzymujemy wzór:
Ostatecznie wzór Newtona na wielomian interpolacyjny ma postać:
Ex. 1. Znaleźć wielomian interpolacyjny, który
w punktach -2,1,2,4 ma wartość 3,1,-3,8
w punktach 1,2,3,4,5 ma wartość 2,2,4,4,6
a)
Wielomian Newtona.
Aby wyznaczyć wielomian Newtona trzeba posłużyć się ilorazem różnicowym:
:
Ogólnie iloraz różnicowy rzędu n tworzymy za pomocą ilorazu różnicowego rzędu n-1 za pomocą wzoru:
dla n = 1,2,... oraz i = 0,1,2,... np.:
Jeżeli funkcja jest określona w n punktach x0, x1, ..., xn, to wielomian algebraiczny interpolacyjny W(x) można zapisać w postaci wzoru Newtona:
W(x) = f(x0) + f(x0, x1)*ω0(x) + f(x0, x1, x2)*ω1(x) + ... + f(x0, x1, ..., xn)*ωn-1(x)
gdzie: ωi(x) = (x - x0) * (x - x1) * ... * (x - xi) dla i = 0,1,..., n-1
Ex. 2. Napisać wzór interpolacyjny dla funkcji określonej wartościami:
f(0) = 1 ; f(2) = 3 ; f(3) = 2 ; f(4) = 5 ; f(6) = 7
f(1) = 2 ; f(2) = 2 ; f(3) = 4 ; f(4) = 4 ; f(5) = 6
a)
xi |
f(xi) |
Iloraz 1 rzędu |
Iloraz 2 rzędu |
Iloraz 3 rzędu |
Iloraz 4 rzędu |
|
|
f(xi, xi+1) |
f(xi, xi+1,xi+2) |
f(xi, xi+1,xi+2,xi+3) |
f(xi, xi+1,xi+2,xi+3, xi+4) |
0
|
|
=1 |
|
|
|
2
|
3 |
-1 |
-2/3
|
2/3 |
|
3
|
2 |
3 |
2 |
- 2/3 |
-2/9 |
4
|
5 |
1 |
-2/3 |
|
|
6 |
7 |
|
|
|
|
W(x) = 1 + 1*(x-0) - *(x-0)(x-2) + *(x-0)(x-2)(x-3) -
*(x-0)(x-2)(x-3)(x-4) =
=
b)
xi |
f(xi) |
Iloraz 1 rzędu |
Iloraz 2 rzędu |
Iloraz 3 rzędu |
Iloraz 4 rzędu |
|
|
f(xi, xi+1) |
f(xi, xi+1,xi+2) |
f(xi, xi+1,xi+2,xi+3) |
f(xi, xi+1,xi+2,xi+3, xi+4) |
1
|
|
0 |
|
|
|
2
|
2 |
2 |
1
|
- 2/3 |
|
3
|
4 |
0 |
-1 |
2/3 |
1/3 |
4
|
4 |
2 |
1 |
|
|
5
|
6 |
|
|
|
|
W(x) = 2 + 1*(x-1)(x-2) - *(x-1)(x-2)(x-3) +
*(x-1)(x-2)(x-3)(x-4)
Aproksymacja funkcji.
Funkcję F(x) znaną lub określoną tabelą wartości będziemy aproksymować inną funkcją f(x), zwaną funkcją aproksymującą lub przybliżeniem funkcji f(x), a błędy tej operacji nazywać będziemy błędami aproksymacji. W metodach aproksymacji możemy wyróżnić następujące kroki:
wybór na podstawie wykresu funkcji aproksymującej f(x), która najlepiej oddaje charakter zależności między cechami X i Y
szukamy parametrów a, b, c, ... dla wybranej funkcji F(x)
Sposób poszukiwania parametrów dla funkcji aproksymującej określa różne metody aproksymacji, wśród których najbardziej znaną jest metoda najmniejszych kwadratów (aproksymacja średniokwadratowa).
Niech w punkcie xi będzie dana funkcja F(x), która przyjmuje w tych punktach wartości yi, gdzie i = 1, 2, ..., n. Będziemy poszukiwać takiej funkcji f(x) przybliżającej daną funkcję F(x), która umożliwi wygładzenie funkcji F(x), dlatego należy znaleźć taką funkcję f(x), aby był spełniony warunek:
Gdy funkcja aproksymacyjna zostanie wybrana, to podstawiamy ją do powyższego wzoru i mamy:
Funkcja P(a, b, c, ...) jest funkcją wielu zmiennych. Trzeba znaleźć takie wartości dla parametrów a, b, c, ... dla których funkcja ta osiągnie minimum. Dla ich uzyskania obliczamy pochodne cząstkowe względem każdego parametru i tworzymy układ równań:
:
:
...........................................................................................................
Aproksymacja liniowa.
Niech funkcja aproksymująca będzie funkcją f(x) = a*x + b. Mamy wtedy:
Zastosujmy wzory Cramera:
D = = n *Σxi2 - (Σxi)2
n
Da = = n *Σyi * xi - Σxi * yi
n
Db = = Σxi2 * Σyi - Σxi * yi * Σxi
Wprowadźmy nowe zmienne:
S1 =
; S2 =
; S3 =
; S4 =
Więc mamy:
D = n*S2 - S12 ; Da = n*S4 - S1*S3 ; Db = S2*S3 - S4*S1
Czyli:
Ex. 1.
Podaj funkcję aproksymującą dla danych przedstawionych w tabeli:
X |
1 |
2 |
3 |
4 |
5 |
Y |
2 |
5 |
8 |
8 |
12 |
S1 = 1 + 2 + 3 + 4 + 5 = 15
S2 = 1 + 4 + 9 + 16 + 25 = 55
S3 = 2 + 5 + 8 + 8 +12 = 35
S4 = 1 * 2 + 2 * 5 + 3 * 8 + 4 * 8 + 5 * 12 = 128
f(x) = 2,3 * x + 0,1
Niech funkcja aproksymująca będzie wielomianem an * xn + an-1 * xn-1 * ... * a0. Musimy wtedy:
w wyniku podstawienia za X i Y odpowiednich wartości mamy układ n+1 równań z n+1 niewiadomymi, którego rozwiązanie możemy uzyskać z wzorów Cramera
w przypadku wyboru zależności aproksymującej w postaci potęgowej lub logarytmicznej powstaje nieliniowy układ równań
rozwiązanie nieliniowego układu równań uzyskuje się w taki sposób, że przekształcamy funkcję aproksymującą do postaci liniowej, wyznaczając parametry ai, rozwiązując układ równań liniowych a potem wracamy do funkcji pierwotnej.
Niech y = a*xm, gdzie a>0 i x>0
Dokonujemy przekształceń:
ln(y) = ln(a * xm)
ln(y) = ln(a) + ln(xm)
ln(y) = ln(a) + m* ln(x)
Niech u = ln(x) ; A = m ; B = ln(a) ; F(n) = ln(y)
Po podstawieniu otrzymujemy nowe równanie aproksymujące ( liniowe ) F(n) = A * u + B, które rozwiązujemy w tradycyjny sposób.
Ex. 2.
Wyznaczyć funkcję aproksymującą potęgową f(x) = a * xm dla funkcji F(x) zadanej w postaci tabeli:
X |
1 |
2 |
4 |
5 |
Y |
4 |
8 |
16 |
25 |
u = ln(x) ; F(u) = ln(y) = v
u |
ln(1) = 0 |
Ln(2) = 0,7 |
ln(4) = 1,4 |
ln(5) = 1,6 |
v |
ln(4) = 1,4 |
Ln(8) = 2,1 |
ln(16) = 2,8 |
ln(25) = 3,2 |
S1 = 0 + 0,7 + 1,4 + 1,6 = 3,7 ; S2 = 0,49 + 1,96 + 2,56 = 5,01
S3 = 1,4 + 2,1 + 2,8 + 3,2 = 9,5 ; S4 = 1,47 + 3,92 + 5,12 = 10,51
y = 3,7 * x 0,3
Niech y = a * ln(x) + b
Dokonujemy odpowiednich podstawień:
u = ln(x) ; F(u) = y ; A = a ; B = b
Po podstawieniu otrzymujemy nowe równanie aproksymujące F(u) = A*u + B
Rozwiązywanie układów algebraicznych równań liniowych.
Niech będzie dany układ n równań z n niewiadomymi:
a11*x1 + a12*x2 + ... + a1n*xn = b1
a21*x1 + a22*x2 + ... + a2n*xn = b2
:
an1*x1 + an2*x2 + ... + ann*xn = bn
Układ ten może być zapisany w postaci macierzowej Ax = b, gdzie:
A - macierz współczynników
b - wektor wyrazów wolnych
x - wektor n niewiadomych
Metody dokładne rozwiązania układu równań.
Jeżeli rozwiązanie układu równań Ax = b polega na takim przekształceniu danych A i b, że przy założeniu dokładnie wykonywanych działań arytmetycznych po skończonej liczbie działań otrzymujemy rozwiązanie, to taką metodę rozwiązania nazywamy metodą dokładną. Do metod tych zalicza się:
metodę wzorów Cramera
metodę eliminacji Gaussa
metodę Doolittle'a
metodę eliminacji Jordana
Metody dokładne charakteryzują się małą liczbą obliczeń potrzebnych do wyznaczenia rozwiązania, lecz są one niestabilne, tj. dla zadań źle uwarunkowanych numerycznie wyznaczone rozwiązanie może być obarczone dużym błędem. Metody te także bardzo obciążają pamięć komputera, ze względu na przekształcanie macierzy A i przechowywanie początkowych wartości macierzy A i b w celu sprawdzenia obliczeń.
Metoda Gaussa.
Niech będzie dany układ równań liniowych:
a11* x1 + a12* x2 + a13* x3 + ... + a1n* xn = b1
a22* x2 + a23* x3 + ... + a2n* xn = b2
.......................................................................
an-1n-1* xn-1 + an-1n* xn = bn-1
amn* xn = bn
Aby obliczyć niewiadome x1, x2, ..., xn należy wykonać następujące czynności:
wyznaczamy xn z ostatniego równania, gdzie xn = bn / amn
wyznaczamy xn-1 z przedostatniego równania, gdzie xn-1 = ( bn-1 - an-1 n* xn) / an-1n-1
ogólnie dla wyznaczenia k-tej niewiadomej równania mamy wzór:
xk = ( bk - akm* xn - akn-1* xn-1 - ... - akk+1* xk+1) / akk, gdzie k = n-1, n-2, ..., 1
Ex. 1. Rozwiązać układ równań liniowych doprowadzając go najpierw do postaci trójkątnej.
x1 + 2 * x2 + 4 * x3 = 3 *(-2) * (-1)
2 * x1 + 3 * x2 + 2 * x3 = 2
x1 + 2 * x2 + 3 * x3 = 1
eliminacja
x1 + 2 * x2 + 4 * x3 = 3
x2 + 6 * x3 = 4
x3 = 2
x2 = 4 - 6 * x3 = 4 - 12 = -8
x1 = 3 - 2 * x2 - 4 * x3 = 3 + 16 - 8 = 11
x1 = 11
x2 = -8
x3 = 2
Metody iteracyjne ( przybliżone ) rozwiązywania równań.
Są to metody, w których konstruuje się nieskończony ciąg wektorów, zbieżny do szukanego rozwiązania x: x(0, x(1), ..., x(k), gdzie x(0) jest wektorem początkowym. Na k- tym kroku kończymy obliczenia i otrzymujemy rozwiązanie przybliżone x(k). Do metod tych zaliczamy:
metodę Jacobiego
metodę Gaussa - Seidla
metodę Czebyszewa
Metody iteracyjne są bardzo stabilne i posiadają prostą organizację obliczeń.
Metoda Jacobiego ( iteracji prostej ).
Niech będzie dany układ równań liniowych:
a11*x1 + a12*x2 + ... + a1n*xn = b1
a21*x1 + a22*x2 + ... + a2n*xn = b2
:
an1*x1 + an2*x2 + ... + ann*xn = bn
Dokonujemy przekształceń powyższego układu do postaci:
x1= a11*x1 + a12*x2 + ... + a1n*xn + β1
x2 = a21*x1 + a22*x2 + ... + a2n*xn + β2
:
xn = an1*x1 + an2*x2 + ... + ann*xn + βn
co w skrócie można zapisać:
. W postaci macierzowej układ ten zapiszemy x = A*x + b, gdzie x = [ x1, x2, ..., xn ]
b = [ β1, β2, ..., βn ]
gdzie x - wektor niewiadomych
b - wektor n liczb βi
A - macierz kwadratowa współczynników αij
Następnie szukamy kolejnych przybliżeń x(0), x(1), ..., rozpoczynając od wektora początkowego x(0), będącego dowolnym ciągiem liczb x(0) = [ x1(0), x2(0), ..., xn(0) ].
Następnie podstawiamy te początkowe wartości do poprzedniego wzoru, otrzymując wektor x(1), stanowiący następne przybliżenie
.
Operację tę powtarzamy uzyskując kolejne przybliżenia, takie że jeżeli spełniony jest jeden z warunków:
lub
lub
Ciąg przybliżeń x(k) jest zbieżny ( poprzez przekształcenia układu pierwotnego zawsze można uzyskać spełnienie tego warunku ).
Proces obliczeń kończymy, gdy będzie spełniony warunek:
| xi(k) - xi(k-1) | < ε, gdzie i = 1, 2, ..., n
Ex. 2. Metodą iteracyjną rozwiązać układ równań liniowych z dokładnością do 0,0001:
x1 = 0,1 * x1 + 0,1 * x2 + 0,1 * x3 + 0,7
x2 = 0,2 * x1 + 0,1 * x2 + 0,3 * x3 + 0,4
x3 = 0,5 * x1 + 0,2 * x2 + 0,1 * x3 + 0,2
Niech x(0) = 0 = [ 0; 0; 0 ]
1- sza iteracja
x1(1) = ( 0,1 * 0 + 0,1 * 0 + 0,1 * 0 ) = 0,7
x2(1) = ( 0,2 * 0 + 0,1 * 0 + 0,3 * 0 ) = 0,4
x3(1) = ( 0,5 * 0 + 0,2 * 0 + 0,1 * 0 ) = 0,2
2- ga iteracja
x1(2) = ( 0,1 * 0,7 + 0,1 * 0,4 + 0,1 * 0,2 ) + 0,7 = 0,83
x2(2) = ( 0,2 * 0,7 + 0,1 * 0,4 + 0,3 * 0,2 ) + 0,4 = 0,6
x3(2) = ( 0,5 * 0,7 + 0,2 * 0,4 + 0,1 * 0,2 ) + 0,2 = 0,65
| 0,83 - 0,7 | = 0,13 > 0,0001
| 0,6 - 0,4 | = 0,2 > 0,0001
| 0,65 - 0,2 | = 0,45 > 0,001
3- cia iteracja
x1(3) = ( 0,1 * 0,83 + 0,1 * 0,6 + 0,1 * 0,65 ) + 0,7 = 0,908
x2(3) = ( 0,2 * 0,83 + 0,1 * 0,6 + 0,3 * 0,65 ) + 0,4 = 0,821
x3(3) = ( 0,5 * 0,83 + 0,2 * 0,6 + 0,1 * 0,65 ) + 0,2 = 0,8
| 0,908 - 0,83 | = 0,078 > 0,0001
| 0,821 - 0,6 | = 0,221 > 0,0001
| 0,8 - 0,65 | = 0,15 > 0,0001
Widzimy więc że iterację powinniśmy kontynuować dalej.
23
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
1
1
0
1
1
0
1
1
1
0
0
0
1
1
0
1
1
0
1
1
1
0
0
0
0
1
0
1
1
0
1
1
1
01
0
0
1
0
0
1
1
0
1
1
1
0
0
1
0
0
0
1
1
0
1
1
1
0
0
Y
y1
y0
y3
x0 x1 x2 X
b)