Metody Numeryczne - laboratorium 1

Transkrypt

Metody Numeryczne - laboratorium 1
Metody Numeryczne - laboratorium 1
10.10.2004
Wyznaczanie warości wielomianów.
Dany jest wielomian stopnia n:
w(x) =
n
X
ai xi
i=0
gdzie ai są współczynnikami tego wielomianu w bazie potęgowej. Napisać program liczący wartość
wielomianu w podanym przez użytkownika punkcie przy pomocy dwóch metod: zwykłej oraz schematem Hornera. Współczynniki wielomianu mają być wartościami losowymi, natomiast stopień
wielomianu należy zdefiniować stałą w programie. Porównać czas obliczeń obu metod. Dlaczego tak
się dzieje?
Metoda zwykła
Wartość wielomianu w punkcie x liczona jest poprzez sumowanie kolejnych potęg wartości x pomnożonych przez odpowiednie współczynniki:
w(x) =
n
X
ai xi = a0 + a1 x + a2 x2 + . . . + an xn
i=0
Metoda schematu Hornera
Należy zauważyć, że prawdziwa jest następująca zależność:
w(x) =
n
X
ai xi =
i=0
= a0 + a1 x + a2 x2 + . . . + an xn =
= a0 + x(a1 + x(a2 + x(a3 + . . . + x(an−1 + xan ) . . .)))
Wykonując obliczenia według kolejności wskazywanej przez nawiasy można zapisać następujący algorytm:
w = an
i=n−1
dopóki i ­ 0 wykonuj:
w =w∗x
w = w + ai
i=i−1
Algorytm ten nazywany jest schematem Hornera.
1
Metody Numeryczne - laboratorium 2
23.10.2004
Wyznaczanie miejsc zerowych funkcji nieliniowych jednowymiarowych.
Napisać program wyznaczający numerycznie miejsca zerowe dla następujących funkcji:
f1 (x) = x3 − 6x2 + 11x − 6
f2 (x) = sin(x)
f3 (x) = lg x
Przedział, w którym ma być znalezione miejsce zerowe (albo punkt startowy dla metody Newtona)
podaje użytkownik programu. Należy zastosować jedną z poniższych metod.
Metoda bisekcji (połowienia)
Dana jest funkcja f : R → R ciągła na przedziale [a, b]. Ponadto f (a)f (b) < 0. Kolejne przybliżenia
miejsca zerowego wyznaczamy według wzoru:
xi = 12 (ai + bi )
(1)
gdzie ai i bi są krańcami przedziału wyznaczonego w i-tym kroku metody. Krańce te wyznaczamy
według wzorów:
a1 = a
b1 = b
oraz jeżeli wartość f (a)f (xi ) jest:
= 0 ⇒ STOP
< 0 ⇒ ai+1 = ai
> 0 ⇒ ai+1 = xi
bi+1 = xi
bi+1 = bi
Obliczenia kończymy gdy |f (xi )| < ε (ε - zadana dokładność obliczeń).
Metoda regula-falsi
Założenia i obliczenia jak w metodzie bisekcji, przy czym kolejne przybliżenia miejsca zerowego
wyznaczamy nie według wzoru 1 ale szukając przecięcia z osią x prostej przechodzącej przez punkty
(ai , f (ai )) i (bi , f (bi ):
ai f (bi ) − bi f (ai )
(bi − ai )f (bi )
= bi −
(2)
xi =
f (bi ) − f (ai )
f (bi ) − f (ai )
Obliczenia kończymy gdy |xi+1 − xi | < ε lub ewentualnie tak jak w metodzie bisekcji.
Metoda stycznych (Newtona)
Dana jest funkcja f : R → R różniczkowalna na przedziale [a, b]. Metoda jest najszybciej zbieżna
ale wymaga różniczkowalności funkcji i wstępnej lokalizacji szukanego miejsca zerowego. Niech x0
będzie danym pierwszym przybliżeniem miejsca zerowego. Kolejne przybliżenia wyznaczamy według
wzoru:
f (xi )
xi+1 = xi −
(3)
f ‘(xi )
Obliczenia kończymy gdy |xi+1 − xi | < ε lub ewentualnie tak jak w metodzie bisekcji.
2
Metody Numeryczne - laboratorium 3
06.11.2004
Rozwiązywanie układów równań liniowych.
Napisać program rozwiązujący układ równań

2
 1


−2
4




2
x0
4 5
1
x   3 
5 −1 4 
  1  
  =  
2 3 −3 x2  −1
1
x3
1 1
4
metodą Gaussa-Croute’a (z tzw. częściowym wyborem elementu głównego).
Odp.: x = [−13 21 , −5 43 , 7 34 , 13 14 ]T
Metoda Gaussa-Croute’a
Dany jest układ równań liniowych postaci
Ax = b
A = {aij }i,j=0,1,...n−1 jest macierzą kwadratową rzędu n, b = [b0 , b1 , . . . bn−1 ]T wektorem danych,
a x = [x0 , x1 , . . . xn−1 ]T wektorem szukanym.
dla wszystkich i = 0, 1, ...n − 1 wykonaj:
1. Znajdź wiersz macierzy, dla którego wartość bezwzględna w i-tej kolumnie jest
największa, czyli znajdź takie p, że |api | = max{|ai,i |, |ai+1,i |, . . . |an,i |}
2. Zamień wiersze p-ty z i-tym, czyli jeżeli p 6= i to:
bp ↔ bi oraz dla wszystkich j = 0, 1, . . . n − 1 wykonaj apj ↔ aij
3. Jeżeli aii = 0 to STOP (układ nie ma jednoznaczengo rozwiązania).
4. Podziel wiersz i-ty przez aii , czyli:
bi / = aii oraz dla wszystkich j = i + 1, i + 2, . . . n − 1 wykonaj aij / = aii ,
po czym aii = 1
5. Wyzeruj i-tą kolumnę poza i-tym wierszem poprzez odejmowanie i-tego wiersza,
czyli:
dla wszystkich k = 0, 1, . . . , n − 1 jeżeli k 6= i wykonaj:
bk − = aki ∗ bi oraz dla wszystkich j = i + 1, . . . n − 1 akj − = aki ∗ aij
Po zakończeniu działania algorytmu zmieniony wektor b będzie równy szukanemu wektorowi x.
3
Metody Numeryczne - laboratorium 4
19.11.2005
Interpolacja wielomianowa funkcji jednowymiarowych.
Dane jest n punktów (xk , yk ) k ∈ {0, 1, . . . n − 1} zwanych węzłami aproksymacji. Zadaniem interpolacji wielomianowej jest wyznaczenie wielomianu
w(x) =
n−1
X
ai xi
i=0
stopnia n takiego, że w(xk ) = yk dla k = 0, 1, . . . n−1. Do tego celu zastosujemy wzór interpolacyjny Lagrange’a, który wprawdzie nie wyznacza explicite współczynników ai szukanego wielomianu,
ale pozwala na obliczenie jego wartości w dowolnym punkcie x.
Wielomian w(x) można zapisać w alternatywnej postaci
w(x) =
n−1
X
yi Φi (x)
i=0
gdzie Φi (x) jest wielomianem stopnia co najwyżej i zwanym wielomianem interpolacyjnym Lagrange’a
i ma następującą postać:
n−1
Y x − xj
Φi (x) =
xi − xj
j=0
j6=i
Warto tu zauważyć, że Φi (xk ) = δik =
Zestawiając wzory otrzymujemy:
w(x) =
n−1
X
i=0
"
yi
n
1
0
n−1
Y
j=0
j6=i
i=k
i6=k .
x − xj
xi − xj
gdzie
ξi =
#
=
n−1
X
i=0
"
ξi
n−1
Y
#
(x − xj ) ,
(4)
j=0
j6=i
yi
n−1
Y
xi − xj
j=0
j6=i
Istotny jest fakt, iż współczynniki ξi są zależne jedynie od węzłów interpolacji i dla częstego powtarzania procedury wyznaczającej wartość wielomianu interpolującego w danym punkcie możliwe jest
ich uprzednie stablicowanie. Dzięki temu obliczenia zostaną przyspieszone.
Korzystając ze wzoru 4 napisz procedurę obliczającą wartość w punkcie x wielomianu interpolującego zadane punkty (xk , yk ).
4
Metody Numeryczne - laboratorium 5
27.11.2004
Aproksymacja średniokwadratowa wielomianowa funkcji jednowymiarowych.
Dane jest n + 1 punktów (xr , yr ) r ∈ {0, 1, . . . n} zwanych węzłami aproksymacji. Zadaniem aproksymacji średniokwadratowej wielomianowej jest wyznaczenie wielomianu
w(x) =
k
X
aj xj
j=0
stopnia k ¬ n, takiego że błąd średniokwadratowy przybliżenia danych węzłów jest najmniejszy.
Innymi słowy szukamy takich współczynników a0 , a1 , . . . ak , dla których funkcja
F (a0 , a1 , . . . , ak ) =
n
X
[yr − w(xr )]2 =
r=0
n
X
[yr −
r=0
k
X
aj xjr ]2
j=0
∂F
osiąga minimum. Dzieje się to wtedy gdy ∀(i = 0, 1, . . . k) ∂a
= 0, czyli
i
n
X
∂F
∂w
0=
= −2
[yr − w(xr )]
(xr )
∂ai
∂a
i
r=0
Zauważając, że
∂w
∂ai (xr )
n
X
r=0
=
∂
∂ai
yr xir =
Pk
j
j=0 aj xr
n
X
= xir możemy napisać
w(xr )xir =
r=0
n
X

k
X

r=0

aj xjr  xir =
j=0
k
X
n
X
j=0
r=0
!
xri+j aj
(5)
Wprowadźmy następujące oznaczenia
bi =
n
X
yr xir
mij =
r=0
n
X
xri+j
r=0
które pozwalają zapisać równanie 5 w postaci:
k
X
mij aj = bi
dla i = 0, 1, . . . k
j=0
co jest oczywiście niczym innym jak zapisem (k + 1)-wymiarowego układu równań liniowych
Ma = b
(6)
gdzie M = {mij }, a = {ai }, b = {bi } dla i, j ∈ {0, 1, . . . k}.
Korzystając z przedstawionej metody napisz procedurę wyznaczającą współczynniki ai wielomianu
aproksymującego zadane punkty (xi , yi ). Do rozwiązania układu równań 6 należy wykorzystać metodę
Gaussa.
5
Metody Numeryczne - laboratorium 6
04.12.2004
Całkowanie numeryczne.
Zaimplementować funkcję simpleSimpson obliczającą przybliżoną wartość całki funkcji f (x) na
przedziale [a, b] metodą prostą Simpsona. Funkcja f (x) jest jedną z niżej wymienionych:
f1 (x) = x
f2 (x) = 2πsin(2πx)
f3 (x) = 2x3 − 4x + 1
Przedział [a, b] jest podawany przez użytkownika programu. Dokładność ε obliczeń zadana jest stałą
w kodzie programu.
Prosta metoda Simpsona
Należy zauważyć, że całkę pewnej prostej funkcji f (x) na przedziale [a, b], można przybliżyć następującą sumą:
Z
b
f (x)dx ≈
a
K
X
xk ∈ [a, b] dla k = 0, 1, . . . , K
ξk f (xk ),
k=0
co sprowadza problem do obliczenia pola pod wykresem pewnego sklejanego wielomianu interpolującego funkcję f (x) w węzłach xk .
W pierwszym kroku prostej metody Simpsona przedział [a, b] dzielony jest na n = 3 równe części:
[x0 , x1 ],
x0 = a,
[x1 , x2 ],
x1 = a + 13 (b − a),
[x2 , x3 ]
x2 = b − 13 (b − a),
x3 = b
Przybliżoną wartość całki I liczymy jako sumę całek na poszczególnych przedziałach:
I=
n−1
X
Ii
(7)
i=0
przy czym
i
hh
h = xi+1 − xi
(8)
f (xi ) + 4f (xi + 21 h) + f (xi+1 ) ,
6
stanowi całkę wielomianu trzeciego stopnia aproksymującego funkcję f (x) na przedziale [xi , xi+1 ].
Jest to tzw. wzór Simpsona.
W kolejnym kroku metody, każdy z przedziałów jest znowu dzielony na trzy części, co w sumie daje
trzykrotnie gęstszy podział odcinka [a, b]. Ponownie wyliczane jest kolejne już przybliżenie wartości
całki I według wzoru 7. Ten schemat powtarzny jest w kolejnych krokach tak długo, aż różnica
pomiędzy dwoma kolejnymi przybliżeniami całki osiągnie żądaną dokładność, albo, gdy długości
przedziałów zmaleją poniżej zadanej granicy.
Powyższe rozważania można ująć w następujący algorytm:
Ii =
I = 0, n = 3
wykonuj:
Iprev = I
I=0
h = (b − a)/n
x=a
dla i = 0, 1, . . . , n − 1 wykonuj:
I+= f (x) + 4f (x + 12 h) + f (x + h)
x+= h
I∗= h/6
n∗= 3
dopóki |I − Iprev | > ε1 oraz h > ε2
6
Metody Numeryczne - laboratorium 7
18.12.2004
Równania różniczkowe.
Rozwiązać numerycznie następujące równania różniczkowe:
dy = ydx,
y0 = y(x0 = 0) = C1 = 1
xdy + ydx = 0,
y0 = y(x0 = 1) = C2 = 1
dy
4y
√
=
+ x y, y0 = y(x0 = 1) = C32 = 4
dx
x
Rozwiązanie należy znaleźć w podanym przez użytkownika punkcie.
Pomoc: Rozwiązania dokładne dla kolejnych podanych równań wynoszą odpowiednio:
y = C1 ex
y = C2 /x
y = x4
1
2
ln |x| + C3
2
Metoda Rungego-Kutty czwartego rzędu
y(x + h) = y(x) +
h
(K1 + 2K2 + 2K3 + K4 )
6
gdzie
K1
K2
K3
K4
= f (x, y)
= f (x + h/2, y + K1 ∗ h/2)
= f (x + h/2, y + K2 ∗ h/2)
= f (x + h, y + K3 ∗ h)
Początkowo przyjmujemy h = x1 −x0 , gdzie x1 jest punktem, w którym szukamy wartości. Wyliczoną
wartość y porównujemy z poprzednią i jeśli różnica jest większa niż zadana dokłądność zmniejszamy
krok h o połowę i obliczenia powtarzamy tak, aby otrzymać kolejne przybliżenie wartości y(x1 ).
Metodę tę można ująć w następujący algorytm:
y = y0
k=1
wykonuj:
yprev = y
y = y0
x = x0
h = (x1 − x0)/k
dla i = 0, 1. . . . , k − 1 wykonuj:
K1 = f (x, y)
K2 = f (x + h/2, y + K1 ∗ h/2)
K3 = f (x + h/2, y + K2 ∗ h/2)
x+= h
K4 = f (x, y + K3 ∗ h)
y+= h ∗ (K1 + 2K2 + 2K3 + K4 )/6
k+= 1
dopóki |y − yprev | > ε1
7
Metody Numeryczne - laboratorium 8
08.01.2005
Rozwiązywanie układów równań nieliniowych.
Stosując wielowymiarową metodę Newtona rozwiązać układ nieliniowych równań:



x2 + z = xy + 2
−x + z 2 = sin(1 − x) + y 3
 x−1

e
− 3 = y cos(πz)
Wymagane przybliżenie początkowe jest podawane przez użytkownika.
Przykładowe rozwiązanie: x=1, y=2, z=3
Wielowymiarowa metoda Newtona
Wielowymiarowa metoda Newtona rozwiązywania układu nieliniowych równań jest uogólnieniem metody Newtona jednowymiarowej, która, dla różniczkowalnej w wymaganym przedziale, jednowymiarowej funkcji f : R → R, wyznaczała jej miejsce zerowe x(∗) jako efekt zastosowania ciągu iteracji:
x(i+1) = x(i) −
f (x(i) )
f ‘(x(i) )
(9)
poczynając od zadanego przybliżenia początkowego x(0) (porównaj równanie 3 z 2 laboriatorium).
Niech dane teraz będzie n równań z n niewiadomymi reprezentowanych przez funkcje:
f1 (x1 , x2 , . . . , xn ) = 0
f2 (x1 , x2 , . . . , xn ) = 0
...
fn (x1 , x2 , . . . , xn ) = 0
(10)
Aby możliwe było zastosowanie metody Newtona funkcje te muszą być różniczkowalne ze względu
na każdą spośród swoich zmiennych w interesującym nas przedziale. Przyjmując oznaczenia
x = [x1 , x2 , . . . , xn ]T ,
F = [f1 , f2 , . . . , fn ]T
(11)
możemy zapisać nasz układ równań nieliniowych jako F (x) = 0. Jego rozwiązanie sprowadzi się więc
do znalezienia miejsca zerowego wielowymiarowej funkcji F : Rn → Rn . Niech
 ∂f1
(
dF =
∂fi
∂xj
∂x1
 ∂f2
 ∂x1

)n
i,j=1
= .
 ..
∂fn
∂x1
∂f1
∂x2
∂f2
∂x2
..
.
···
···
..
.
∂f1 
∂xn
∂f2 
∂xn 

∂fn
∂x2
···
∂fn
∂xn
.. 
. 
(12)
będzie macierzą pochodnych funkcji F . Startując od pewnego zadanego przybliżenia początkowego
x(0) możemy wyznaczać kolejne stosując iteracje analogiczne jak w metodzie jednowymiarowej:
i−1
h
x(i+1) = x(i) − dF (x(i) )
· F (x(i) )
(13)
Podstawiając ∆x = x(i) − x(i+1) oraz mnożąc obie stony lewostronnie przez dF (x(i) ) otrzymujemy:
(
dF (x(i) )∆x = F (x(i) )
x(i+1) = x(i) − ∆x
(14)
Każdy krok iteracyjny metody sprowadza się więc do rozwiązania liniowego układu równań z macierzą
dF i wektorem danych F w celu wyznaczenia przyrostu ∆x, po czym na jego podstawie następuje
obliczenie kolejnego przybliżenia szukanego wektora x. Aby rozwiązać układ równań liniowych można
użyć np. metody Gaussa-Croute’a (laboratorium 3). Należy przy tym zwrócić uwagę, że macierz dF
może być nieodwracalna, a więc rozwiązanie takie może nie istnieć, co wcale nie musi oznaczać, że
nie istnieje szukane miejsca zerowe, a jedynie to, że przy zadanym przybliżeniu początkowym metoda
Newtona nie może go znaleźć.
8
Metody Numeryczne - laboratorium 9
22.01.2005
Szukanie wartości i wektorów własnych macierzy.
Wyznaczyć wektor własny i odpowiadającą jemu wartość własną macierzy


1 −2 1
0
1

−1 0
0
1
1




0
2
2 −1
A= 1


 0
1
0 −1 0 
2
2 −2 0
1
Należy posłużyć się metodą potęgową wyznaczania wektorów i wartości własnych, przyjmując jako
pierwsze przybliżenie wektor x = [1, 0, 0, 0, 0]T .
Odp.: m = 3.17, x̄ = [0.475, −0.477, 1, −0.115, −0.924]T .
Metoda potęgowa wyznaczania wartości własnej i odpowiadającego jej wektora.
Metoda ta jest metodą iteracyjną poprawiającą w każdym kroku kolejne przybliżenia szukanej wartości
i wektora. Jako pierwsze przybliżenie wektora własnego danej macierzy A należy przyjąć wektor x
taki, że
||x||∞ = 1
przy czym norma nieskończoność zdefiniowana jest jako
||x||∞ = max |xi |
i
Algorytm można zdefiniować następująco:
wykonuj:
v = Ax
m = ||v||∞
jeżeli m = 0 szukana wartość nie istnieje, koniec
v = v/m
e = ||v − x||∞
x=v
dopóki e > ε a także |e − 2| > ε
jeżeli |e − 2| < ε przyjmij m = −m
Po wykonaniu algorymu prawdziwe z dokładnością ε powiny być następujące zależności:
||x||∞ = 1
Ax = mx,
Stąd wnioskujemy, że m jest szukaną wartością własną, a x odpowiadającym jej wektorem własnym.
9