Vous êtes sur la page 1sur 116

Metody matematycznej fizyki

Paweł Zimny

Katedra
Elektrotechniki Teoretycznej
i Informatyki

www.ely.pg.gda.pl/Zimny
A. Krupowicz: Metody numeryczne zagadnień początkowych
równań różniczkowych zwyczajnych.
Z. Fortuna, B. Macukow, J. Wąsowski: Metody numeryczne.
G.I. Marczuk: Analiza numeryczna zagadnień fizyki
matematycznej.
D. Poter: Metody obliczeniowe fizyki.
O.C. Zienkiewicz: Metoda elementów skończonych.

Gelfand I.M., Fomin S.W.: Rachunek wariacyjny.


Krzyżański M.: Równania różniczkowe cząstkowe
rzędu drugiego.

Rektorys K.: Variational Methods in Mathematics,


Science and Engineering.

Smirnow W.I.: Matematyka wyższa.

Snedon I.N.: Równania różniczkowe cząstkowe.


Zimny P.: Metody wariacyjne w elektrotechnice.
Równanie różniczkowe zwyczajne rzędu n-go

( )
f t , x, x ,..., x ( n ) = 0

przykład:
( )
x + a 1 − x 2 x + ω2 x = E sin( Ωt + Θ )

Układ równań różniczkowych I-go rzędu w postaci


normalnej:
x 1 = f1 ( t , x1 , x 2 ,..., x n )
x 2 = f 2 ( t , x 1 , x 2 ,..., x n )
............................
x n = fn ( t , x 1 , x 2 ,..., x n )
Sprowadzenie równania rzędu n do układu n równań na
przykładzie:
( )
x + a 1 − x 2 x + ω2 x = E sin( Ωt + Θ )

oznaczamy: x = x1
x = x 1 = x 2
d d
x = ( x ) = ( x 2 ) = x 2
dt dt

i ostatecznie: x 1 = x 2
( )
x 2 = E sin( Ωt + Θ ) − a 1 − x12 x 2 − ω2x1

Równanie różniczkowe rzędu n może praktycznie zawsze


być zapisane w formie układu n równań I-go rzędu.
Zagadnienie początkowe dla równania różniczkowego:

Przykład: x + λx = f ( t )

całka ogólna: x + λx = 0

Rozwiązanie: x = A exp( − λt )

Całka szczególna metodą uzmienniania stałej:


 exp( − λ t ) = f ( t )
A

czyli t
A = C + ∫ f ( τ ) exp( λ )τdτ
0
Rozwiązanie równania: x + λx = f ( t )
t
ma postać: x = C exp( − λt ) + ∫ f ( τ ) exp[ − λ ( t − τ ) ] dτ
0

Stałą C wyznaczamy z warunków początkowych

Dla równania różniczkowego I-go rzędu potrzebujemy


jeden warunek początkowy:

x( t = 0) = x 0

i dla wyznaczenia stałej C mamy równanie:


x0 = C
i rozwiązanie ma postać:

t
x ( t ) = x 0 exp( − λ t ) + ∫ f ( τ ) exp[ − λ ( t − τ ) ] dτ
0

Przykład równania różniczkowego II rzędu:


R0  c + RCu c + u c = 0
LCu

Warunki początkowe:
t=0 uc R
R
( )
uc 0 = E
E C R + R0
i(t) E
L
i(0) = −
i = Cu c R + R0
R
uc ( 0) = E
R + R0
E
i(0) = −
R + R0

Biorąc pod uwagę, że i = Cu c zapisujemy warunki w postaci:

R
uc ( 0) = E
R + R0
E
u c t =0 =−
( R + R0 )C

Warunków początkowych należy postawić tyle i nie więcej


ile wynosi rząd równania różniczkowego
 c + RCu c + u c = 0
LCu

R
uc ( 0) = E
R + R0
E
u c t =0 =−
( R + R0 )C
Rozwiązanie:

Niech równanie charakterystyczne:

LCα 2 + RCα + 1 = 0
ma dwa różne pierwiastki rzeczywiste α1 , α 2

wtedy całka ogólna ma postać: u ( t ) = A e α1t + A e α2t


c 1 2
Stałe A1 i A2 wyznaczamy z warunków początkowych:

R
uc ( 0) = E
R + R0
E
u c t =0 =−
( R + R0 )C

czyli
R
A1 + A 2 = E
R + R0
E
α1 A 1 + α 2 A 2 = −
( R + R0 )C

Rozwiązując powyższy układ równań wyznaczamy stałe


a następnie znajdujemy napięcie na kondensatorze.
Podsumowanie:

1. Mamy kłopoty z rozwiązywaniem równań o stałych


współczynnikach, jeżeli rząd wyższy od dwóch
równanie charakterystyczne jest wielomianem
rzędu n i nie znamy wzorów na pierwiastki.
2. Równań o zmiennych w czasie współczynnikach
i nieliniowych nie potrafimy rozwiązać w ogólnym
przypadku często już dla rzędu I-go

Konieczność użycia metod numerycznych

Ze względu na łatwość zbudowania ogólnego algorytmu


obliczenia prowadzimy dla układu równań różniczkowych
I-go rzędu w postaci normalnej
x 1 = f1 ( t , x1 , x 2 ,..., x n )
x 2 = f 2 ( t , x 1 , x 2 ,..., x n )
............................
x n = fn ( t , x 1 , x 2 ,..., x n )

który po wprowadzeniu formalnego zapisu w postaci wektorów:

 x1 ( t )   x 1 ( t )   f1 ( t , x1 , x 2 ,..., x n ) 
x ( t )   x ( t )   f ( t , x , x ,..., x ) 
 2  X ( t ) =  2  F( t , X ) =  2
  n 
( )
X t = 
1 2

        
x n ( t )  x n ( t )  fn ( t , x1 , x 2 ,..., x n ) 

zapisujemy:  = F( t , X )
X
 = F( t , X )
X

Wniosek – Jeżeli opanujemy metodę numerycznego


rozwiązywania jednego równania różniczkowego
pierwszego rzędu, czyli
x = f ( t , x )

to wyniki łatwo uogólnimy na układ n równań


I-go rzędu w postaci normalnej

Rozpoczynamy od następującego zadania:

x = f ( t , x )
z warunkiem początkowym: x ( t = 0 ) = x 0

Należy znaleźć rozwiązanie dla t∈[0,T]


Metoda aproksymacji wielomianowej

metody wielokrokowe

x = f ( x, t )

Przyjmujemy algorytm w postaci


p p
x n +1 = ∑ a i x n − i + h ∑ b i f ( x n − i , t n − i )
i =0 i = −1

tk=kh

Algorytm nazywamy jawnym, jeżeli sumowanie rozpoczyna


się od 0 w przeciwnym przypadku mówimy, że algorytm jest
niejawny
Wyznaczenie współczynników ai, bi.

Metoda jest dokładna, jeżeli rozwiązaniem równania:


x = f ( x, t )
jest wielomian stopnia zerowego, czyli równanie ma postać:
.
x=0

którego rozwiązaniem jest:


x( t ) = c0
p p
podstawiając do x n +1 = ∑ a i x n − i + h ∑ b i f ( x n − i , t n − i )
i =0 i = −1

p
mamy c 0 = ∑ aic 0 ponieważ f(x,t)=0. Dzieląc przez c0
i =1
otrzymujemy warunek:
p
∑ ai = 1
i =0

Jeżeli współczynniki ai dobierzemy tak, aby spełnić


powyższy warunek, to algorytm jest dokładny dla
wielomianów stopnia zerowego.

Żądamy, aby jeżeli rozwiązaniem równania x = f ( x, t )

jest wielomian pierwszego stopnia x = c1t + c 0


p p
to algorytm
x n +1 = ∑ a i x n − i + h ∑ b i f ( x n − i , t n − i )
i =0 i = −1

jest dokładny.
Równanie spełniane przez wielomian x = c1t + c 0
.
ma postać: x = c1 czyli f ( x, t ) = c1
p p
a więc algorytm:
x n +1 = ∑ a i x n − i + h ∑ b i f ( x n − i , t n − i )
i =0 i = −1

uwzględniając, że ti=ih przyjmuje postać:


p p
c1 ( n + 1)h + c 0 = ∑ a i [c1 ( n − i )h + c 0 ] + h ∑ b i c i
i =0 i = −1

Biorąc pod uwagę, że dla wielomianu stopnia zerowego


mamy warunek:
p
∑ ai = 1
i =0
Z równania:
p p
c1 ( n + 1)h + c 0 = ∑ a i [c1 ( n − i )h + c 0 ] + h ∑ b i c i
i =0 i = −1

p p
otrzymujemy:
− ∑ ia i + ∑ bi = 1
i =0 i = −1

Powtórzmy jeszcze jako ćwiczenie rozumowanie dla


wielomianu II-go stopnia:
x = c 2 t 2 + c1 t + c 0
.
który spełnia równanie x = 2c 2 t + c1

czyli f ( x, t ) = 2c 2 t + c1
Przyjmując dla skrócenia zapisu tn=0 algorytm:
p p
x n +1 = ∑ a i x n − i + h ∑ b i f ( x n − i , t n − i )
i =0 i = −1

i uwzględniając: x n +1 = c 2 h 2 + c 1 h + c 0
x n− i = c 2 ( − ih ) 2 + c1 ( − ih ) + c 0
f ( x n− i , t n− i ) = 2c 2 ( − ih ) + c1
zapisujemy:
p p
c 2 h + c1h + c 0 = ∑ a i [c 2 ( ih ) − c1ih + c 0 ] + h ∑ b i [ −2c 2 ih + c1 ]
2 2

i =0 i = −1

a biorąc pod uwagę dwa poprzednie warunki:


p
∑ ai = 1
i =0

p p
− ∑ ia i + ∑ bi = 1
i =0 i = −1

p
otrzymujemy: ∑ ai i 2
− 2 ∑ bii = 1
i = −1

Dla wielomianu stopnia k:

x = c k t k + c k −1t k −1 + ... + c1t + c 0

równie różniczkowe ma postać


.
x = kc k t k −1 + ( k − 1)c k −1 t k − 2 + ... + c1
Przyjmując podobnie jak dla drugiego stopnia t i = ih

k
x n +1 = ∑ m
c h m

m=0
k
x n−i = ∑ c m ( − ih) m
m= 0
k
m−1
f ( x n− i , t n−i ) = ∑ m
mc ( − ih )
m=1

p p
i podstawiając do: x n +1 = ∑ a i x n − i + h ∑ b i f ( x n − i , t n − i )
i =0 i = −1

otrzymujemy:
k p k p k
∑ c mh m
= ∑ ai ∑ c m ( − ih) m
+ h ∑ bi ∑ mc m ( − ih) m−1
m=0 i =0 m= 0 i = −1 m=1
Porównując współczynniki przy tych samych potęgach
h i poprzednie k-1 równań znajdujemy:

p p
∑ ai ( −i ) k
+ k ∑ b i ( − i ) k −1 = 1
i =0 i = −1

Algorytm wielokrokowy:
p p
x n +1 = ∑ a i x n − i + h ∑ b i f ( x n − i , t n − i )
i =0 i = −1

jest dokładny dla wielomianu stopnia k, jeżeli współczynniki


ai, bi spełniają następujący układ k równań:
p
∑ ai = 1
i =0

p p
− ∑ ia i + ∑ bi = 1
i =0 i = −1

p
∑ ai i 2
− 2 ∑ bii = 1
i = −1

...............................

p p
k −1
∑ i
a ( − i k
) + k ∑ i
b ( − i ) =1
i =0 i = −1

Każdy algorytm spełniający warunki dla k>1 nazywamy


zwartym
Liczba niewiadomych do wyznaczenia w algorytmie:
p p
x n +1 = ∑ a i x n − i + h ∑ b i f ( x n − i , t n − i )
i =0 i = −1

Współczynników ai wynosi: p+1

Współczynników bi wynosi: p+2

Całkowita liczba niewiadomych: 2p+3


p p
Układ równań: ∑ a ( − i ) + k ∑ b ( − i ) k −1 = 1
k
i i k=0,1,...,n
i =0 i = −1

można spełnić pod warunkiem, że liczba równań n+1 ≤ 2p+3


W metodzie Adamsa - Bashfortha przyjmujemy p=n-1
Liczba niewiadomych wynosi: 2(n-1)+3=2n+1, więc przy
spełnieniu n+1 równań możemy dowolnie wybrać
n współczynników

Przyjmujemy n-1 współczynników a1=a2=....=an-1 =0


p
Pierwsze ∑ ai = 1
i =0

z równań przy spełnieniu powyższych warunków

przyjmuje postać: a0 = 1

Jako n-ty dowolnie wybrany współczynnik przyjmujemy b-1 =0


A więc schemat Adamsa - Bashfortha jest schematem jawnym
Dla n=1 mamy p=0 i równanie wyznaczające b0
p p
k −1
∑ i
a ( − i ) k
+ k ∑ i
b ( − i ) =1
i =0 i = −1

jest
b0 = 1

Przy n=2 będzie p=1 i mamy dwie niewiadome b0 i b1


spełniające układ równań:
b 0 + b1 = 1
1
− b1 =
2
czyli 3 1
b 0 = ; b1 = −
2 2
Ogólnie jeżeli mamy n niewiadomych współczynników bi ,
to wyznaczamy je z równań
1
1 1 1 ... 1   b0   1 
0 −1 −2 ... − (n − 1)   b1   2 
 2
  1
0 1 4 ... (n − 1)   b2  =  
.   .  3
 . . ... .   .
0 ( −1)n ( − 2 )n ... ( −(n − 1))n −1  b n −1   1 
n 

Rozwiązanie powyższego układu równań przedstawia


tabela:
Współczynniki bk metoda Adamsa - Bashfortha

n b0 b1 b2 b3 b4 b5

1 1

2 3/2 -1/2

3 23/12 -16/12 5/12

4 55/24 -59/24 37/24 -9/24

5 1901/720 -2774/720 2616/720 -1274/720 251/720

6 4277/1440 -7923/1440 9982/1440 -7298/1440 2877/1440 -475/1440


Algorytm Adamsa - Bashfortha rzędu pierwszego jest
nazywany algorytmem Eulera i ma postać:

x i +1 = x i + hf ( x i , t i )

Przykład: x + 3x = 10 sin( 30t )

z warunkiem początkowym x(0)=0

Zapisujemy równanie w postaci normalnej:


x = 10 sin( 30t ) − 3x

czyli w tym przypadku funkcja f(x,t) jest


f ( x, t ) = 10 sin( 30t ) − 3x
Wybór kroku całkowania h:
Wybór kroku całkowania h:

Równanie jednorodne ma postać:

x + 3x = 0

Całka ogólna tego równania ma postać:

x = A exp( − 3t )

Przebieg rozwiązania jest scharakteryzowany przez


wielkość tłumienia, które w tym przypadku wynosi
a=3 i charakterystyczny czas wynosi 1/a=1/3 s.
Krok czasowy h należy wybrać co najwyżej
h<1/(10a), co w tym przypadku pozwala wybrać
h=0.03s.
Należy również uważnie rozważyć funkcję wymuszającą,
która w rozpatrywanym przypadku ma postać:
10 sin( 30t )
Okres T zmian analizowanej funkcji wynosi:

T= ≈ 0.21s
30
Rysunek funkcji sinus jest „gładki”, jeżeli podzielimy
okres na co najmniej 20 kroków, czyli krok h powinien
wynosić h<T/20, a więc h=0.01s.

0 h 2h 3h 4h t
Z obu ograniczeń h=0.03s i h=0.01s wybieramy mniejszy
czyli w tym przypadku przyjmujemy h=0.01s.
Algorytm przy przyjętym kroku h ma postać:

xn +1 = xn + 0.01[ 10 sin( 30 ⋅ 0.01 ⋅ n ) − 3xn ]

x0=0

i mamy: t 1 = 0.01
x1 = 0 + .01[ 10 sin( 30 ⋅ 0.01) − 3 ⋅ 0] = 0.02955
następny:

t 2 = 0.02
x 2 = 0.02955 + .01[ 10 sin( 30 ⋅ .02 ) − 3 ⋅ 0.02955] = 0.08513

itd..
1 h=0.01

0.75

xn 0.5
0.25
y(n⋅ h)
0
0.25
0.5
0 6 12 18 24 30 36 42 48 54 60
n

y(t) - rozwiązanie dokładne


0.1 h=0.01

0.075
0.05
xn− ybezwzględny
błąd ( n ⋅ h ) 0.025
0
0.025
0.05
0 6 12 18 24 30 36 42 48 54 60
n
1 h=0.05

0.75

xn 0.5
0.25
y(n⋅ h)
0
0.25
0.5
0 2 4 6 8 10 12 14 16 18 20
n
0.5 h=0.05

0.33
0.17
xn− y ( n ⋅ h ) 0
0.17
0.33
0.5
0 2 4 6 8 10 12 14 16 18 20
n
5 h=0.3

3.33
1.67
xn
0
y( n⋅ h)
1.67
3.33
5
0 2 4 6 8 10 12 14 16 18 20
n
5 h=0.3

3.33
1.67
xn− y ( n ⋅ h ) 0
1.67
3.33
5
0 2 4 6 8 10 12 14 16 18 20
n
1000 h=0.75

666.67

xn 333.33
0
y(n⋅ h)
333.33
666.67
1000
0 2 4 6 8 10 12 14 16 18 20
n
1000 h=0.75

666.67
333.33
xn−y ( n ⋅ h ) 0
333.33
666.67
1000
0 2 4 6 8 10 12 14 16 18 20
n
Równanie drugiego rzędu na przykładzie wahadła
matematycznego o długości l:

d 2α g
2
+ sin α = 0
dt l

Wprowadzamy nowe zmienne


celem zastąpienia układem
równań I-go rzędu:

α dα

dt
dω g
= − sin α
dt l
Przyjmujemy wahadło o długości l=1m i g=10m/s2

π
Warunki początkowe: α( 0) =
3

ω( 0 ) = =0
dt t =0

Jeżeli zlinearyzujemy równanie: d 2α g


2
+ sin α = 0
dt l

to przyjmie on postać: dα 2 g
2
+ α=0
dt l
którego całka ogólna ma postać:
 g   g 
α = A1 sin t  + A 2 cos t 
 l   l 
Okres T drgań zlinearyzowanego wahadła wynosi:
l
T = 2π ≈ 2s
g
T
czyli krok należy przyjąć h≤
20
h ≤ 0.1

ponieważ mamy nieliniowe równanie, więc dla bezpieczeństwa


przyjmujemy h=0.05s.

Jawny schemat Eulera dla układu równań =ω
dt
dω g
= − sin α
dt l
przyjmuje postać: α n+1 = α n + hωn
g
ωn + 1 = ωn − h sin α n
l
z warunkiem startowym: π
α0 =
3
ω0 = 0

i dla n=0 mamy:


π
α1 = + 0.05 ⋅ 0 = 1.0472
3
π
ω1 = 0 − 0.05 ⋅ sin  = −0.0433
 3
czyli α1 = 1.0472
ω1 = −0.0433
Znamy α1 = 1.0472
ω1 = −0.0433

możemy przyjąć n=1 i wyznaczyć wartości w następnym


kroku
α 2 = 1.0472 + 0.05 ⋅ ( − 0.0433) = 1.045035
ω2 = −0.0433 − 0.05 ⋅ sin( 1.0472) = −0.0866
czyli mamy:
α 2 = 1.045035
ω2 = −.0866

i obliczenia możemy powtórzyć.


2 h=0.001

1.33

αn 0.67
0
x( n ⋅ h )
0.67
1.33
2
0 400 800 1200 1600 2000
n
5 h=0.005

3.33
1.67
αn
0
x( n ⋅ h )
1.67
3.33
5
0 200 400 600 800 1000
n
π
1 α=
h=0.005 warunek początkowy: 18 t = 0
0.67 ω = 0 t =0

αn 0.33
0
x( n ⋅ h )
0.33
0.67
1
0 200 400 600 800 1000
n
Metody niejawne
Metoda Adamsa - Moultona

p p
x n +1 = ∑ a i x n − i + h ∑ b i f ( x n − i , t n − i )
i =0 i = −1

W metodzie Adamsa - Moultona przyjmujemy, że b-1 ≠ 0

Przyjmujemy p=n-2
Liczba niewiadomych wynosi: 2(n-2)+3=2n-1,
w tym ai – n-1 nieznanych i bi – n nieznanych
więc przy spełnieniu n+1 równań możemy dowolnie wybrać
n-2 współczynników i przyjmujemy a1=a2=...=an-2 =0
p p
Z układu równań: ∑ ai ( −i ) k
+ k ∑ b i ( − i ) k −1 = 1
i =0 i = −1 k=0,1,...,n

zapewniających zwartość metody otrzymujemy:


p
pierwsze ∑ ai = 1
i =0

z równań przy spełnieniu powyższych warunków

przyjmuje postać: a0 = 1

Dla wyznaczenia pozostałych mamy układ równań:

n− 2
1
∑ b i ( − i ) k −1 = k
k=1,2,...,n
i = −1
Jeżeli n=1, to mamy: b-1 =1

i schemat metody I-go rzędu zwanej niejawną metodą Eulera

będzie:
x n+1 = x n + hf ( x n+1 , t n+1 )
Dla n=2 mamy:
0
1
∑ b i ( − i ) k −1 = k
k=1,2
i = −1

czyli
b −1 + b 0 = 1
1
b −1 =
2
i rozwiązaniem powyższego układu równań są b-1 =b0= 0.5
Algorytm niejawny II-go rzędu zwany metodą trapezów
jest:
h
x n+1 = x n + [ f ( x n , t n ) + f ( x n+1 , t n+1 ) ]
2
Jest to jeden z najpopularniejszych obecnie algorytmów
całkowania równań różniczkowych zwyczajnych.

Następne współczynniki dla metody Adamsa – Moultona


otrzymujemy biorąc kolejno n=3,4, itd.. Poniżej podane
zostaną współczynniki dla metody do 5-go rzędu:
n=3

h
x n +1 = x n + [ 5f ( x n+1 , t n+1 ) + 8f ( x n , t n ) − f ( x n−1 , t n−1 ) ]
12

w tym przypadku metoda nie jest metodą samostartującą

n=4

h
x n +1 = x n + [ 9f ( x n+1 , t n+1 ) + 19f ( x n , t n ) − 5f ( x n−1 , t n−1 ) +
24
+ f ( x n− 2 , t n− 2 ) ]
n=5
h
x n +1 = xn + [ 251f ( x n+1 , t n+1 ) + 646f ( x n , t n ) − 264f ( x n−1 , t n−1 ) +
720
+ 106f ( x n− 2 , t n− 2 ) − 19f ( x n− 3 , t n− 3 ) ]

Przykład zastosowania

Niejawna metoda Eulera

Załączenie siły elektromotorycznej sinusoidalnie zmiennej


w obwodzie RC.
t=0 R
u C = 0 t =0
e(t) C
e ( t ) = Em sin( ωt + θ )
Równanie obwodu ma postać:
du C
RC + uC = e( t )
dt

lub pisząc w postaci normalnej otrzymujemy:

du C Em uC
= sin( ωt + θ ) −
dt RC RC

z warunkiem początkowym: u C = 0 t =0

Dla przeprowadzenia obliczeń numerycznych przyjmujemy


dane liczbowe: R=10Ω , C=100µ F, Em=100V, ω =314rad-1 ,
θ =π /4
Po podstawieniu danych liczbowych otrzymujemy:

du C  π
= 105 sin 314t +  − 10 3 u C
dt  4
z warunkiem początkowym: uC0 = 0

Ustalenie kroku: stała czasowa obwodu RC=1ms


okres przy 50Hz = 20ms
Dobry wybór powinien być 0.1ms. Zaryzykujmy h=0.0005.

Algorytm niejawny Eulera ma postać:

 5  π 
u n +1 = u n + 0.0005 10 sin 314 t n+1 +  − 10 3 u n+1 
  4 
Startujemy dla n=0 t=0 u C0 = 0 i mamy

t=0.5ms
 5  π 
u1 = 0 + 0.0005 10 sin 314 ⋅ .0005 +  − 10 u1 
3

  4 

Niewiadoma występuje po obu stronach równości i rozwiązując


mamy:
0.0005 ⋅ 105 sin( .942398 )
u1 =
1 + 0.5

u1 = 26.9657
Następny krok n=2, t=0.001s i mamy:

[
u 2 = 26.9657 + 0.0005 10 5 sin( 314 ⋅ 0.001 + 0.7854 ) − 10 3 u 2 ]
i rozwiązując otrzymujemy:
26.9657 + 50 sin( 1.099398 )
u2 =
1.5

u 2 = 47.6749

itd.
W ramach ćwiczenia zalecane przeliczenie kilku kroków
i porównać z rozwiązaniem dokładnym
100 h=0.0005

50
un
0
uc( n ⋅ h )

50

100
0 50 100 150 200 250 300 350 400
n
5 bezwzględny
błąd

2.5

u n− uc( n ⋅ h ) 0

2.5

5
0 50 1 00150200250300350400
n
100 h=0.002

50
un
0
uc( n ⋅ h )
50

100
0 12.5 25 37.5 50 62.5 75 87.5100
n
10

2.5

u n− uc( n ⋅ h ) 5

12.5

20
0 12.525 37.550 62.575 87.5100
n
100
h=0.01

50
un
0
uc( n ⋅ h )
50

100
0 2.5 5 7.5 10 12.515 17.520
n
20

u n− uc( n ⋅ h ) 10

25

40
0 2.5 5 7.5 10 12.5 15 17.520
n
100 h=0.02

75
un
50
uc( n ⋅ h )
25

0
0 2.5 5 7.5 10 12.5 15 17.520
n
40

30

u n− uc( n ⋅ h ) 20

10

0
0 2.5 5 7.5 10 12.5 15 17.520
n
Jako następny przypadek rozpatrzymy nieliniową
indukcyjność

t=0
R

Ψ =f(i)
E

Charakterystyka dławika: Ψ = 0.1i − 0.002i 3


Przyjmujemy R=5Ω , E=15V

Równanie obwodu jest dΨ


+ Ri = E
dt
Biorąc pod uwagę, że Ψ = 0.1i − 0.002i 3
mamy: di 2 di
0.1 − 0.006i + Ri = E
dt dt

lub zapisując w postaci normalnej będzie:

di E − Ri
=
dt 0.1 − 0.006i 2
z warunkiem początkowym: i(0)=0
Wybór kroku całkowania: Jeżeli odrzucimy człon nieliniowy,
to mamy obwód o indukcyjności L=0.1H i rezystancji 5Ω .
Stała czasowa tego obwodu wynosi 0.1/5=20ms. Należałoby
przyjąć krok co najwyżej 2ms. Spróbujmy zaryzykować
i przyjmujemy h=0.004s.
Obliczenia przeprowadzimy korzystając z metody trapezów
Mamy po podstawieniu danych następujący schemat:

h  15 − 5i n 15 − 5i n+1 
i n +1 = i n +  + 2 

2  0.1 − 0.006i n 0.1 − 0.006i n+1 
2

z punktem startowym i0=0. Dla n=1 mamy:

0.004  15 − 5 ⋅ 0 15 − 5i 1 
i1 = 0 +  + 
2
2  0.1 − 0.006 ⋅ 0 0.1 − 0.006i1 
2

lub 15 − 5i 1
i1 = 0.3 + 0.002
0.1 − 0.006i12
15 − 5i 1
i1 = 0.3 + 0.002
0.1 − 0.006i12

Powyższe równanie nieliniowe rozwiązujemy jedną z metod


numerycznych. Zastosujemy iterację oznaczając:

i1k - wartość prądu w k-tej iteracji

mamy schemat iteracyjny:


15 − 5i k1
i k1 +1 = 0.3 + 0.002
( )
0.1 − 0.006 i k 2
1

punkt startowy:
i10 = i 0 = 0
i mamy: i11 = 0.6 i12 = .5453 i13 = .54993 i14 = .54953
Kończymy iteracje: i14 = .54953

na czwartej i mamy: i1 = i 14
i1 = .5495

Możemy przystąpić do następnego kroku t=2h=0.008s


przyjmując jako punkt startowy otrzymany wynik
dla t=h=0.004s.

0.004  15 − 5 ⋅ .5495 15 − 5i 2 
i 2 = .5495 +  + 2

2  0.1 − 0.006 ⋅ .5495 0.1 − 0.006i 2 
2

czyli 15 − 5i k2 Start:
k +1
i2 = 0.7991 + 0.002
( )
0.1 − 0.006 i k 2
2 i10 = .5495
i12 = 1.0487

i 22 = 1.008

i 32 = 1.01123

i 42 = 1.011

Kończymy:
i 2 = i 42 = 1.011
Metoda jawna wstecznego różniczkowania

W algorytmie jawnym:
p p
x n +1 = ∑ a i x n − i + h ∑ b i f ( x n − i , t n − i )
i =0 i =0

Wybieramy: p=m-1

i przyjmujemy: b-1 =b1=...=bm-1 =0

mamy: m−1
x n +1 = ∑ ai x n−i + b0hf ( x n , t n )
i =0

m−1 m−1
Układ równań :
∑ i
a ( − i ) +k
k ∑ i
b ( − i ) k −1
=1
i =0 i =0 k=0,1,...,m
przyjmuje postać: m−1
∑ ai = 1
i =0
m−1
b0 − ∑ iai = 1
i =1
m−1
∑ ( − i ) k
a i = 1 dla k = 2,3,4...., m
i =1

dla m=1 mamy: a0 = 1


b0 = 1

znowu mamy metodę Eulera: x n+1 = x n + hf ( x n , t n )

m=2 i mamy: a 0 + a1 = 1
b 0 − a1 = 1
a1 = 1
którego rozwiązanie ma postać: a0=0; a1=1; b0=2
i schemat:
x n+1 = x n−1 + 2hf ( x n , t n )

Dla m=3 mamy schemat:


3 1
x n +1 = − x n + 3x n−1 − x n− 2 + 3hf ( x n , t n )
2 2
m=4
10 1
x n +1 = − x n + 6x n−1 − 2x n− 2 + x n− 3 + 4hf ( x n , t n )
3 3
m=5

65 5 1
x n +1 = − x n + 10x n−1 − 5x n− 2 + x n− 3 − x n−4 + 5hf ( x n , t n )
12 3 4
Metody jawne wstecznego różniczkowania nie są używane
do samodzielnego rozwiązywania numerycznego równań
różniczkowych. Są niestabilne.

Metody niejawne wstecznego różniczkowania


(metody Geara)
Algorytm: p p
x n +1 = ∑ a i x n − i + h ∑ b i f ( x n − i , t n − i )
i =0 i = −1

przyjmujemy: p=m-1
b0=b1=...bm-1 =0
m−1
czyli: x n +1 = ∑ ai x n−i + b −1hf ( x n+1 , t n+1 )
i =0
a dla wyznaczenia współczynników mamy równania:

m −1
∑ ai = 1
i =0
m −1
∑ ( − i ) k
a i + kb −1 = 1 dla k = 1,2,..., m
i =1

m=1
a0 = 1
b −1 = 1

i schemat: x n+1 = x n + hf ( x n+1 , t n+1 )

niejawny schemat Eulera !


m=2 a 0 + a1 = 1
− a1 + b −1 = 1
a1 + 2b −1 = 1

którego rozwiązanie jest: a0 = 4 ; a1 = − 1 ; b −1 = 2


3 3 3
schemat przyjmuje postać:

4 1 2
x n +1 = x n − x n−1 + hf ( x n+1 , t n+1 )
3 3 3

dla m=3 mamy:


18 9 2 6
x n +1 = x n − x n−1 + x n− 2 + hf ( x n+1 , t n+1 )
11 11 11 11
m=4

48 36 16 3 12
x n +1 = x n − x n−1 + x n− 2 − x n− 3 + hf ( x n+1 , t n+1 )
25 25 25 25 25

Lokalny błąd obcięcia wzorów całkowania numerycznego

Definicja błędu obcięcia ε T :


ε T = x ( t n + 1 ) − x n +1

gdzie x(t) rozwiązanie dokładne.

W metodach wielokrokowych błąd ten można obliczyć.


Dla metody Adamsa – Bashfortha lokalny błąd obcięcia dla
metody k-go rzędu wyraża się zależnością:
Dla metody Adamsa – Bashfortha lokalny błąd obcięcia dla
metody k-go rzędu wyraża się zależnością:

ε T = C k x ( k +1 ) ( ξ ) h k +1
ξ ∈ ( t n , t n +1 )
1 5 3 251
C1 = ; C 2 = ; C 3 = ; C4 =
2 12 8 720

k−2
1  k +1 k
Ck =  k − ( k − 1 ) k +1
− ( k − 1 ) ∑ b ( k − 1 − i ) 
( k + 1) !  i =0
i

Dla metody Adamsa – Moultona lokalny błąd obcięcia dla
metody k-go rzędu wyraża się zależnością:

ε T = C k x ( k +1 ) ( ξ ) h k +1
ξ ∈ ( t n , t n +1 )
1 1 1 19
C1 = − ; C 2 = − ; C 3 = − ; C4 = −
2 12 24 720

k −3
1 
Ck = ( k − 1) − ( k − 2) − ( k + 1) ∑ b i ( k − 2 − i ) k 
k +1 k +1
( k + 1) !  i = −1 
Dla metody Geara lokalny błąd obcięcia dla
metody k-go rzędu wyraża się zależnością:

ε T = C k x ( k +1 ) ( ξ ) h k +1
ξ ∈ ( t n , t n +1 )
1 2 3 12
C1 = − ; C 2 = − ; C 3 = − ; C4 = −
2 9 24 125

1  k +1 k − 2 k
Ck =  k − ∑ a ( k − 1 − i ) k +1
− b ( k + 1 ) k 
( k + 1) !  i =0
i −1

Oszacowanie pochodnej rzędu k+1


Jeżeli mamy równanie różniczkowe:

x = f ( x , t )
przyjmiemy oznaczenia: fn = x n = f ( x ( t n ) , t n )
x n = x( t n )

Definiujemy operator różnicy wstecznej ∇ jfn:


∇ 0fn = fn
∇1fn = ∇ 0fn − ∇ 0fn−1 = fn − fn−1
∇ 2fn = ∇1fn − ∇1fn−1 = fn − 2fn−1 + fn− 2
∇ 3fn = ∇ 2fn − ∇ 2fn−1 = fn − 3fn−1 + 3fn− 2 − fn− 3

∇ jfn = ∇ j−1fn − ∇ j−1fn−1
i mamy: ∇ 0 ( hx n ) = hx n = hfn

czyli łatwo wyznaczyć ocenę I pochodnej.

Druga pochodna:

∇1 ( hx n ) = hx n − hx n−1 ≈ hx n − hx n − h( − h ) x n =


= h 2x n

czyli mamy ocenę drugiej pochodnej:


h 2x n ≈ h( fn − fn−1 )

Ocena trzeciej pochodnej:


∇ 2 ( hx n ) = ∇1 ( hx n ) − ∇1 ( hx n−1 ) ≈ h 2x n − h 2x n−1 ≈
≈ h 2x n − h 2x n − h 2 ( − h )xn = h 3xn
i ostatecznie h 3xn ≈ h( fn − 2fn−1 + fn )

Dla k+1 pochodnej mamy:

∇ k ( hx n ) = ∇ k −1 ( hx n ) − ∇ k −1 ( hx n−1 ) ≈ h k x (nk ) − h k x (nk−)1 ≈


≈ h k x (nk ) − h k x (nk ) − h k ( − h ) x (nk +1) = h k x (nk +1)

czyli w każdym kroku potrafimy szacować lokalny


błąd obcięcia

Przykład:
Dany jest obwód:
10Ω

q ( t )

10V
uc C = C0 ( 1 − m cos ωt )

gdzie C0=100µ F równanie: Rq + u c = E


m=0.5 q
uc =
f=10kHz C
ω =2π f
i ostatecznie w postaci normalnej:
E q
q = −
R RC0 ( 1 − m cos ωt )
E q
q = −
R RC0 ( 1 − m cos ωt )

z warunkiem początkowym: q(t=0)=0

Będziemy liczyli jawną metodą Adamsa – Bashfortha


drugiego rzędu o schemacie:

3 1 
q n+1 = q n + h  f ( q n , t n ) − f ( q n−1 , t n−1 ) 
2 2 
Ponieważ schemat nie jest schematem samostartującym,
wystartujemy z metody Eulera

E q0 
q1 = q 0 + h  − 
 R RC 0 ( 1 − m cos ωt )
0 
Ocena błędu dla metody Eulera jest:

1 2
εT = h q ( ξ )
2

Z przybliżonej oceny mamy:  1 ≈ h( f1 − f0 )


h 2q

Ze względu na częstotliwość 10kHz wybierzmy krok


rzędu 1/10f co daje h=10-5 s i mamy:
q1=10-5 C

szacujemy drugą pochodną: h 2q


 = .9832E − 5
Błąd obcięcia wynosi: ε T = .4916E − 5
Dużo czy mało?
Odpowiedź w obliczeniu błędu względnego
ε T 0.4916E − 5
e= = = 0.4916
q1 1E − 5

Jeżeli przyjmiemy, że błąd nie większy od .01, to niestety


przekroczyliśmy zakres i musimy zmniejszyć krok.
Krok należy zmniejszyć około 50 razy.
Nowy krok h=.2E-6
q1=.2E-6C

Druga pochodna: h 2q
 = 8E − 11
Błąd obcięcia: ε T = 4E − 11

Błąd względny: e=.0002

Chyba wybraliśmy zbyt mały? Spróbujemy zwiększyć


Zwiększamy krok pięciokrotnie czyli h=1.0E-6

i mamy: q1=1.0E-6

f0=1
f1=0.998
ocena drugiej pochodnej: h 2q
 ≈ 1.9961E − 9
czyli błąd obcięcia: ε T = 0.998E − 9

Błąd względny:
ε T .998E − 9
e= = = .998E − 3 ≤ .001
q1 1.0E − 6

Można było wybrać większy.


Mamy już dwa punkty policzone: t0=0 q0=0
t1=1.0E-6 q1=1.0E-6

możemy przejść do schematu o dokładności II rzędu


Adamsa – Bashfortha:

3 1 
q n+1 = q n + h  f ( q n , t n ) − f ( q n−1 , t n−1 ) 
2 2 
z błędem: 5 3
ε T = h q
12

lub ponieważ h 3qn ≈ h( fn − 2fn−1 + fn− 2 )

5h
to ε T ≈ ( fn − 2fn−1 + fn− 2 )
12
Przy n=2 mamy policzone: f 2− 2 = f0 = 1
f 2−1 = f1 = 0.998

czyli na mocy algorytmu:


3 1 
q n+1 = q n + h  f ( q n , t n ) − f ( q n−1 , t n−1 ) 
2 2 
3 1 
q 2 = q1 + h  f1 − f0 
2 2 
i po podstawieniu: q 2 = 1.997E − 6
5h
Ocena błędu: ε T ≈ ( f 2 − 2f1 + f0 )
12
f 2 = 0.99604
εT
i ε T = 1.55197E − 11 stąd błąd względny e = q = 7.772E − 6
2
εT
e= = 7.772E − 6 < < 1.0E − 3
q2

Spełniliśmy więc błąd z dużym zapasem.


Warto było lepiej policzyć pierwszy krok.
Następny krok wykonamy biorąc krok 2 razy większy,
bo mamy taką możliwość, czyli:
h = 2.0E − 6
t0 = 0 q0 = 0 f 2− 2 = f 0 = 1
t 1 = 2.0E − 6 q1 = 1.997E − 6 f 2−1 = f1 = 0.99604
3 1 
q n+1 = q n + h  f ( q n , t n ) − f ( q n−1 , t n−1 ) 
2 2 
3 1 
q 2 = q1 + h  f1 − f0 
2 2 
q n+1 = q n + h  f ( q n , t n ) − f ( q n−1 , t n−1 ) 
 3 1
2 2 
3 1 
q 2 = q1 + h  f1 − f0 
2 2 
q 2 = 3.98512E − 6

f 2 = .99227
Ocena błędu:
ε T = 1.58333E − 10
εT
e= = 3.9731E − 5 < < 1.0E − 3
q2

Można znowu startując z dwóch znanych punktów dwukrotnie


zwiększyć krok czyli h=4.0E-6
Metody predyktor - korektor

Predyktor

Jawny algorytm Adamsa -Bashfortha

p
x 0n+1 = x n + h ∑ b i f ( x n− i , t n−i )
i =0

Korektor

Niejawny algorytm Adamsa - Moultona

 
( )
p
x kn++11 ( )
=  x n + h ∑ b i f x n−i , t n−i  + b −1hf x kn+1 , t n+1
 i =0 
Jako przykład rozpatrzymy nieliniową indukcyjność

t=0
R

Ψ =f(i)
E

Charakterystyka dławika: Ψ = 0.1i − 0.002i 3


Przyjmujemy R=5Ω , E=15V

Równanie obwodu jest dΨ


+ Ri = E
dt
Biorąc pod uwagę, że Ψ = 0.1i − 0.002i 3
mamy: di 2 di
0.1 − 0.006i + Ri = E
dt dt

lub zapisując w postaci normalnej będzie:

di E − Ri
=
dt 0.1 − 0.006i 2
z warunkiem początkowym: i(0)=0
Wybór kroku całkowania: Jeżeli odrzucimy człon nieliniowy,
to mamy obwód o indukcyjności L=0.1H i rezystancji 5Ω .

Stała czasowa tego obwodu wynosi 0.1/5=20ms. Przyjmujemy


krok czasowy h=0.005s
Obliczenia poprowadzimy wykorzystując jako predyktor
metodę Eulera

x 0n+1 = x n + hf ( x n , t n )

w naszym przypadku: 15 − 5i n
i 0n+1 = in + h
0.1 − 0.006i n2

i jako korektor – metodę trapezów:

x kn++11
 h  h k
(
=  x n + f ( x n , t n )  + f x n+1 , tn + 1 )
 2  2
 h 15 − 5i n  h 15 − 5i kn+1
i kn++11 = i n + 2
+
 2 0.1 − 0.006i n  2 0.1 − 0.006 i k
n +1 ( ) 2
Dopuszczamy błąd względny dla algorytmu trapezów e=0.001
i taki sam przyjmiemy błąd względny dla metody iteracji
w korektorze.

Start: t0=0
i0=0

Predyktor: 15 − 5 ⋅ 0
i10 = 0 + 0.005
0.1 − 0.006 ⋅ 0 2

i10 = .75
Korekcja:
0.005 15 − 5i kn+1
i1k +1 = 0.375 +
2 0.1 − 0.006 i k ( )
n +1
2
i11 = .666074
Błąd względny:
i1k +1 − i1k
e iter =
i 1k +1 Powtórzyć iterację!
e iter = 0.126

i12 = .6747191
Powtórzyć iterację!
e iter = .0128

i13 = .6738224
Powtórzyć iterację!
e iter = .00133

i14 = 0.673915 Zakończyliśmy iterację


e iter = .000138 i1=.673915
h
Ocena błędu algorytmu trapezów: ε T = ( f1 − f0 )
2
ε T = .07609
e = .1129

Błąd jest zbyt duży, ale nie mogliśmy zrobić dobrej oceny
gdyż powinniśmy liczyć błąd obcięcia z zależności:
h
ε T = f 2 − 2f1 + f0
12
ale jeszcze nie doszliśmy do punktu t2.

Wykonamy następny krok:


Predyktor: 15 − 5 ⋅ i1
i 02 = i1 + 0.005
0.1 − 0.006 ⋅ i12
i 02 = 1.27173

0.005 15 − 5i k2
Korektor: i1k +1 = 0.972821 +
( )
2 0.1 − 0.006 i k
2
2

i12 = 1.21207
e iter = .0492
i 22 = 1.2179165
e iter = .0048
i 32 = 1.21734377
e iter = .00047
i 2 = 1.21734377
Ocena błędu algorytmu trapezów: ε T = .0036279
e = .00298

No niestety błąd jest zbyt duży. Należy zmniejszyć krok.

Stabilność metod wielokrokowych

Analiza przenoszenia błędu:

Rozważmy następujący algorytm wielokrokowy:

 ( 4 8 
x n +1 = x n− 3 + h f x n , t n ) − f ( x n−1 , t n−1 ) + f ( x n− 2 , t n− 2 ) 
 3 3 

który jest algorytmem czwartego rzędu z błędem obcięcia:


28 ( 5 )
ε T = x ( ξ) h5
90

 ( 4 8 
x n +1 = x n− 3 + h f x n , t n ) − f ( x n−1 , t n−1 ) + f ( x n− 2 , t n− 2 ) 
 3 3 

Zastosujemy ten algorytm do bardzo prostego równania:


x = − λx

z warunkiem początkowym x(0)=1, którego rozwiązaniem


jest:
x ( t ) = e −λt
Dla
λ>0
jest to rozwiązanie wykładniczo dążące do zera
1
np. λ =10

f ( x) 0.5

0
0 0.5 1
x

Stosując algorytm:

 ( 4 8 
x n +1 = x n− 3 + h f x n , t n ) − f ( x n−1 , t n−1 ) + f ( x n− 2 , t n− 2 ) 
 3 3 

do równania:
x = − λx
mamy:
 8 4 8 
x n +1 = x n− 3 + h − λx n + λx n−1 − λx n− 2 
 3 3 3 

oznaczamy: σ = hλ

i równanie zapisujemy jako równanie różnicowe:


8 4 8
x n+1 − x n− 3 + σx n − σx n−1 + σx n− 2 = 0
3 3 3

Szukamy rozwiązania w postaci:

x n = Az n
8 4 8
x n+1 − x n− 3 + σx n − σx n−1 + σx n− 2 = 0
3 3 3
Podstawiając mamy:

n +1 n− 3 8 4 8
Az − Az + σAz − σAz + σAz n− 2 = 0
n n −1
3 3 3

Dzieląc przez Azn-3 mamy równanie charakterystyczne:

4 8 3 4 2 8
z + σz − σz + σz − 1 = 0
3 3 3

Dobieramy mały krok h tak, że σ < < 1


Równanie ma 4 pierwiastki. Jeżeli σ =0, to tymi pierwiastkami
są:
z 4 = 1 = e j0+ 2kπ ( k = 0,1, 2, 3)

z1 = 1
z2 = j
z 3 = −1
z4 = − j
j = −1

Rozwiązanie dla małych różnych od zera powinno być funkcją


analityczną σ , czyli można je zapisać w postaci:
z1 = 1 + a1σ + a 2σ 2 + a 3σ 3 + ...
z 2 = i + b1σ + b 2 σ 2 + b 3 σ 3 + ...
z 3 = − i + c1σ + c 2σ 2 + c 3 σ 3 + ...
z1 = −1 + d1σ + d 2σ 2 + d 3 σ 3 + ...

podstawiając kolejno pierwiastki do równania:

48 3 4 2 8
z + σz − σz + σz − 1 = 0
3 3 3

otrzymujemy dla z1:


(1 + a z + a z + a z + ...) +
1 2
2
3
3 4

+ (1 + a z + a z + a z + ... )
8 2 3 3
1 2 3 +
3
4
( 2 3
− 1 + a1z + a 2 z + a 3 z + ... +
3
2
)
8
(
+ 1 + a1z + a 2 z 2 + a 3 z 3 + ... + 1 = 0
3
)
Dla z2=j
( j + b z + b z + b z + ...) +
1 2
2
3
3 4

+ ( j + b z + b z + b z + ...)
8 2 3 3
1 2 3 +
3
4
( 2 3
− j + b1z + b 2 z + b 3 z + ... +
3
2
)
8
(
+ j + b1z + b 2 z 2 + b 3 z 3 + ... + 1 = 0
3
)

dla z3=-j
( − j + c z + c z + c z + ...) +
1 2
2
3
3 4

+ ( − j + c z + c z + c z + ... )
8 2 3 3
1 2 3 +
3
4
( 2 3
− − j + c1z + c 2 z + c 3 z + ... +
3
2
)
8
(
+ − j + c1z + c 2 z 2 + c 3 z 3 + ... + 1 = 0
3
)

dla z4=-1
( − 1 + d z + d z + d z + ...) +
1 2
2
3
3 4

+ ( − 1 + d z + d z + d z + ...)
8 2 3 3
1 2 3 +
3
4
( 2 3
− − 1 + d1z + d 2 z + d 3 z + ... +
3
2
)
8
(
+ − 1 + d1z + d 2 z 2 + d 3 z 3 + ... + 1 = 0
3
)

Podnosząc do potęgi i porównując współczynniki przy tych


samych σ znajdujemy:
a1 = − 1 j j 5
b1 = − c1 = d1 = −
1 3 3 3
a2 =
2
1
a3 = −
3!
1
a4 =
4!

czyli
z1 = 1− σ +
σ 2 σ 3 σ4
− +
2! 3! 4!
( )
+ O σ5 ≈ e −σ

z2
j
( )
= j − σ + O σ2
3
z2
j
( )
= − j + σ + O σ2
3
z4
5
( )
= −1 − σ + O σ 2
3
Rozwiązanie równania:

4 8 3 4 2 8
z + σz − σz + σz − 1 = 0
3 3 3

ma postać:

x n = A 1z1n + A 2 z n2 + A 3 z n3 + A 4 z 4n

Stałe A1, A2, A3, A4 wyznaczamy z warunków początkowych

Vous aimerez peut-être aussi