Univerza v Ljubljani
FAKULTETA ZA
STROJNIŠTVO
NUMERIČNE METODE
2011/12
Seminar:
Numerične metode
PD-MK
Datoteka: Seminar_numericne_metode_5, Zadnja sprememba: 17.09.13
Žiga Gosar
17.09.13
Seminar: Numerične metode
KAZALO
1
Naloga 1 ............................................................................................................................................................ 4
1.1
Kompozitno Simpsonovo pravilo ................................................................................................................... 4
1.2
Definicija naloge (str. 246, naloga 5) ............................................................................................................. 4
1.3
Programska koda – Mathematica ................................................................................................................... 4
1.4
Rešitev fizikalnega problema ......................................................................................................................... 7
2
Naloga 2 ............................................................................................................................................................ 9
2.1
Taylorjeva metoda višjega reda ...................................................................................................................... 9
2.2
Definicija naloge (str. 272, naloga 6d) ......................................................................................................... 10
2.3
Programska koda – Mathematica ................................................................................................................. 10
2.3.1
Kubična Hermitova interpolacija ................................................................................................................. 12
3
Naloga 3 .......................................................................................................................................................... 14
3.1
Adaptivna ocena koraka, kontrola napake in Runge-Kutta-Fehlberg-ova metoda .......................................... 14
3.2
Definicija naloge (str. 288, naloga 3d) ......................................................................................................... 15
3.3
Programska koda – Mathematica ................................................................................................................. 15
3.3.1.1
4
Rešitev........................................................................................................................................................... 17
Naloga 4 .......................................................................................................................................................... 18
4.1
Numerično reševanje diferencialnih enačb ................................................................................................... 18
4.2
Definicija naloge (str 323, naloga 6) ............................................................................................................ 19
4.3
Programska koda – Mathematica ................................................................................................................. 19
4.3.1.1
5
Rešitev........................................................................................................................................................... 20
Naloga 5 .......................................................................................................................................................... 23
5.1
Teorija aproksimacij in Čebišev polinom...................................................................................................... 23
5.2
Definicija naloge (str. 516, naloga 1c) .......................................................................................................... 24
5.3
Programska koda – Mathematica ................................................................................................................. 24
5.3.1.1
6
Rešitev........................................................................................................................................................... 25
Naloga 6 .......................................................................................................................................................... 27
6.1
Teorija paproksimacij in Fast Foutier Transformacija................................................................................... 27
6.2
Definicija naloge (str. 547, naloga 5c) .......................................................................................................... 28
6.3
Programska koda – Mathematica ................................................................................................................. 28
7
6.3.1.1
Rešitev:.......................................................................................................................................................... 30
6.3.1.2
Rešitev........................................................................................................................................................... 31
Naloga 7 .......................................................................................................................................................... 33
7.1
QR algoritem ............................................................................................................................................... 33
7.1.1
QR iteracija ................................................................................................................................................. 33
7.2
Definicija naloge (str. 595, naloga 2d) ......................................................................................................... 34
7.3
Programska koda – Mathematica ................................................................................................................. 34
7.3.1.1
8
Rešitev........................................................................................................................................................... 35
Naloga 8 .......................................................................................................................................................... 36
Žiga Gosar
Stran 2/49
Seminar: Numerične metode
8.1
Kontinuitetna metoda ................................................................................................................................... 36
8.2
Definicija naloge (str. 642, naloga 2) ........................................................................................................... 38
8.3
Programska koda – Mathematica ................................................................................................................. 38
8.3.1.1
9
Rešitev........................................................................................................................................................... 40
Naloga 9 .......................................................................................................................................................... 41
9.1
Hiperbolične parcialne diferencialne enačbe ................................................................................................. 41
9.2
Definicija naloge (str 725, naloga 7) ............................................................................................................ 42
9.2.1
Programska koda – Mathematica ................................................................................................................. 43
10
Primerjava numeričnih metod ....................................................................................................................... 47
11
Literatura ....................................................................................................................................................... 49
Žiga Gosar
Stran 3/49
Seminar: Numerične metode
1 Naloga 1
1.1
Kompozitno Simpsonovo pravilo
Simpsonovo pravilo dovolj dobro aproksimira integracijo krivulje na dovolj majhnem intervalu
(intervalu, na katerem je krivulja relativno gladka). Tako lahko integral na takem intervalu
aproksimiativno zapišemo kot:
ba
a b
f xdx 6 f a 4 f 2 f b
b
a
Na intervalu, na katerem se krivulja obnaša preveč oscilativno ali na nekaterih mestih ni
diferenciabilna, Simpsonova aproksimacija utegne dati slab rezultat. Zato je potrebno Simpsonovo
pravilo razširiti v kompozitno Simpsonovo pravilo, ki interval integracije razdeli na več
podintervalov, na katerih se vrši aproksimativna integracija s Simpsonovim pravilom. Prispevke
posameznih intervalov seštejemo, pa imamo ob sodem naravnem številu n, h= (b-a)/n in xj= a+ jh:
b
a
f xdx
n 2 1
n 2 1
b a 4 4
h
2
4
f
a
f
x
f x2 j 1 f b
h f
2j
3
180
j 1
j 1
kjer zadnji člen predstavlja napako aproksimacije.
Kadar aproksimiramo neprave integrale z neskončnimi mejami osnovne oblike:
a
1
dx
xp
jih je potrebno najprej transformirati v integrale s končnimi mejami z vpeljavo substitucije t= 1/x.
Tako dobimo:
a
1
1
1
a 2
dx
t dt
p
0
x
t
kjer je izpeljana oblika primerna za uporabo kompozitnega Simpsonovega pravilo. Kjer vpeljava
substitucije ni možna, je potrebno integral predhodno deliti na več integralov.
1.2
Definicija naloge (str. 246, naloga 5)
Predpostavimo, da telo mase m potuje navpično navzgor, začenjši s površja zemlje. Če zanemarimo
vse upore razen gravitacije je ubežna hitrost v podana kot
v2 2 gR z2 dz , kjer je z
1
x
R
kjer je R = 6378.137 km radij zemlje in g = 9.81 m/s2 gravitacijski pospešek na zemljini površini.
Predpostavi izhodno hitrost v.
1.3
Programska koda – Mathematica
Simpson[a_,b_]:=Module[{},Return[(b-a)/6 (f[a]+4 f[(a+b)/2]+f[b])]];
Žiga Gosar
Stran 4/49
Seminar: Numerične metode
Adapt[a_,b_,tol_]:=Module[{c},c=(a+b)/2;
Sab=Simpson[a,b];
Sac=Simpson[a,c];
Scb=Simpson[c,b];
If[Abs[Sab-Sac-Scb]<tol,
Return[Sac+Scb],
Return[Adapt[a,c,tol/2]+Adapt[c,b,tol/2]]];];
Adapt2[a_,b_,tol_]:=Module[{c},c=(a+b)/2;
X=Append[X,c];
Sab=Simpson[a,b];
Sac=Simpson[a,c];
Scb=Simpson[c,b];
If[Abs[Sab-Sac-Scb]<tol,
Print[
Print[
" "ab, f x , " x
"
"
"ca, f
"cb, f
", Sab];
x ," x
", Sac];
x ," x
", Scb
];
Print[
Print["Je v tolerančnem območju = ",tol];
Print["-----------"];
Return[Sac+Scb],
Return[Adapt2[a,c,tol/2]+Adapt2[c,b,tol/2]]];];
f[x_]=1/x2;
a=1.0;
b=100.0;
X={a,b};
val=Adapt2[a,b,10-6];
X=Sort[X];
Print["f[x] = ",f[x]];
Print[""];
" "b, f x , " x
", val
a
Print[
];
Print[""];
Print["Točke na abcisi {xk} za interval [xk-1,xk] s Simpsonovim pravilom"];
xk
Print[" x k 1 f[x]x"," ","(xk-xk-1)/6(f[xk-1]+4f[(xk-1+xk )/2]+f[xk])"];
Print["kjer so točke"];
Print["{xk} = ",X];
Print["\n"];
tol1=0.001;
val1=Adapt[a,b,tol1]
tol2=0.00001;
val2=Adapt[a,b,tol2]
tol3=0.0000001;
val3=Adapt[a,b,tol3]
Print[""]
b
1
2
x
val4= a x
Print[""]
Print["\n"];
Needs["Graphics`FilledPlot`"];
Needs["Graphics`Colors`"];
Žiga Gosar
Stran 5/49
Seminar: Numerične metode
X=Sort[X];
Y=f[X];
pts=Transpose[{X,Y}];
dots=ListPlot[pts,PlotStyle{Magenta, PointSize[0.01]},
DisplayFunctionIdentity];
gr=FilledPlot[f[x],{x,1,b},PlotRange{{1,10},{0,1}},PlotStyleMagenta,
FillsCyan,AxesLabel{"x","y"}, DisplayFunction$DisplayFunction];
Show[gr,dots,DisplayFunction$DisplayFunction]
Print["f[x] = ", f[x]];
Print["{xk} = ", X];
Print["Numerična vrednost integrala je ", val];
Rešitev:
y
1.0
0.8
0.6
0.4
0.2
x
2
4
Numerična vrednost integrala je
6
8
10
0.99
Integrate[x^-2,{x,1,}]
1
Rezultat:
v0 2 gR 0,990000002 11,06209474 km/s
v0 2 gR 0,990000002 6,910171633 mi/s
Rešitev v literaturi [1], str 775.
6.9450 mi/s
Žiga Gosar
Stran 6/49
Seminar: Numerične metode
Rešitev fizikalnega problema
1.4
Na telo mase m, ki je na razdalji r (r R – polmer Zemlje) od središča Zemlje deluje gravitacijska
sila
F
mM
,
r2
(χ je gravitacijska konstanta, M pa predstavlja maso Zemlje), ki da telesu pospešek enak:
a r
M
.
r2
To je diferencialna enačba gibanja telesa.
r v
r
dr
,
dt
dv dv dr dv
v.
dt dr dt dr
Ko vstavimo to v gornjo enačbo, sledi:
v
dv
M
2 ,
dr
r
vdv M r
dr
v2 M
C.
2
r
2
,
Označimo z v0 začetno hitrost (hitrost izstrelitve), to je hitrost pri r = R in vstavimo v zadnjo enačbo;
dobimo konstanto C,
C
v02 M
.
R
2
Sledi:
v2 M v02 M
.
r
R
2
2
Ker telo zapusti zemljsko gravitacijsko polje, ima pri poljubno velikem r v>0. To pomeni, da mora
biti izpolnjen pogoj:
v02 M
.
R
2
Od tu takoj dobimo iskano začetno hitrost
2 M
.
R
v0
Ker je tečni pospešek
g
M
2
R
9,81 m/s2 ,
R 6,3 106 m,
Žiga Gosar
Stran 7/49
Seminar: Numerične metode
sledi
v0 2 gR 11,1178
v0 11, 2 km/s2 .
Žiga Gosar
Stran 8/49
Seminar: Numerične metode
2 Naloga 2
2.1
Taylorjeva metoda višjega reda
Bistvo numeričnih metod je doseganje dovolj natančni aproksimacij k eksaknim rešitvam
diferencialnih enačb z minimalnim trudom. Učinkovitost aproksimacije lahko ugoravljamo na več
načinov. Eden izmed njih je sledenje lokalne napake, ki nam pove, kolikšno je odstopanje od rešitve
diferencialne enačbe, pridobljene z diferenčno enačbo po vsakem koraku aproksimacije. Diferenčno
enačbo zapišemo kot:
wi 1 wi h ti , wi ,
i 1,..., N 1
2.1
Njena lokalna napaka je:
i 1 h
yi 1 yi
ti , yi ,
h
i 1,..., N 1
Lokalna napaka Eulerjeve metode (ki je posebna oblika Taylorjeve metode z n = 1) pri i-tem koraku
za začetni problem:
y f t , y ,
je
i 1 h
a t b,
yi 1 yi
f ti , yi ,
h
ya ,
2.2
i 1,..., N 1
Kjer predstavlja yi = y(ti) eksaktno vrednost pri času ti. Napaka je lokalna, ker pomeni odstopanje pri
določenem koraku ob predpostavki, da je rešitev ob prejšnjem koraku eksaktna. Kot taka je odvisna
od diferencialne enačbe, velikosti koraka in od posameznega koraka aproksimacije. Ideja je torej
izboljšati konvergenco rešitve z višanjem stopnje n Taylorjevega polinoma.
Za začetni problem (enačba 2.2), ob predpostavki, da je rešitev diferencialne enačbe (n+1)-krat
odvedljiva, lahko zapišemo Taylorjev polinom n-te stopnje za rešitev y(t) okoli ti za oceno pri ti+ 1
kot:
y ti 1 y ti hy ti
h2
y ti
2!
hn n
hn 1 n1
y ti
y
i
n!
n 1!
2.3
y t f t , y t
Za nekatere ξi v intervalu (ti,ti+ 1). Zapišemo odvode:
y t f t , y t
y k t f k 1 t , y t
Zapisane odvode zamenjamo v (enačba), pa imamo:
y ti 1 y ti hf ti , y ti
Žiga Gosar
h2
f ti , y t i
2!
hn n1
hn1
f
ti , y t i
f n i , y i
1
!
n!
n
Stran 9/49
Seminar: Numerične metode
Taylorjeva metoda stopnje n je diferenčna metoda, uporabljena na enačbi (2.3), pri čemer
zanemarimo zadnji člen. Aproksimativno rešitev za (i+1)-vi korak torej zapišemo kot:
wi 1 wi hT n ti , wi
kjer je
T
2.2
n
ti , wi f ti , wi
h
f ti , wi
2!
hn1 n1
f
ti , wi
n!
Definicija naloge (str. 272, naloga 6d)
Podan je problem z začetnim pogojem
y
1 y
y2 , 1 t 2 ,
t2 t
1
Z eksaktno rešitvijo y t :
t
y 1 1
c) Uporavi Taylorjevo metodo četrtega reda z h = 0.05 da oproksimirate rešitev in primerjajte
rezultat z dejansko vrednostjo y.
d) Uporabi rešitve generirane v delu naloge c) in uporabi kubično Hermitovo interpolacijo za
aproksimiranje sledečih vrednosti y in jih primerjaj z dejanskimi vrednostmi.
i. y 1.052
2.3
ii. y 1.555
iii. y 1.978
Programska koda – Mathematica
(*Taylor 4.reda*)
Clear[t,y,h,f];
Dy[t_,y_]=1/t^2-y/t-y^2
D1y[t_,y_]=D[Dy[t,y],t]+D[Dy[t,y],y]*Dy[t,y] (*T2 je do sem, brez D2y in D3y*)
D2y[t_,y_]=D[D1y[t,y],t]+D[D1y[t,y],y]*Dy[t,y]
D3y[t_,y_]=D[D2y[t,y],t]+D[D2y[t,y],y]*Dy[t,y]
f[t_,y_,h_]=y+h (Dy[t,y]+D1y[t,y]h/2+D2y[t,y]h^2/6+D3y[t,y]h^3/24)
tn=1; (*spremeni*)
yn=-1; (*spremeni*)
hn=0.05;(*spremeni*)
Y={{tn,yn}};
For[i=0,i19,i++,AppendTo[Y,{tn+hn,f[tn,yn,hn]}];
{tn,yn}=Y[[-1]]]
g1=ListPlot[Y];
g2=Plot[-1/t,{t,1,2}];
Show[g1,g2];
(*Računanje vrednosti*)
t=1.0;(*spremeni za korak h*)
h=0.05;
y=w=-1;(*kopiraj rezultat*)
y+h (1/t2-y/t-y2+1/2 h (-(2/t3)+y/t2+(-(1/t)-2 y) (1/t2-y/t-y2))+1/6 h2 (6/t4-(2
y)/t3+(-(1/t)-2 y) (-(2/t3)+y/t2)+(1/t2-y/t-y2)/t2+(1/t2-y/t-y2) (1/t2+(-(1/t)-2
y)2-2 (1/t2-y/t-y2)))+1/24 h3 (-(24/t5)+(6 y)/t4+(-(1/t)-2 y) (6/t4-(2 y)/t3)+(2 ((2/t3)+y/t2))/t2-(2 (1/t2-y/t-y2))/t3+(1/t2-y/t-y2) (-(2/t3)+(2 (-(1/t)-2 y))/t2-2
Žiga Gosar
Stran 10/49
Seminar: Numerične metode
(-(2/t3)+y/t2))+(-(2/t3)+y/t2) (1/t2+(-(1/t)-2 y)2-2 (1/t2-y/t-y2))+(1/t2-y/t-y2)
(-(2/t3)+(2 (-(1/t)-2 y))/t2-2 (-(2/t3)+y/t2)-6 (-(1/t)-2 y) (1/t2-y/t-y2)+((1/t)-2 y) (1/t2+(-(1/t)-2 y)2-2 (1/t2-y/t-y2)))))
Tabela 1: Taylorjeva metoda 4. reda
t
1.00
1.05
1.10
1.15
1.20
1.25
1.30
1.35
1.40
1.45
1.50
1.55
1.60
1.65
1.70
1.75
1.80
1.85
1.90
1.95
2.00
T(4)
-1.00000000
-0.95238125
-0.90909144
-0.86956594
-0.83333422
-0.80000103
-0.76923192
-0.74074199
-0.71428706
-0.68965661
-0.66666819
-0.64516289
-0.62500167
-0.60606235
-0.58823710
-0.57143044
-0.55555749
-0.54054254
-0.52631785
-0.51282263
-0.50000218
y(t)
-1.00000000
-0.95238095
-0.90909091
-0.86956522
-0.83333333
-0.80000000
-0.76923077
-0.74074074
-0.71428571
-0.68965517
-0.66666667
-0.64516129
-0.62500000
-0.60606061
-0.58823529
-0.57142857
-0.55555556
-0.54054054
-0.52631579
-0.51282051
-0.50000000
napaka T(4)
0.00000000
0.00000030
0.00000053
0.00000073
0.00000089
0.00000103
0.00000115
0.00000125
0.00000135
0.00000144
0.00000152
0.00000160
0.00000167
0.00000174
0.00000181
0.00000187
0.00000194
0.00000200
0.00000206
0.00000212
0.00000218
Taylorjeva metoda 2. in 4. reda
-0.50
1.00
1.05
1.10
1.15
1.20
1.25
1.30
1.35
1.40
1.45
1.50
1.55
1.60
1.65
1.70
1.75
1.80
1.85
1.90
1.95
2.00
-0.55
-0.60
-0.65
y(t)
-0.70
T(4)
T(2)
-1/t
-0.75
-0.80
-0.85
-0.90
-0.95
-1.00
t
Diagram 1: Primerjava rezultatov Taylorjeve metode z eksaktno rešitvijo
Žiga Gosar
Stran 11/49
Seminar: Numerične metode
2.3.1 Kubična Hermitova interpolacija
Naloga od nas zahteva, da izračunamo aproksimativne vrednosti v točkah, ki so pozicionirane med
izračunanimi, y 1.052 , y 1.555 , y 1.978 .
V primeru, da moramo določiti aproksimacijsko vrednost točke, ki je med točkama, lahko
uporabimo Taylorjevo metodo četrtega ali drugega reda. Za določitev vrednosti med točkama
uporabimo, na Taylorjevi metodi, linearno interpolacijo. Računamo aproksimacijo za točko y(1.052),
ki je med točkama t = 1.05 in t = 1.1.
1.052 1.1
1.052 1.05
y 1.052
-0.95238125
-0.909144 0.95065
1.05 1.1
1.1 1.05
Eksaktna vrednost v točki y(1.052) = -0.950570, aproksimacija ima tako napako 0.000079.
Tabela 2: Aproksimatvne vrednosti z uporabo linearne interpolcije Taylorjevega polinoma
t
1,052
1,555
1,978
T(4)
-0.950650
-0.643147
-0.505643
y(t)
-0.950570
-0.643087
-0.505561
napaka T(4)
0.000079
0.000060
0.000082
Za boljšo aproksimacijo vrednosti v točki y(1.052), uporabimo kubično Hermitovo interpolacijo. To
od nas zahteva aproksimacijo v točkah y'(1.05) ,y'(1.1) in aproksimacijo vrednosti v y(1.05) in
y(1.1).
y 1.05
in
y 1.1
y 1.05
1
2
y 1.05 0.90702920
2
1.05
1.05
y 1.1
1
2
y 1.1 0.82644580 .
2
1.1
1.1
Podčtrane rezultate smo dobili s pomočjo podanih podatkov, ostale rezultate pa dobimo s pomočjo
formule (glej tabelo ).
Tabela 3: Računanje po kubični Hermitovi interpolaciji
z
z0 x0
f[z]
Prve razlike
f z0 f x0
Druge razlike
Tretje razlike
f z0 , z1 f x0
z1 x0
f z ,z f z ,z
f z0 , z1 , z2 1 2 0 1
z2 z0
f z1 f x0
f z1 , z2
Žiga Gosar
f z2 f z1
z2 z1
f z0 , z1 , z2 , z3
f z1 , z2 , z3 f z0 , z1 , z2
z3 z0
Stran 12/49
Seminar: Numerične metode
f z2 f x1
z2 x1
f z1 , z2 , z3
f z2 , z3 f z1 , z2
z3 z1
f z2 , z3 f x1
f z3 f x1
z3 x1
Tabela 4: Primer računanja kubične Hermitove interpolacije
z
1.05
Hamilton T(4)
f[z]
-0.95238125
Prve odvod
Druge odvod
Tretje odvod
Rezultat
0.75309168
-0.95057063
0.90702920
1.05
-0.95238125
-0.82466129
0.86579613
1.10
-0.90909144
1.10
-0.90909144
-0.78700671
0.82644580
y 1.052T (4) 0.95238 t 1.05 0.90702 t 1.05 0.82466 t 1.05 t 1.1 0.75309
Kubični Hermitov polinom ima tako obliko:
y 1.052T (4) 0.95057063
2
2
Tabela 5: Aproksimativne vrednosti kubičnega Hermitovega polinoma
t
1,052
1,555
1,978
Žiga Gosar
Hermite(T(4))
-0.9505706
-0.6430884
-0.5055633
y(t)
-0.9505703
-0.6430868
-0.5055612
napaka H(T(4))
0.0000003
0.0000016
0.0000021
Stran 13/49
Seminar: Numerične metode
3 Naloga 3
3.1
Adaptivna ocena koraka, kontrola napake in Runge-Kutta-Fehlberg-ova metoda
Aproksimacija je lahko bolj učinkovita, če uporabljamo spremenljivo velikost koraka, vendar je
vpeljava take izboljšave lahko komplicirana. Vendar pa take aproksimacije ob spreminjanju velikosti
koraka vključujejo tudi oceno lokalnih napak brez potrebe računanja njihovih aproksimacij v obliki
višjih odvodov funkcije. Take aproksimacije niso uporabne le za aproksimativno integriranje, temveč
tudi za aproksimativno reševanje začetnih problemov, saj omogočajo sprotno kontrolo napake.
Diferenčna metoda:
wi 1 wi hi ti , wi , hi ,
i 0,1,
, N 1
Ki aproksimira rešitev začetnega problema:
y f t , y ,
a t b,
ya
Pri neki prednastavljeni toleranci ε > 0 in minimalnem številu delitvenih točk zagotavlja, da globalna
napaka |y(ti) - wi| nikoli ne preseže ε. Minimalno število delitvenih točk je pogojeno s spreminjanjem
razdalje med njimi.
Zapišemo aproksimacijo po Taylorjevi metodi reda n:
wi 1 wi hi ti , wi , h
z lokalno napako i 1 h O hn in aproksimacijo po Taylorjevi metodi reda (n+1):
wi 1 wi hi ti , wi , h
z lokalno napako i 1 h O hn1 . Predpostavimo wi y ti wi , lahko izpeljemo oceno lokalne
napake aproksimacije reda n:
i 1 h
1
wi 1 wi 1
h
Cilj je držati to lokalno napako v določenih mejah. To storimo z vpeljavo parametra K, ki je
noedvisen od koraka h, tako da je:
i 1 h Khn
Pri čemer lahko pri novem koraku velikosti qh ob uporabi še obeh prvotnih aproksimacij n-tega in
(n+1)-ega reda zapištemo:
i 1 qh
qn
wi 1 wi 1
h
Sedaj lahko zapišemo odvisnost q in prednastavljene tolerance ε.
h
q
wi 1 wi 1
1n
Metoda Runge-Kutta-Fehlgerg uporablja to neenakost, pri čemer je za oceno lokalne napake 4.
reda:
Žiga Gosar
Stran 14/49
Seminar: Numerične metode
wi 1 wi
25
1408
2197
1
k1
k3
k4 k5
216
2565
4104
5
Uporabljena lokalno napako 5. reda:
wi 1 wi
16
6656
28561
9
2
k1
k3
k4 k5 k6
135
12825
56430
50
55
Koeficienti k1,…,k6 so enaki:
k1 hf ti , wi
h
1
k2 hf ti , wi k1
4
4
3h
3
9
k3 hf ti , wi k1 k2
8
32
32
12h
1932
7200
7296
k4 hf ti
, wi
k1
k2
k3
13
2197
2197
2197
439
3680
845
k5 hf ti h, wi
k1 8k2
k3
k4
216
513
4104
h
8
3544
1859
11
k6 hf ti , wi k1 2k2
k3
k4 k4
2
27
2565
4104
40
Vrednost q je potrebna za določevanje primernosti začetne izbire koraka h v i-ti iteraciji in s tem
pogojuje ponovni izračun z uporabo koraka qh. Potrebna je tudi za napoved začetnega koraka h pri
(i+1)-ni iteraciji.
3.2
Definicija naloge (str. 288, naloga 3d)
Z uporabo Runge-Kutta-Fehlberg-ove metode s toleranco TOL= 10-4, hmax=0.5 in hmin=0.05 izpiši
tabelo funkcije z začetnimi pogoji problema. Dobljene rezultate metode primerjaj z eksaktnimi
vrednostmi.
d) y t 2t
3.3
3
y
3
ty ,
0t 2,
1
y 0 ;
3
eksaktn rešitev y t 3 2t 6e
2
t2
1
2
Programska koda – Mathematica
(*RUNGE-KUTTA-FEHLBERGOV ALGORITEM*)
F[t_,y_]:=(t+2*t^3)*y^3-t*y; (*enačba funkcije*)
a=0 ;
(*levi del neenačbe*)
b=2;
(*desni del neenačbe*)
=1/3;
(*začetna vrednost*)
tol=10^(-6);
(*napaka*)
hmin=0.05;
(*najmanjša vrednost koraka*)
hmax=0.5;
(*največja vrednost koraka*)
Žiga Gosar
Stran 15/49
Seminar: Numerične metode
(*pogoj neenačbe*)
If[ab,Input["Leva vrednost mora biti nizja od desne vrednosti neenacbe\n
Pritisni 1 [enter] za nadaljevanje\n"],OK=1;];
(*pogoj podajanja napake*)
If[tol0,Input["Tolerancno obmocje mora biti pozitivno\n
Pritisni 1 [enter] za nadaljevanje\n"],OK=1;];
(*pogoj podajanja koraka*)
If[hmin<hmax&&hmin>0,OK=1,Input["Minimalna razdalja mora biti pozitivno, realno,
stevilo in manjsa kot maksimalna razdalja, hmax\n
Pritisni 1 [enter] za nadaljevanje\n"];];
(*izpis rezultata*)
If[OK1,FLAG=Input["Izberi izpis rezultatov\n
1. Ekran\n
2. Datoteka\n
Enter 1 or 2\n"];
If[FLAG2,NAME=InputString["Podaj ime datoteke\n
Primer:
output.dta\n"];
OUP=OpenWrite[NAME,FormatTypeOutputForm],OUP="stdout";];
Write[OUP,"Runge-Kutta-Fehlbergova metoda"];
Write[OUP,"t(i)
w(i)
h
R"];
(*Korak 1*)
H=hmax;
t=a;
W=;
Write[OUP,t,"
OK=1;
",N[W,9],"
0
0
"];
(*Korak 2 in 3*)
While[t<b&&OK1,K1=H*F[t,W];
K2=H*F[t+H/4,W+K1/4];
K3=H*F[t+3*H/8,W+(3*K1+9*K2)/32];
K4=H*F[t+12*H/13,W+(1932*K1-7200*K2+7296*K3)/2197];
K5=H*F[t+H,W+439*K1/216-8*K2+3680*K3/513-845*K4/4104];
K6=H*F[t+H/2,W-8*K1/27+2*K2-3544*K3/2565+1859*K4/4104-11*K5/40];
(*Korak 4*)
R=Abs[K1/360-128*K3/4275-2197*K4/75240.0+K5/50+2*K6/55]/H;
(*Korak 5*)
If[Rtol,
(*Korak 6-Aproksimacija*)
t=t+H;
W=W+25*K1/216+1408*K3/2565+2197*K4/4104-K5/5;
(*Korak 7*)
Write[OUP,N[t,9],"
",N[W,9],"
",N[H,9],"
",N[R,9]];];
(*Korak 8*)
If[R>1.0 10^-20,=.84*Exp[0.25*Log[tol/R]],=10.0;];
(*Korak 9-Racunaj novi H*)
If[0.1,H=.1*H,If[4,H=4.0*H,H=*H;];];
(*Korak 10*)
If[H>hmax,H=hmax;];
(*Korak 11*)
If[H<hmin,OK=0,If[t+H>b,If[Abs[b-t]<tol,t=b,H=b-t;];];];];
Žiga Gosar
Stran 16/49
Seminar: Numerične metode
If[OK0,Write[OUP,"Minimalni korak (h) prevelik\n"];];
(*Korak 12-Proces je končan*)
If[OUP"OutputStream[",NAME," 3]",Print["Datoteka: ",NAME," narejena
uspesno\n"];
Close[OUP]];];
3.3.1.1 Rešitev
Runge-Kutta-Fehlbergova metoda
"t(i)
w(i)
h
R"
0
0.398605
0.333333333
0.31082
0
0.398605
0
4.24957×10-7
0.683726
0.272057
0.285121
4.87189×10-7
0.970397
0.222119
0.286671
4.58196×10-7
1.26308
0.167198
0.292685
4.26611×10-7
1.56729
0.113308
0.304209
5.27336×10-7
1.73331
0.0876899
0.166017
3.90042×10-7
1.90977
0.0644823
0.176463
9.89429×10-7
2.
0.0543454
0.0902302
9.43252×10-8
Žiga Gosar
Stran 17/49
Seminar: Numerične metode
4 Naloga 4
4.1
Numerično reševanje diferencialnih enačb
, a t b
Diferencialne enačbe višjega reda
y
m
t
f t , y, y... y
m1
z začetnimi pogoji y a 1 , y a 2 ,..., y
enačb prvega reda.
m1
Naj bo u1 t y t , u2 t y t ,..., um t y
a m
m1
(4.1)
lahko prevedemo na sistem diferencialnih
t , kar privede do
sistema diferencialnih enačb
prvega reda, in sicer:
du1 dy
u2
dt
dt
du2 dy
u3
dt
dt
dum1 dy m2
um
dt
dt
in
dum dy m1
m
m1
y f t , y, y... y f t , u1 , u2 ,
dt
dt
, um
z začetnimi pogoji
u1 a y a 1 , u2 a y a 2 ,..., um a y m1 a m
Sedaj lahko uporabimo metodo Runge-Kutta za reševanje m-tih diferencialnih enačb z obliko
du1
f1 t , u1 , u2 ,
dt
du2
f2 t , u1 , u2 ,
dt
dum
fm t , u1 , u2 ,
dt
, um
, um
, um
za a t b z začetnimi pogoji definiranih v izrazih (4.1). Cilj te metode je poiskati m funkcij
u1,u2,…,um, katere zadovoljijo vsako diferencialno enačbo skupaj z vsemi začetnimi pogoji.
Razdelimo interval [a,b] na N podintervalov z mrežo točk tj= a+ jh za vsak j= 0,1…N in h= (b-a)/N.
Naj bo wi,j aproksimacija funkcije ui(tj) za vsak j=0,1,…,N in i=1,2,…,m. Definirajmo začetne pogoje
kot
Žiga Gosar
Stran 18/49
Seminar: Numerične metode
w1,0 1 , w2,0 2 ,..., wm,0 m
k1,i h fi t j , w1, j , w2, j ,..., wm, j za vsak i 1, 2,..., m
Aproksimacijo funkcij ui preko vseh mrežnih točk rešujemo po naslednjem postopku:
1
1
1
1
k2,i h fi t j , w1, j k1,1 , w2, j k1,2 ,..., wm, j k1,m za vsak i 1, 2,..., m
2
2
2
2
1
1
1
1
k3,i h fi t j , w1, j k2,1 , w2, j k2,2 ,..., wm, j k2,m za vsak i 1, 2,..., m
2
2
2
2
k4,i h fi t j h, w1, j k3,1 , w2, j k3,2 ,..., wm, j k1,m za vsak i 1, 2,..., m
in še
wi , j 1 wi , j
1
k1,i 2k2,i 2k3,i k4,i za vsak i 1, 2,..., m
6
Pri tem poteka j=0,1,…,N ter pazimo, da za računanje wi,j+ 1 že poznamo v prejšnji točki
aproksimirano vrednost wi,j.
4.2
Definicija naloge (str 323, naloga 6)
Nihalo na sliki 4-1 je dolžine 2 čevlja. Pri tem je težnostni pospešek g = 9.81 m/s2. S korakom h =
0,1 sekunde, primerjajte kot θ za naslednja začetna problema:
a)
b)
d 2 g
sin 0 ,
dt 2 L
d 2 g
0,
dt 2 L
0
0
6
6
,
,
0 0 ,
0 0 ,
pri času t = 0, 1 in 2 s.
4.3
Programska koda – Mathematica
a) del naloge
(* Sistem dveh diferencialnih enacb *)
f1[w2_]:=w2; (*w2 - kotna hitrost*)
f2[t_,w1_,w2_]:=-g/L*Sin[w1];
α1=N[Pi/6];
α2=0;
g=9.81;
L=2;
a=0;b=2;h=0.1;
n=(b-a)/h;
Žiga Gosar
Stran 19/49
Seminar: Numerične metode
t=a;
(* zacetni pogoji *)
w1=α1;
w2=α2;
Print[Row[{t,w1,w2},","]]
Do[
{
w1=w1,
w2=w2,
K11=h f1[w2],
K12=h f2[t,w1,w2],
K21=h f1[w2+ K12/2],
K22=h f2[t+h/2,w1+K11/2,w2+K12/2],
K31=h f1[w2+ K22/2],
K32=h f2[t+h/2,w1+K21/2,w2+K22/2],
K41=h f1[w2+ K32],
K42=h f2[t+h,w1+K31,w2+K32],
w1=w1+(K11+2 K21+2 K31+K41)/6,
w2=w2+(K12+2 K22+2 K32+K42)/6,
t=a+i h;
Print[Row[{t,w1,w2},","]]},{i,1,n}]
b) del naloge
Ponovimo postopek iz a) dela naloge, le da upoštevamo:
f2[t_,w1_,w2_]:=-g/L*w1
4.3.1.1 Rešitev
Tabela 6: Rešitev z metodo Runge-Kutta
Čas
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
1.1
1.2
Žiga Gosar
Primer a
Kot (sin()) [°] kotna hitrost
0.5235990
0.0000000
0.5113800
-0.2435090
0.4752440
-0.4766050
0.4167520
-0.6889350
0.3384870
-0.8704270
0.2440090
-1.0117700
0.1377380
-1.1051600
0.0247662
-1.1451100
-0.0894133
-1.1292000
-0.1992350
-1.0584000
-0.2993980
-0.9369440
-0.3851600
-0.7717320
-0.4525730
-0.5715260
Primer b
Kot () [°]
kotna hitrost napaka upoštevanja
0.5235990
0.0000000
0.00000
0.5108100
-0.2547260
0.00057
0.4730690
-0.4970080
0.00217
0.4122200
-0.7150120
0.00453
0.3312350
-0.8980890
0.00725
0.2340700
-1.0373000
0.00994
0.1254710
-1.1258300
0.01227
0.0107437
-1.1593800
0.01402
-0.1045090
-1.1362800
0.01510
-0.2146560
-1.0576900
0.01542
-0.9274280
0.01492
-0.3143170
-0.3986240
-0.7518630
0.01346
-0.4634600
-0.5395720
0.01089
Stran 20/49
Seminar: Numerične metode
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2.0
-0.4986230
-0.5213040
-0.5196450
-0.4937160
-0.4446300
-0.3745310
-0.2865660
-0.1848020
-0.3461450
-0.1058610
0.1389240
0.3777950
0.6003590
0.7963790
0.9561400
1.0710800
-0.5056560
-0.5231520
-0.5150930
-0.4818730
-0.4251140
-0.3475900
-0.2530870
-0.1462210
-0.3009250
-0.0475782
0.2080920
0.4535970
0.6769450
0.8672240
1.0151400
1.1134700
0.00703
0.00185
-0.00455
-0.01184
-0.01952
-0.02694
-0.03348
-0.03858
Napaka
0.02
0.01
napaka
0.00
-0.01
0.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
1.6
1.8
2.0
-0.02
-0.03
-0.04
-0.05
čas [s]
Diagram 2: Razlika med lineariziranim in nelineariziranim kotom
Žiga Gosar
Stran 21/49
Seminar: Numerične metode
Nihalo - upoštevanje kota
0.60
0.40
kot [°]
0.20
0.00
0.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
1.6
1.8
2.0
-0.20
-0.40
-0.60
čas [s]
RK sin(theta)
RK (theta)
Diagram 3: Razlika med linearizirano in nelinearizirano diferencialno enačbo
Nihalo - kotna hitrost
1.5
1.0
kotna hitrost
0.5
0.0
0.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
1.6
1.8
2.0
-0.5
-1.0
-1.5
čas [s]
RK sin(theta)
RK (theta)
Diagram 4: Razlika kotnih hitrosti med linearizirano in nelinearizirano diferencialno enačbo
Žiga Gosar
Stran 22/49
Seminar: Numerične metode
5 Naloga 5
Teorija aproksimacij in Čebišev polinom
5.1
Množica ortogonalnih polinomov na [-1,1] z utežno funkcijo x
polinomi1. Lahko jo definiramo s pomočjo eksplicitne formule
Tn x cos n arccos x ,
1
1 x2
se imenuje Čebiševi
n 0,1,..., N
Upoštevamo enačbo:
cos n 1 cos n 1 2cos cos n ,
n
Sklepamo, da so Tn polinomi stopnje n. Z upoštevanjem superpozicije arccos x , dobimo
T x T x
1
1 i
j
dx
1 x2
cos i cos j d
0
1
cos i cos j d ij .
2
2
Od tu nepostredno sledi ortogonalnost Čebiševih polinomov.
Slika 5-1: Čebiševi polinomi T5 in T12
Čebišev polinom ima sledeče lastnosti:
n 0,1,...
Čebišev polinom Tn na intervalu [-1,1] n različnih ničtih točk
Čebišev polinom Tn na intervalu [-1,1] ima n+1 različnih točk
1
Tn x 1 , x 1,1 ,
2k 1
xk cos
, k 1,..., n
2n
k cos
k
,
n
k 0,1,..., n
T0 x 1 , T1 x x za n 1, 2,... velja rekurzivna funkcija
v katerih ima globalne maksimume in minimume
Oznaka polinoma »T« pride iz angleškega prevoda priimka Čebišev: Tchebycheff
Žiga Gosar
Stran 23/49
Tn1 x 2 xTn x Tn1 x ,
5.2
Seminar: Numerične metode
n 1, 2,...
Definicija naloge (str. 516, naloga 1c)
Uporabi ničle T3 za izdelavo interpolacijskega polinoma druge stopnje za dano funkcijo na intervalu
[-1,1].
f x ln x 2
5.3
Programska koda – Mathematica
(*ČBEIŠEV POLINOM*)
f[x_]=Log[x+2];
n=2;
(*stopnja polinoma*)
tk_=Cos[((2 n +1-2 k))/(2 n +2)]; (*ničle*)
XY=Table[N[{tk,f[tk]}],{k,0,n}];
(*izračun ničel*)
P2[x_]=Expand[InterpolatingPolynomial[XY,x]];
Needs["Graphics`Colors`"];
dots=ListPlot[XY,PlotStyle{Red,PointSize[0.02]},DisplayFunctionIdentity];
gr1=Plot[{f[x],P2[x]},{x,- 1.5,1.5},
PlotStyle{Red,Blue},
DisplayFunctionIdentity];
Show[gr1,dots,PlotRange{{-1.0,1.0},{0.0,1.2}},
AxesLabel{x,y},DisplayFunction$DisplayFunction]
Print["f[x] = ",f[x]];
Print["Čebiševe ničle = ", XY];
Print["Interval aproksimacije je v mejah [-1.0,1.0]."];
Print["P2[x] = ", P2[x]];
(*Napaka Čebiševeka interpolacijskega polinoma P2*)
e2[x_]=f[x]-P2[x];
Plot[e2[x],{x,-1.0,1.0},PlotStyle{Blue},AxesLabel{x,y}]
(*Print["f[x] = ",f[x]];*)
(*Print["P2[x] = ",P2[x]];*)
Print["Interval aproksimacije je v mejah [-1.0,1.0]."];
Print["Graf napake e2[x]=f[x]-P2[x]"];
extrema1=FindMinimum[e2[x],{x,0.5}];
min1=extrema1[[1]];
extrema2=-FindMinimum[-e2[x],{x,-0.5}];
max1=extrema2[[1]];
extrema={max1,min1};
maxerr2=Max[Abs[{max1,min1}]];
Print["Ekstrema za e2[x]; ", extrema];
Print["|e2[x]| ", maxerr2];
Žiga Gosar
Stran 24/49
Seminar: Numerične metode
5.3.1.1 Rešitev
y
1.2
1.0
0.8
0.6
0.4
0.2
x
1.0
f[x] =
0.5
0.5
1.0
Log[2+x]
Čebiševe točke =
{{-0.866025,0.125729},{0.,0.693147},{0.866025,1.05293}}
Interval aproksimacije je v mejah [-1.0,1.0].
P2[x] = 0.693147 + 0.535318 x - 0.138426 x2
y
0.015
0.010
0.005
x
1.0
0.5
0.5
1.0
0.005
0.010
0.015
0.020
Interval aproksimacije je v mejah [-1.0,1.0].
Graf napake e2[x]=f[x]-P2[x]
Ekstrema za e2[x];
|e2[x]|
Žiga Gosar
{0.0147259,-0.00995048}
0.0147259
Stran 25/49
Seminar: Numerične metode
Tabela 7: Aproksimativne vrednosti Chebishevega polinoma
x
-1
-0.9
-0.8
-0.7
-0.6
-0.5
-0.4
-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
P2[x] =
f(x)
0.00000000
0.09531018
0.18232156
0.26236426
0.33647224
0.40546511
0.47000363
0.53062825
0.58778666
0.64185389
0.69314718
0.74193734
0.78845736
0.83290912
0.87546874
0.91629073
0.95551145
0.99325177
1.02961942
1.06471074
1.09861229
f(x)aproks
0.01940327
0.09923603
0.17630025
0.25059596
0.32212314
0.39088179
0.45687192
0.52009352
0.58054660
0.63823115
0.69314718
0.74529468
0.79467366
0.84128412
0.88512605
0.92619945
0.96450433
1.00004069
1.03280852
1.06280782
1.09003860
f(x) - f(x)aproks
0.01940327
0.00392585
0.00602130
0.01176831
0.01434910
0.01472590
0.01313171
0.01053473
0.00724007
0.00362273
0.00000000
0.00335734
0.00621630
0.00837499
0.00965731
0.00990872
0.00899289
0.00678891
0.00318910
0.00190292
0.00857369
0.693147 + 0.535318 x - 0.138426 x2
Interpolacijski polinom 2. stopnje (rešitev v literaturi [1]):
P2 x 1.052926 0.4154370 x 0.8660254 0.1384262x x 0.8660254
P2 x 0.693147 0.535318x 0.138426 x2
Žiga Gosar
Stran 26/49
Seminar: Numerične metode
6 Naloga 6
6.1
Teorija paproksimacij in Fast Foutier Transformacija
Vrednosti obravnavanih funkcij lahko aproksimiramo tudi z uporabo sinusnih in kosinusnih funkcij z
uporabo takoimenovane Fourier-ove vrste. Aproksimacijo k diskretno podanim točkam
x , y
2 m1
j
j
j 0
Sn ( x)
funkcij f xj y j , kjer so xj j m in je f C , , zapišemo v obliki:
n 1
a0
a n cos nx a k cos kx bk sin kx
2
k 1
y
Sn x j
Koeficiente ak in bk, ki minimizirajo napako:
E (a o ,..., a n , b1 ,..., bn1 )
2 m1
j 0
j
2
Zapišemo kot:
1 2 m1
y j cos kxj ,
m j 0
ak
1 2 m1
y j sin kxj ,
m j 0
bk
k 0,1, 2,..., n
(6.1)
k 1, 2,..., n 1
(6.2)
Limito Sn(x), ko gre n imenujemo Fourier-jeva vrsta funkcije f.
V primeru, ko izvajamo interpolacijo skozi diskretno podane točke
zapišemo interpolacijski polinom kot:
Sm x
x , y
a 0 a m cos mx m1
a k cos kx bk sin kx
2
k 1
2 m1
j
j
j 0
funkcije f,
(6.3)
Koeficienti a k in bk pa so enaki kot (6.1) in (6.2). Računanje trigonometrijske interpolacije po
enačbah (6.2) in (6.3) imenujemo direktno reševanje, pri čemer je potrebno izvesti približno (2m)2
množenj in (2m)2 seštevanj.
Druga metoda izračuna trigonometrijskega interpolacijskega polinoma potrebuje ob ustrezni izbiri m
le O(mlog2m) množenj in O(mlog2m) seštevanj. To metodo imenujemo Cooley-Tukey metoda ali
hitra Fourier-jeva transformacija. Pri tej metodi namesto računanja konstant a k in bk računamo
kompleksne koeficiente v:
1 2 m1 ikx
ck e ,
m j 0
Kjer so:
ck
ye
2 m1
j 0
j
ik j m
k 1, 2,..., n 1
,
k 0,1,..., 2m 1
Iz konstant ck izračunamo koeficiente a k in bk s pomočjo Euler-jeve relacije:
eiz cos z i sin z ,
Žiga Gosar
k 0,1,..., m
Stran 27/49
Seminar: Numerične metode
Za vsak k = 0,1,…,m tako izpeljemo:
a k ibk
1
k
m
ck .
Če upoštevamo relacijo:
eni 1 ,
n
lahko za vsak n vpeljemo redukcijo potrebnih izračunov. Ker je:
ck ck M
in je:
y e 1 e
2 m1
j 0
ik j m
ij
j
2, če je j sodo
1 e ij
0, če je j liho
je zato:
ck ck M 2 y2e
m1
j 0
ik j m 2
ck ck M 2eik m y2 j 1e
m1
j 0
(6.4)
ik j m 2
(6.5)
Iz enačb (6.4) in (6.5) lahko pridobimo vse koeficiente ck. Namesto(2m)2 kompleksnih množenj je
potrevno po enačbah (6.4) in (6.5) izvesti le 2m2+m množenj. Tehniko reduksije lahko vpeljemo rkrat, kjer je r = p+1 in je m = 2p. Zreducirano število kompleksnih množenj je torej enako:
m2
mr
2r 2
6.2
Definicija naloge (str. 547, naloga 5c)
3c) Uporabi FFT algoritem za izračun trigonometričnega interpolacijskega polinoma 4. stopnje na
intervalu [-π, π] za sledečo funkcijo:
f x cos x 2sin x
5c) Uporabi aproksimacijo dobljeno v nalogi 3 za aproksimiranje sledečeka integrala in primerjaj
rezultata z dejansko vrednostjo.
cos x 2sin xdx
6.3
Programska koda – Mathematica
(*FAST FOURIER ALGORITEM*)
(*računaš v intervalu [-Pi,Pi]*)
Žiga Gosar
Stran 28/49
Seminar: Numerične metode
F[x_]:=Cos[Pi*x]-2*Sin[Pi*x];
m=4;
(*stopnja trigonometričnega interpolacijskega polinoma*)
n=2*m;
If[n>0,For[JJ=1,JJn,JJ++,Z=-Pi+(JJ-1)*Pi/m;
Y[JJ-1]=F[Z];];
OK=1,Input["Število mora biti pozitivno\n
Pritisni 1 [enter] za nadaljevanje\n"];];
If[OK1,FLAG=Input["Izberi vrsto izpisa rezulta\n
1. Ekran\n
2. V datoteko\n
Vnesi 1 ali 2\n"];
If[FLAG2,NAME=InputString["Podaj ime datoteke\n
Priemer:
output.dta\n"];
OUP=OpenWrite[NAME,FormatTypeOutputForm],OUP="stdout"];
Write[OUP,"FAST FOURIER TRANSFORMACIJA\n"];
TW=Log[2.0];
(*korak 1*)(*zamenjam: N2 za m*)
N2=m;
(*korak 2*)
For[JJ=1,JJn,JJ++,c[JJ-1]=Y[JJ-1];];
Z=n;
p=N[Round[Log[n]/TW]];
q=p-1;
YY=2*Pi*I/n;
=Exp[YY];
(*korak 3*)
For[JJ=1,JJN2,JJ++,X=1;
YY=1;
For[J=1,JJJ,J++,YY=X*;
X=YY;];
[JJ-1]=X;
[N2+JJ-1]=-X;];
(*korak 4*)
K=0;
[-1]=1;
(*korak 5*)
For[L=1,Lp,L++,
(*korak 6*)
While[K<n-1,
(*korak 7*)
For[JJ=1,JJN2,JJ++,
(*korak 8*)
Z=Exp[q*TW];
M1=Round[Z];
M1=Floor[K/M1];
(*IBR - bit reversal*)
R1=M1;
S=0;
For[RR=1,RRp,RR++,R2=Floor[R1/2];
S=2*S+R1-2*R2;
R1=R2;];
Žiga Gosar
Stran 29/49
Seminar: Numerične metode
NP=S;
(*T1 je eta*)
T1=c[K+N2];
(*korak 9*)
If[NP0,X=T1;
T1=X*[NP-1];];
c[K+N2]=c[K]-T1;
c[K]=c[K]+T1;
(*korak 10*)
K=K+1;];
(*korak 12*)
K=K+N2;];
K=0;
N2=Floor[N2/2];
q=q-1;];
(*korak 13*)
While[K<n-1,
(*korak 14*)
R1=K;
JJ=0;
For[RR=1,RRp,RR++,R2=Floor[R1/2];
JJ=2*JJ+R1-2*R2;
R1=R2;];
(*korak 15*)
If[JJ>K,T3=c[K];
c[K]=c[JJ];
c[JJ]=T3;];
(*korak 16*)
K=K+1;];
(*koraka 17 in 18*)
Write[OUP,"Koeficienti c(0), ... , c(2m-1)"];
For[JJ=1,JJn,JJ++,
YY=-(JJ-1)*Pi*I;
X=Exp[YY];
YY=X*c[JJ-1];
c[JJ-1]=N[YY/(0.5*n)];
K=JJ-1;
Write[OUP,K,"
",c[JJ-1]];];
Write[OUP,"\n"];
Write[OUP,"Koeficienti a(0), ... , a(m)"];
For[JJ=1,JJm+1,JJ++,
Write[OUP,N[Re[c[JJ-1]],9]];];
Write[OUP,"\n"];
Write[OUP,"Koeficienti b(1), ... , b(m-1)"];
For[JJ=2,JJm,JJ++,
Write[OUP,N[Im[c[JJ-1]],9]];];
(*korak 19*)
If[OUP"Izhod[",NAME," 3]",Print["Izhodna datoteka: ",NAME," je uspešno
narejena.\n"];
Close[OUP];];];
6.3.1.1 Rešitev:
FAST FOURIER TRANSFORM
Žiga Gosar
Stran 30/49
Seminar: Numerične metode
Koeficienti c(0), ... , c(2m-1)
0
1
2
-0.126426
0.260272 -0.102219
-0.301114+0.275406
3
1.12137 -2.05295
4
0.0458965
5
6
7
1.12137 +2.05295
-0.301114-0.275406
0.260272 +0.102219
Koeficienti a(0), ... , a(m)
-0.126426
0.260272
-0.301114
1.12137
0.0458965
Koeficienti b(1), ... , b(m-1)
-0.102219
0.275406
-2.05295
6.3.1.2 Rešitev
3c) [1]
P x3c 0.1264264 0.2602724 cos x 0.3011140 cos 2 x 1.121372 cos 3 x
0.04589648 cos 4 x 0.102219 sin x 0.2754062 sin 2 x 2.052955 sin 3 x
3c) izračunano s pomočjo spisanega programa
P x5c 0.126426 0.260272 cos x 0.301114 cos 2 x 1.12137 cos 3 x
0.0458965 cos 4 x 0.102219 sin x 0.275406 sin 2 x 2.05295 sin 3 x
Žiga Gosar
Stran 31/49
Seminar: Numerične metode
FFT
2.5
1.5
0.5
-2.2
-1.2
-0.2
-0.5
y
-3.2
0.8
1.8
2.8
-1.5
-2.5
-3.5
x - interval od -PI do PI
Naloga 3c
Naloga 5c
napaka
Naloga 5c)
Rešitev naloge 3c)
NIntegrate[-0.1264264+0.26027239 Cos[x]-0.301113969 Cos[2 x]+1.1213715 Cos[3
x]+0.045896473 Cos[4 x]-0.10221901 Sin[x]+0.27540621 Sin[2 x]-2.052954949 Sin[3
x],{x,-Pi,Pi}]
-0.79436
Eksaktna vrednost integrala
cos x 2sin xdx
NIntegrate[Cos[Pi x]-2 Sin[Pi x], {x,-Pi,Pi}]
-0.273938
Rešitev naloge 5c se povsem ujema z rešitvijo podano v [1] na strani 811.
Žiga Gosar
Stran 32/49
Seminar: Numerične metode
7 Naloga 7
7.1
QR algoritem
Za računanje lastnih vrednosti simetrične realne matrike A reda n x n je zelo znan QR algoritem.
Matriko A je mogoče razcepiti na produkt ortogonalne matrike Q in zgornje trikotne matrike R,
A=QR. Pomnožimo enačbo z leve s Q-1=Q+t in z desne s Q. Dobimo QtAQ=RQ. Torej sta matriki
podobni, zato imata enake lastne vrednosti. Na tej lastnosti temelji QR algoritem za računanje lastnih
vrednosti matrike [2].
Naj bo A realna simetrična matrika, označimo jo z A1. Če želimo izračunati njene lastne vrednosti, jo
razcepimo v produkt Q1R1. Nato izračunamo A2=R1Q1. Zopet razcepimo matriko A2 v produkt
Q2R2 in izračunamo A3=R2Q2 itd.
7.1.1 QR iteracija
S QR iteracijo na ekonomičen način izračunamo vse lastne vrednosti matrike. Za redukcijo na
tridiagonalno obliko zaradi simetrije porabimo približno polovico toliko operacij kot za nesimetrično
matriko, a to še vedno pomeni O(n3) operacij. Med samo QR iteracijo je razlika večja. Zaradi
tridiagonalne oblike lahko en korak QR iteracije izvedemo z zahtevnostjo O(n). Pri QR iteraciji
najprej poiščemo ortogonalno matriko Q, da je T = QAQT tridiagonalna, potem pa delamo QR z
enojnim premikom:
T0 = T
k = 0, 1, . . .
izberi premik σk
Tk − σk I = QkRk (izračunaj QR razcep)
Tk+1 = RkQk + σk I
Naj bo
a1 k
k
b1
Tk
b1 k
a 2 k
b2 k
bn 2
k
a n 1
k
bn 1
k
k
bn 1
k
an
a k b k
• Wilkinsonov premik oz. dvojni premik: za σk vzamemo tisto lastno vrednost matrike nk1 n k1 ,
bn 1 a n
ki je bližja a n k .
Kako izberemo premik:
Obdiagonalne elemente postavimo na 0, kadar velja
bj k a jk a jk1
Žiga Gosar
Stran 33/49
Seminar: Numerične metode
7.2
Definicija naloge (str. 595, naloga 2d)
Z uporabo QR algoritma določi, v tolerančnem območju 10-5, vse lastne vrednosti sledeče matrike.
0
0
5 1
1 4.5 0.2
0
0 0.2
1
0.4
0 0.4
3
0
0
0
0
1
7.3
0
0
0
1
3
Programska koda – Mathematica
(*QR ALGORITEM*)
A={{5,-1,0,0,0},{-1,4.5,0.2,0,0},{0,0.2,1,-0.4,0},{0,0,-0.4,3,1},{0,0,0,1,3}};
(*Print["Podana je matrika"];*)
(*Print["A = ",MatrixForm[A]];*)
QRmetoda[A_,m0_]:=Module[{A0=N[A],A1,i,m=m0},Print["A"0," = ",
MatrixForm[Chop[A0,1.0 10-6]]]
For[i=1,i<m,i++,
{Q0,R0}= QRDecomposition[A0]; A1=R0.Transpose[Q0];
Print["A"i+1," = ", MatrixForm[Chop[A1,1.0 10-6]]];
A0=A1];
Return[A0];];
QRpremik[A_,_]:=Module[{B=N[A],A1=N[A],i,m=m0},
B=A1;
n=Length[A1];
=Table[A1[[i,i]],{i,n}];
sum=0;
For[m=n,2m,m--,
B=A1[[Range[1,m],Range[1,m]]];
i=1;
While[And[i10,Length[B]m,Abs[B[[m,m-1]]]>],
M=B[[{m-1,m},{m-1,m}]];
=Eigenvalues[M];
j=Position[Abs[- [B[[m,m]]],Min[Abs[-B[[m,m]]]]][[1,1]];
s=[[j]]; (*s=Wilkinsonov premik*)
sum=sum+s;
{Q1,R1}=QRDecomposition[B-s IdentityMatrix[m]];
Print["\n","Premik ", "s"i, " = ", s];
T
", MatrixForm Transpose Chop Q1
Print["Q"i, "
Print["R"i, " = ",MatrixForm[Chop[R1]]];
B=R1.Transpose[Q1];
];
T
Print["R"i,"Q"i , " = ", MatrixForm[Chop[B]]];
i=i+1;];
A1[[Range[1,m-1],Range[1,m-1]]]=B[[Range[1,m-1],Range[1,m-1]]];
A1[[m,m-1]]=A1[[m-1,m]]=0;
A1[[m,m]]=sum;
Print["A1 = ",MatrixForm[Chop[A1]]];];
A1[[1,1]]=sum-s+[[3-j]];
Print["\n", "Končni odgovor je:"];
Print["d = ", MatrixForm[Chop[A1]]];
Return[A1];];
d=QRpremik[A,1.0 10-6];
Žiga Gosar
Stran 34/49
Seminar: Numerične metode
(*g=QRmetoda[A,203];*)
Print["A = ",MatrixForm[A]];
Print["{i} = ", Eigenvalues[N[A]]];
Print[""];
Print["D = ",MatrixForm[Chop[d,1.0 10-6]]];
Print["{i} = ", Eigenvalues[N[d]]];
7.3.1.1 Rešitev
Končni odgovor je:
D ={{5.784, 0, 0, 0, 0},
{0, 0.8903, 0, 0, 0},
{0, 0, 3.72756, 0, 0},
{0, 0, 0, 2.07069, 0},
{0, 0, 0, 0, 4.02742}}
{i} = {5.784,4.02742,3.72756,2.07069,0.8903}
A203={{5.784, 0, 0, 0, 0},
{0, 4.02743, 0, 0, 0},
{0, 0, 3.72756, 0, 0},
{0, 0, 0, 2.07071, 0},
{0, 0, 0, 0, 0.8903}}
Eksaktna rešitev:
G={{5, -1, 0, 0, 0},{-1, 4.5, 0.2, 0, 0},{0, 0.2, 1, -0.4, 0},{0, 0, -0.4, 3,
1},{0, 0, 0, 1, 3}};
N[Eigenvalues[G]]
{5.784,4.02743,3.72756,2.07071,0.8903}
Žiga Gosar
Stran 35/49
Seminar: Numerične metode
8 Naloga 8
8.1
Kontinuitetna metoda
S kontinuitetno metodo za nelinearni sistem enačb je možno rešiti zbirko težav. Posebej za reševanje
problema v obliki
F(x)=0
ki ima neznano rešitev x*, predpostavimo, da je družina opisane težave z uporabo parametra λ, ki
prevzamejo vrednost v intervalu [0,1]. Problem z znano rešitvijo x(0) ustreza λ=0 in je problem z
neznano rešitvijo x(1)=x*, ki ustreza λ=1.
Predpostavimo da je x(0) začetna aproksimacija rešitve F(x*)=0.
G:0,1
Definiramo
z
n
n
G , x F x 1 F x -F x 0 F x 1 F x 0
(8.1)
Določili bomo različne vrednosti λ, kot rešitev enačbe
G , x 0
0 G , x F x -F x 0
Ko je λ=0, enačba preide v obliko
kjer je x(0) rešitev. Ko je λ=1 enačba preide v obliko
0 G 1, x F x
kjer je rešitev x(1)=x*.
Funkcija G s parametrom λ nam zagotavlja družino funkcij, ki lahko vodijo od znane vrednosti x(0)
do rešitve x(1)=x*. Funkcija G se imenuje homotopija med funkcijo G(0,x)=F(x)-F(x(0)) in funkcijo
G(1,x)=F(x).
Cilj kontinuitetne metode je, določiti postopek reševanja, iz znane rešitve x(0) funkcije G(0,x) do
neznane rešitve x(1)=x* X1 funkcije G(1,x)=0, ki reši F(x)=0.
Najprej predpostavimo, da je x(λ) edinstvene rešitve enačbe
G , x 0 ,
Na set
0,1
x 0 1
x
je mogoče gledati kot na krivuljo v
(8.2)
n
od x(0) do x(1)=x*, ki je
parameteriziran z λ. Kontinuitetna metoda poišče zaporedje korakov vzdolž krivulje, ki so odvisne
od
m
k 0
kjer je λ0 = 0 < λ1 < …< λm = 1.
Če sta funkciji x in G odvedljivi, potem odvajanje enačbe (8.2) v odvisnosti od λ
k
Žiga Gosar
Stran 36/49
0
G , x λ
λ
Seminar: Numerične metode
G , x λ
x
x λ .
Enačbo rešimo za x , ki je sledeče oblike
G , x λ G , x λ
.
x
x
λ
1
To je sistem diferencialnih enačb z začetnim pogojem x(0).
G , x λ F(x( ))+ 1 F(x( ))
Ker je
lahko določlimo oboje, Jakobijevo matriko
f1
f1
x x λ x x λ
2
1
f2
f2
x λ
x λ
G
x2
, x λ x1
x
fn x λ fn x λ
x1
x2
in
G , x λ
λ
f1
x λ
xn
f2
x λ
xn
J x λ
fn
x λ
xn
F(x(0)) .
Zato sistem diferencialnih enčab lahko zapišemo kot
x J x λ F x λ ,
1
0 λ 1,
z začetnim pogojem x(0).
Na splošno ima sistem diferencialnih enačb, ki jih moramo rešiti za naš kontinuitetni problem, obliko
f1 x 0
1 , x1 ,..., xn
,
x
,...,
x
f
x
0
1
2
1
2
n
J x ,..., x
1
n
.
fn x 0
n , x1 ,..., xn
Da za reševanje sistema enačb uporabimo Runge-Kutta metodo 4.reda, izberemo N>0 in h=(1-0)/N.
Interval [0,1] razdelimo v N podintervalov z mrežami točk
λj=jh,
j=0,1,…,N.
Uporabimo zapis wi,j za vsak j=0,1,…,N in i=1,…,n za označevanje približka xi(λj). Začetne pogoje
zapišemo
w1,0= x1(0),
Žiga Gosar
w2,0= x2(0),
… ,
wn,0= xn(0).
Stran 37/49
Seminar: Numerične metode
Predpostavimo, da smo w1,j, w2,j, … , wn,j, izračunali. w1,j+ 1, w2,j+ 1, … , wn,j+ 1, dobimo s pomočjo
enačb
k1,i hi j , w1, j , w2, j ,..., wn, j ,
i 1, 2,..., n ;
h
1
1
1
k2,i hi j , w1, j k1,1 , w2, j k1,2 ,..., wn, j k1,n ,
2
2
2
2
h
1
1
1
k3,i hi j , w1, j k2,1 , w2, j k2,2 ,..., wn , j k2,n ,
2
2
2
2
k4,i hi j h, w1, j k3,1 , w2, j k3,2 ,..., wn, j k3,n ,
in končno
wi , j 1 wi , j
8.2
1
k1,i 2k2,i 2k3,i k4,i ,
6
i 1, 2,..., n ;
i 1, 2,..., n ;
i 1, 2,..., n ;
i 1, 2,..., n .
Definicija naloge (str. 642, naloga 2)
Nelinearni sistem enačb
f1 x1 , x2 x12 x22 2 x2 0
f2 x1 , x2 2 x1 x22 6 0
Ima dve rešitvi, (0.625204094, 2.179355825)t in (2.10951192, -1.334532188)t. Uporabi metodo
Runge-Kutta četrtega reda z N=1 in aproksimiraj rezultat z:
i. x 0 0, 0
t
8.3
ii. x 0 1,1
t
iii. x 0 3, 2
t
Programska koda – Mathematica
(*KONTINUITETNA METODA ZA SISTEM NELINEARNIH ENAČB*)
(*enačba 1 =x1^2-x2^2+2 x2;
enačba 2 =2 x1+x2^2-6*)
n=2; (*število enačb*)
N1=4;(*število korakov*)
For[i=1,in,i++,
TEMP[i]=Input["To je Kontinuitetna metoda za sistem nelinearnih enačb.\n
Če imaš več kot 2 enačbi, program dopolni.\n
Podaj funkcijo F["<>ToString[i]<>"] v odvisnosti od x1,x2\n"];
F[i][x1_,x2_(*,x3_*)]:=Evaluate[TEMP[i]];]; (*dodajaj, če imaš več
spremenljivk oz. enačb*)
For[i=1,in,i++,
DER=D[TEMP[i],x1];(*odvod enačbe po x1*)
P[i,1][x1_,x2_(*,x3_*)]:=Evaluate[DER];(*dodajaj, če imaš več spremenljivk oz.
enačb*)
DER=D[TEMP[i],x2];
P[i,2][x1_,x2_]:=Evaluate[DER];];
If[N10,Input["Število korakov mora biti pozitivno in celo število.\n
Pritisni Enter 1 [enter] za nadaljevanje."],OK=1;];
Žiga Gosar
Stran 38/49
Seminar: Numerične metode
For[i=1,in,i++,X[i-1]=Input["Podaj začetno vrednost X("<>ToString[i]<>")"];];
If[OK1,FLAG=Input["Izberi izpis podatkov:\n
1. Ekran\n
2. Datoteka\n
Vnesi 1 ali 2"];
If[FLAG2,NAME=InputString["Input the file name\n
For example:
output.dta\n"];
OUP=OpenWrite[NAME,FormatTypeOutputForm],OUP="stdout";];
Write[OUP,"KONTINUITETNA MATODA ZA SISTEM NELINEARNIH ENAČB"];
(*korak 1*)
H=N[1.0/N1];
RMM[1]=0.5;
RMM[2]=0.5;
RMM[3]=1.0;
RMM[4]=0.0;
For[i=1,in,i++,X1[i-1]=N[X[i-1]];];
For[i=1,in,i++,B[i-1]=N[-F[i][X[0],X[1](*,X[2]*)]];(*dodajaj, če imaš več
spremenljivk oz. enačb*)
B[i-1]=N[H*B[i-1]];];
K=1;
(*korak 2*)
While[OK1&&KN1,
(*koraki 3-6*)
KK=1;
For[i=1,in,i++,
X[i-1]=N[X1[i-1]];];
While[OK1&&KK4,
For[i=1,in,i++,
For[J=1,Jn,J++,
A[i-1,J-1]=N[P[i,J][X[0],X[1](*,X[2]*)]];]; (*Jakobijeva matrika*)
A[i-1,n]=N[B[i-1]];];
(*Rešuješ linearni sistem A K (KK)=b*)
q=n-1;
OK=1;
i=1;
While[OK1&&iq,
Z=Abs[A[i-1,i-1]];
IR=i;
IA=i+1;
For[J=IA,Jn,J++,
If[Abs[A[J-1,i-1]]>Z,
IR=J;
Z=Abs[A[J-1,i-1]];];];
If[Z10^-20,
OK=0,
If[IRi,
For[J=i,Jn+1,J++,
c=A[i-1,J-1];
A[i-1,J-1]=A[IR-1,J-1];
A[IR-1,J-1]=c;];];
For[J=IA,Jn,J++,
c=N[A[J-1,i-1]/A[i-1,i-1]];
If[Abs[c]10^-20,
c=0;];
For[L=i,Ln+1,L++,
A[J-1,L-1]=N[A[J-1,L-1]-c*A[i-1,L-1]];];];];
i=i+1;];
Žiga Gosar
Stran 39/49
Seminar: Numerične metode
If[OK1,
If[Abs[A[n-1,n-1]]10^-20,
OK=0,
Y[n-1]=N[A[n-1,n]/A[n-1,n-1]];
For[i=1,iq,i++,
J=n-i;
JA=J+1;
c=A[J-1,n];
For[L=JA,Ln,L++,
c=N[c-A[J-1,L-1]*Y[L-1]];];
Y[J-1]=N[c/A[J-1,J-1]];];];];
If[OK0,Print["Linearni sistem je singularen\n"];];
If[OK1,
For[i=1,in,i++,
RK1[KK,i-1]=N[Y[i-1]];
X[i-1]=N[X1[i-1]+RMM[KK]*RK1[KK,i-1]];];];
KK=KK+1;];
(*korak 7*)
If[OK1,
For[i=1,in,i++,
X1[i-1]=N[X1[i-1]+(RK1[1,i-1]+2*RK1[2,i-1]+2*RK1[3,i-1]+RK1[4,i-1])/6];];
Write[OUP,K];
For[i=1,in,i++,
Write[OUP,N[X1[i-1],10]];];
K=K+1;];];
(*korak 8*)
If[OUP"Izhod[",NAME," 3]",
Print["Datoteka: ",NAME," je bila uspešna narejena.\n"];
Close[OUP]];];
8.3.1.1 Rešitev
začetna aproksimacija
N=1
1
1
2
3
korak
N=4
4
rešitev v literaturi [1]
N=1
napaka
N=4
Žiga Gosar
x(0,0)
2.303988 -2.001099
0.723918 -0.236104
1.297477 -0.639325
1.742115 -1.009680
2.109852 -1.335660
3
-2.25
0.696012 0.248901
0.890148 0.914340
x(1,1)
0.597097 2.257968
0.833515 1.444486
0.738038 1.739998
0.672260 1.977161
0.624812 2.180382
0.421052 2.618421
0.176571 0.360453
0.204285 0.438039
x(3,-2)
2.109446 -1.334563
2.799749 -1.844045
2.586471 -1.681386
2.357554 -1.511586
2.109512 -1.334532
2.713110 -1.362773
0.603664 0.028210
0.603598 0.028241
Stran 40/49
Seminar: Numerične metode
9 Naloga 9
9.1
Hiperbolične parcialne diferencialne enačbe
Metoda končnih razlik je aproksimativna metoda, ki temelji na interpolacijskem pristopu.
Aproksimativna rešitev je tako zasnovana na končni množici diskretnih parametrov, ki aproksimirajo
vrednosti primarnih spremenljivk v končno mnogih točkah izbranega območja.
Diferencialne enačbe se rešuje s pomočjo pretvorbe diferencialnih operatorjev v diferenčne, torej s
pomočjo enačb za aproksimacijo odvodov. Pri tem morajo biti izpolnjeni vsi robni pogoji
obravnavanega problema.
Za transformacijo diferencialnih zvez v diferenčne funkcijo p(x) razvrstimo v Taylorjevo vrsto okoli
točke x0 , slika 9.1.
Slika 9-1: Točke območja
p x0 h p x0 p x0
h
h2
h3
p x0 p x0
1!
2!
3!
Naj bo h<1. Ker je tako h3<<h, lahko člene od h2 naprej zanemarimo. Dobimo
h
h2
p x0 h p x0 p x0 p x0
1!
2!
in
p x0 h p x0 p x0
h
h2
p x0
1!
2!
Zgornja izraza zapišemo kot
w1 w0 hw0
h2
w0
2
(9.1)
w1 w0 hw0
h2
w0
2
(9.2)
in
Če sedaj oba izraza seštejemo, dobimo izraz za centralne razlike za drugi odvor, in sicer
w0
w1 2w0 w1
h2
(9.3)
Centralne razlike za prvi odvod dobimo če zgornja izraza (9.1) in (9.2) odštejemo,
Žiga Gosar
Stran 41/49
Seminar: Numerične metode
w0
w1 w1
2h
(9.4)
Desne razlike za prvi odvod enostavno izrazimo iz (9.1), kjer zanemarimo člene od h naprej in
dobimo
w0
w0 w1
h
(9.5)
Na ta način določene desne razlike lahko privedejo do velikih napak, zato jih raje določimo na
4h2
podlagi seštevanja izraza (9.1) ter w2 w0 2hw0
w0 . Sledi
2
w0
3w0 4w1 w2
2h
(9.6)
Za primer valovne enačbe, ki je splošno podana z
2
2 p
2 p
x
,
t
x, t 0 ,
t 2
x2
0 xl ,
in robnimi ter začetnimi pogoji
p 0, t 0
in
p x, t f x
velja
p l , t 0 , za
in
k
h
(9.7)
0t
p
x, t g x , za
t
wi , j 1 2 1 2 wi , j 2 wi 1, j wi 1, j wi , j 1
Pri tem je
0t,
0 x 1
i 1, 2,..., m 1
j 1, 2,...
(9.8)
, kjer k predstavlja časovni korak, h pa korak v smeri x, h= l/m.
Najprej moramo določiti P i,1. To storimo z desnimi razlikami in uporabo začetnih pogojev, in sicer z
uporabo izraza (9.5)
wi ,1 wi ,0 k g xi ,
i 1, 2,..., m 1
(9.9)
ki je enostavnejši in lahko prinese končnim rezultatom večje napake, oziroma
wi ,1 2 1 2 f xi
2
2
f x f x k g x , i 1, 2,..., m 1
i 1
i 1
i
(9.10)
ki je natančnejši, saj upošteva še člen s k2.
9.2
Definicija naloge (str 725, naloga 7)
Zračni tlak p(x,t) v cevi je opisan z valovno enačbo
2 p 1 2 p
,
x2 c 2 t 2
0 x 1,
0t,
kjer je l dolžina cevi ter c fizikalna konstanta. Če je cev odprta, potem sta robna pogoja podana z
Žiga Gosar
Stran 42/49
p 0, t p0 in
p l , t p0 .
Seminar: Numerične metode
Če pa je cev zaprta na koncu, kjer je x= l, potem sta rovna pogoja naslednja
p 0, t p0 in
p
l, t 0 .
x
Naj bo c = 1, l =1 in začetna pogoja
p x,0 p0 cos 2 x
in
p
x, 0 0 ,
x
0 x 1.
a) Aproksimiranje tlaka za primer odprte cevi z p0 = 0.9 pri x = 0 za t =0.5 in t = 1, z uporabo
algoritma 12.4 z h= k= 0.1.
b) Modificirajte Algoritem 12.4 za primer zaprte cevi z p0 = 0.9 ter aproksimirajte p(0.5,0.5) in
p(0.5,1) za h= k= 0.1.
9.2.1 Programska koda – Mathematica
a) del naloge
-----------------------------------------------------------------(* Podatki *)
c=1;
l=1;
p0=0.9;
f[x_]:=p0*Cos[2*Pi*x];
g[x_]:=0;
k=h=0.1;
Tmax=2; (* Maksimalni cas *)
λ=c*k/h;
m=Round[l/h];
n=Round[Tmax/k];
w=Array[W,{m+1,n+1}]; (* Tocke mreze *)
(*korak 3*)
Do[{
w[[1,j]]=p0,
w[[m+1,j]]=p0},{j,2,n+1}]
w[[1,1]]=f[0];
w[[m+1,1]]=f[l];
(*korak 4*)
Do[{
w[[i,1]]=f[(i-1)*h],
w[[i,2]]=(1-λ^2)*f[(i-1)*h]+λ^2/2*(f[i*h]+f[(i-2)*h])+k*g[(i-1)*h]},{i,2,m}]
Žiga Gosar
Stran 43/49
Seminar: Numerične metode
(*korak 5*)
Do[{
Do[{
w[[i,j+1]]=2*(1-λ^2)*w[[i,j]]+λ^2*(w[[i+1,j]]+w[[i-1,j]])-w[[i,j-1]]},
{i,2,m}]},
{j,2,n}]
(*korak 6*)
Print["p(0.5,0.5)"]
w[[0.5/h+1,0.5/k+1]]
Print["p(0.5,1.0)"]
w[[0.5/h+1,1.0/k+1]]
Rezultati za a) del naloge
p(0.5,0.5)=0.9
p(0.5,1.0)=2.7
Zrači tlak v odprti cevi
3.0
2.5
2.0
1.5
1.0 p
0.5
N11
0.0
N9
-0.5
N7
x
N5
-1.0
N3
N1
1
2
3
4
5
6
7
8
21
18 19 20
15 16 17
12 13 14
11
10
9
t
b) del naloge
V tem primeru uporabimo še leve razlike za prvi odvod, s katerim računamo zračni tlak na koncu
cevi (x= l) za vsak časovni korak,
wm, j
4wm1 wm2 2 h g l
,
3
j 1, 2,...
(9.11)
-----------------------------------------------------------------(* Podatki *)
Žiga Gosar
Stran 44/49
Seminar: Numerične metode
c=1;
l=1;
p0=0.9;
f[x_]:=p0*Cos[2*Pi*x];
g[x_]:=0;
k=h=0.1;
Tmax=2; (* Maksimalni cas *)
λ=c*k/h;
m=Round[l/h];
n=Round[Tmax/k];
w=Array[W,{m+1,n+1}]; (* Tocke mreze *)
(*korak 3*)
Do[{w[[1,j]]=p0},{j,2,n+1}]
w[[1,1]]=f[0];
w[[m+1,1]]=f[l];
(*korak 4*)
Do[{
w[[i,1]]=f[(i-1)*h],
w[[i,2]]=(1-λ^2)*f[(i-1)*h]+λ^2/2*(f[i*h]+f[(i-2)*h])+k*g[(i-1)*h]
},{i,2,m}]
w[[m+1,2]]=(4*w[[m,2]]-w[[m-1,2]]+2*h*g[m*h])/3; (*9.11*)
Do[{
Do[{
(*korak 5*)
w[[i,j+1]]=2*(1-λ^2)*w[[i,j]]+λ^2*(w[[i+1,j]]+w[[i-1,j]])-w[[i,j-1]]
},{i,2,m}],
w[[m+1,j+1]]=(4*w[[m,j+1]]-w[[m-1,j+1]]+2*h*g[m*h])/3;
(*9.11*)
},{j,2,n}]
(*korak 6*)
Print["p(0.5,0.5)"]
w[[0.5/h+1,0.5/k+1]]
Print["p(0.5,1.0)"]
w[[0.5/h+1,1.0/k+1]]
Rezultati za b) del naloge
p(0.5,0.5)=0.9
p(0.5,1.0)=0.918793
Žiga Gosar
Stran 45/49
Seminar: Numerične metode
Zračni tlak na koncu cevi
3.0
2.5
2.0
1.5
1.0 p
0.5
0.0
-0.5
-1.0
N11
N9
N7
x
N5
N3
N1
1
Žiga Gosar
3
5
7
9
11
13
15
17
19
21
t
Stran 46/49
Seminar: Numerične metode
10 Primerjava numeričnih metod
Odločil sem se, da bom med seboj primerjal metode s katerimi sem reševal probleme v moji
seminarski nalogi. Med seboj bom primeral Taylorjev polinom 2. in 4. reda, metodo Runge-Kutta 4.
reda in Runge-Kutta-Fehlbergovo metodo, ki ima spremenljivi korak.
Z metodami bom rešil primer naloge z naslednjimi podatki:
y y t 2 1 ,
y 0 0,5
0t 2,
Kjer je h 0, 2 , N 10 , tol 105 , hmax 0, 25 in hmin 0,01 .
t
0.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
1.6
1.8
2.0
y(t)
0.5000000
0.8292986
1.2140877
1.6489406
2.1272295
2.6408591
3.1799415
3.7324000
4.2834838
4.8151763
5.3054720
T(2)
0.5000000
0.8300000
1.2158000
1.6520760
2.1323327
2.6486459
3.1913480
3.7486446
4.3061464
4.8462986
5.3476843
T(4)
0.5000000
0.8293000
1.2140910
1.6489468
2.1272396
2.6408744
3.1799640
3.7324321
4.2835285
4.8152377
5.3055554
RK4
0.5000000
0.8292933
1.2140762
1.6489220
2.1272027
2.6408227
3.1798942
3.7323401
4.2834095
4.8150857
5.3053630
RKF
0.5000000
0.9204886
1.3964910
1.9537488
2.5864260
3.2604605
3.9520955
4.6308268
5.2574861
5.3054896
y(t(RKF))
0.5000000
0.9204873
1.3964884
1.9537446
2.5864198
3.2604520
3.9520844
4.6308127
5.2574687
5.3054720
t(RKF)
0.0
0.2500000
0.4865522
0.7293332
0.9793332
1.2293332
1.4793332
1.7293332
1.9793332
2.0000000
h(RKF)
0.0
0.2500000
0.2365522
0.2427810
0.2500000
0.2500000
0.2500000
0.2500000
0.2500000
0.0206668
Tabela 8: Napaka metod
Žiga Gosar
T(2)
T(4)
RK4
RKF
0
0.0007014
0.0017123
0.0031354
0.0051032
0.0077868
0.0114065
0.0162446
0.0226626
0.0311223
0.0422123
0
0.0000014
0.0000033
0.0000062
0.0000101
0.0000153
0.0000225
0.0000321
0.0000447
0.0000614
0.0000834
0
0.0000053
0.0000115
0.0000186
0.0000268
0.0000364
0.0000473
0.0000599
0.0000743
0.0000906
0.0001090
0
0.0000013
0.0000026
0.0000042
0.0000062
0.0000085
0.0000111
0.0000141
0.0000174
0.0000176
Stran 47/49
Seminar: Numerične metode
Primerjava metod
0.00012
0.00010
napaka
0.00008
0.00006
0.00004
0.00002
0.00000
0.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
1.6
1.8
2.0
t
T(4)
Žiga Gosar
RK4
RKF
Stran 48/49
Seminar: Numerične metode
11 Literatura
[1] R. L. Burden and J. D. Faires, Numerical Analysis, seventh edition, Brooks/Cole, California,
2011.
[2] J. Petrišič, Uvod v Matlab: za inženirje, Fakulteta za strojništvo, 2011.
[3] J. Petrišič, Reševanje enačb, Fakulteta za strojništvo, 1996.
[4] J. Petrišič, Interpolacija in osnove računalniške grafike, Fakulteta za strojništvo, 1999.
[5] A. Kotar, Numerične metode: Zapiski z vaj, 2006
Žiga Gosar
Stran 49/49