Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (108.52 KB, 29 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
Xét bài toán Cauchy : tìm nghiệm y=y(x) của
phương trình vi phân với giá trị ban đầu y<sub>0</sub>
y’ = f(x, y), x [a,b]
y(a) = y<sub>0</sub>
y(a) = y<sub>0</sub>
Các phương pháp giải gần đúng :
Công thức Euler
Công thức Euler cải tiến
Nghiệm gần đúng của bài toán là dãy {y<sub>k</sub>} gồm
các giá trị gần đúng của hàm tại x<sub>k</sub>
Giả sử bài toán có nghiệm duy nhất y(x) có
đạo hàm đến cấp 2 liên tục trên [a,b].
Khai triển Taylor ta có
y(x<sub>k+1</sub>) = y(x<sub>k</sub>) + (x<sub>k+1</sub>-x<sub>k</sub>) y’(x<sub>k</sub>) + (x<sub>k+1</sub>-x<sub>k</sub>)2 <sub>y’’(</sub><sub></sub>
k)/2
với <sub>k</sub> (x<sub>k</sub>, x<sub>k+1</sub>)
với <sub>k</sub> (x<sub>k</sub>, x<sub>k+1</sub>)
Công thức Euler :
Ví dụ : Dùng cơng thức Euler tìm nghiệm gần
đúng của bài tốn Cauchy
y’ = y – x2 <sub>+1, 0</sub><sub>≤</sub><sub>x</sub><sub>≤</sub><sub>1</sub>
y(0) = 0.5
với n = 5
Tính sai số biết nghiệm chính xác là :
Tính sai số biết nghiệm chính xác là :
y(x) = (x+1)2 <sub>– 0.5e</sub>x
ta có h = 0.2
Công thức Euler
y<sub>0</sub> = 0.5
y<sub>k+1</sub> = y<sub>k</sub> + h f(x<sub>k</sub>, y<sub>k</sub>) = y<sub>k</sub> + 0.2 (y<sub>k</sub> - x<sub>k</sub>2 <sub>+1) </sub>
k x<sub>k</sub> y<sub>k</sub> y(x<sub>k</sub>) |y(x<sub>k</sub>) - y<sub>k</sub> |
0 0 0.5 0.5 0
0 0 0.5 0.5 0
1 0.2 0.8 0.8292986 0.0292986
2 0.4 1.152 1.2140877 0.0620877
3 0.6 1.5504 1.6489406 0.0985406
4 0.8 1.98848 2.1272295 0.1387495
A = 0
B = 0.5
B = B + 0.2(B – A2 <sub>+ 1) : A=A+0.2:</sub>
(A+1)2-0.5eA:Ans-B
* Nhận xét : công thức Euler đơn gian, nhưng sai
y<sub>k+1</sub> = y<sub>k</sub> + (k<sub>1</sub>+k<sub>2</sub>)/2 k = 0,1, ..., n-1
k<sub>1</sub> = hf(x<sub>k</sub>, y<sub>k</sub>),
Ví dụ : Dùng cơng thức Euler cải tiến tìm nghiệm
gần đúng của bài toán Cauchy
y’ = y – x2 <sub>+1, 0</sub><sub>≤</sub><sub>x</sub><sub>≤</sub><sub>1</sub>
y(0) = 0.5
với n = 5
Tính sai số biết nghiệm chính xác là :
Tính sai số biết nghiệm chính xác là :
y(x) = (x+1)2 <sub>– 0.5e</sub>x
ta có h = 0.2
Cơng thức Euler cải tiến
y<sub>o</sub> = 0.5
y<sub>k+1</sub> = y<sub>k</sub> + (k<sub>1</sub> +k<sub>2</sub>) /2
k<sub>1</sub>= 0.2(y<sub>k</sub> - x<sub>k</sub>2 <sub>+1) </sub>
k<sub>2</sub> = 0.2(y<sub>k</sub> + k<sub>1</sub> – (x<sub>k</sub>+0.2)2 <sub>+1)</sub>
k x<sub>k</sub> y<sub>k</sub> y(x<sub>k</sub>) |y(x<sub>k</sub>) - y<sub>k</sub> |
k x<sub>k</sub> y<sub>k</sub> y(x<sub>k</sub>) |y(x<sub>k</sub>) - y<sub>k</sub> |
0 0 0.5 0.5 0
1 0.2 0.826 0.8292986 0.0033
2 0.4 1.20692 1.2140877 0.0072
3 0.6 1.6372424 1.6489406 0.0117
4 0.8 2.1102357 2.1272295 0.0170
A = 0 (x<sub>k</sub>)
B = 0.5 (y<sub>k</sub>)
C = 0.2(B – A2 <sub>+ 1) : </sub>
D = 0.2(B + C - (A+0.2)2 <sub>+ 1):</sub>
B=B + (C+D)/2:
A=A+0.2:
(A+1)2<sub>-0.5e</sub>A<sub>:Ans-B</sub>
1 1 2 3 4
1
1
1
( 2 2 )
6
( , )
( , )
<i>k</i> <i>k</i>
<i>k</i> <i>k</i>
<i>y</i> <i>y</i> <i>K</i> <i>K</i> <i>K</i> <i>K</i>
<i>K</i> <i>hf x y</i>
<i>K</i>
<i>h</i>
<i>K</i> <i>hf x</i> <i>y</i>
1
2
2
3
4 3
( , )
2 2
( , )
2 2
( , )
<i>k</i> <i>k</i>
<i>k</i> <i>k</i>
<i>k</i> <i>k</i>
<i>h</i>
<i>K</i> <i>hf x</i> <i>y</i>
<i>K</i>
<i>h</i>
<i>K</i> <i>hf x</i> <i>y</i>
<i>K</i> <i>hf x</i> <i>h y</i> <i>K</i>
Ví dụ : Xét bài toán Cauchy
y’ = 2.7xy + cos (x+2.7y), 1.2≤x
y(1.2) = 5.4
Dùng cơng thức Runge-Kutta tính gần đúng y(1.5)
với bước h = 0.3
x<sub>o</sub> = 1.2, y<sub>o</sub> = 5.4
y<sub>1</sub> = y<sub>0</sub> + (K<sub>1</sub>+ 2K<sub>2</sub>+ 2K<sub>3</sub>+ K<sub>4</sub>) /6
Công thức Runge-Kutta bậc 4
K<sub>1</sub>= 0.3(2.7x<sub>o</sub>y<sub>o</sub> + cos(x<sub>o</sub>+2.7y<sub>o</sub>))
K<sub>2</sub>= 0.3(2.7(x<sub>o</sub>+0.3/2)(y<sub>o</sub>+K<sub>1</sub>/2) +cos(x<sub>o</sub>+0.3/2 +2.7(y<sub>o</sub>+K<sub>1</sub>/2))
K<sub>3</sub>= 0.3(2.7(x<sub>o</sub>+0.3/2)(y<sub>o</sub>+K<sub>2</sub>/2) +cos(x<sub>o</sub>+0.3/2 +2.7(y<sub>o</sub>+K<sub>2</sub>/2))
K<sub>4</sub>= 0.3(2.7(x<sub>o</sub>+0.3)(y<sub>o</sub>+K<sub>3</sub>) +cos(x<sub>o</sub>+0.3 +2.7(y<sub>o</sub>+K<sub>3</sub>)
Bấm máy ta được
Bấm máy ta được
Ví dụ : Dùng cơng thức Runge-Kutta tìm nghiệm
gần đúng của bài toán Cauchy
y’ = y – x2 <sub>+1, 0</sub><sub>≤</sub><sub>x</sub><sub>≤</sub><sub>1</sub>
y(0) = 0.5
với n = 5
Tính sai số biết nghiệm chính xác là :
y(x) = (x+1)2 <sub>– 0.5e</sub>x
ta có h = 0.2
A = 0 (x<sub>k</sub>)
B = 0.5 (y<sub>k</sub>)
C = 0.2(B – A2 <sub>+ 1) : </sub>
D = 0.2(B + C/2 - (A+0.1)2 <sub>+ 1):</sub>
E = 0.2(B + D/2 - (A+0.1)2 <sub>+ 1):</sub>
F = 0.2(B + E - (A+0.2)2 <sub>+ 1):</sub>
B =B + (C+2D+2E+F)/6:
B =B + (C+2D+2E+F)/6:
A =A+0.2:
y<sub>k+1</sub> = y<sub>k</sub> + (K<sub>1</sub>+ 2K<sub>2</sub>+ 2K<sub>3</sub>+ K<sub>4</sub>) /6
Công thức Runge-Kutta bậc 4
K<sub>2</sub> = 0.2 [y<sub>k</sub> + 0.1(y<sub>k</sub> - x<sub>k</sub>2 <sub>+1) –(x</sub>
k+0.1)2 +1 ]
= 0.2(1.1 y<sub>k</sub> – 1.1x<sub>k</sub>2 <sub>– 0.2x</sub>
k + 1.09)
K<sub>1</sub>= 0.2(y<sub>k</sub> - x<sub>k</sub>2 <sub>+1) </sub>
K<sub>3</sub> = 0.2[ y<sub>k</sub> + 0.1(1.1y<sub>k</sub> – 1.1x<sub>k</sub>2 <sub>– 0.2x</sub>
k + 1.09)
– (x<sub>k</sub>+0.1)2 <sub>+1 ]</sub>
= 0.2(1.11y<sub>k</sub> – 1.11x<sub>k</sub>2 <sub>– 0.22x</sub>
k + 1.099)
K<sub>4</sub> = 0.2[ y<sub>k</sub>+0.2(1.11y<sub>k</sub>–1.11x<sub>k</sub>2<sub>–0.22x</sub>
k+1.099)
y<sub>0</sub> = 0.5
y<sub>k+1</sub> = y<sub>k</sub>+0.2(6.642y<sub>k</sub>–6.642x<sub>k</sub>2<sub>–1.284x</sub>
k+6.5578)/6
k x<sub>k</sub> y<sub>k</sub> y(x<sub>k</sub>) |y(x<sub>k</sub>) - y<sub>k</sub> |
0 0 0.5 0.5 0
1 0.2 0.8292933 0.8292986 0.0000053
1 0.2 0.8292933 0.8292986 0.0000053
2 0.4 1.2140762 1.2140877 0.0000115
3 0.6 1.6489220 1.6489406 0.0000186
4 0.8 2.1272027 2.1272295 0.0000269
y’<sub>1</sub> = f<sub>1</sub>(x, y<sub>1</sub>, y<sub>2</sub>, ..., y<sub>m</sub>)
y’<sub>2</sub> = f<sub>2</sub>(x, y<sub>1</sub>, y<sub>2</sub>, ..., y<sub>m</sub>)
. . .
. . .
y’<sub>m</sub> = f<sub>m</sub>(x, y<sub>1</sub>, y<sub>2</sub>, ..., y<sub>m</sub>)
với a≤ x ≤ b và thỏa điều kiện ban đầu
y<sub>1</sub>(a) = <sub>1</sub>, y<sub>2</sub>(a) = <sub>2</sub>, .... , y<sub>m</sub>(a) = <sub>m</sub>
Nghiệm gần đúng là dãy { y<sub>k</sub>=(y<sub>1 k</sub>, y<sub>2 k</sub>, …, y<sub>m k</sub>)}
Công thức Euler :
y<sub>i k+1</sub> = y<sub>i k</sub> + h f<sub>i</sub>(x<sub>k</sub>, y<sub>1 k</sub>, … , y<sub>m k</sub>)
i=1..m; k = 0.. n-1
Công thức Euler cải tiến :
y<sub>i k+1</sub> = y<sub>i k</sub> + (K<sub>1 i</sub> + K<sub>2 i</sub>) / 2
K<sub>1 i</sub> = h f<sub>i</sub>(x<sub>k</sub>, y<sub>1 k</sub>, … , y<sub>m k</sub>)
K<sub>2 i</sub> = h f<sub>i</sub>(x<sub>k</sub>+h, y<sub>1 k</sub>+K<sub>1 1</sub>, … , y<sub>m k</sub>+K<sub>1 m</sub>)
i=1,m; k = 0, n-1
Công thức Runge-Kutta bậc 4 :
y = y + (K +2K +2K +K ) / 6
y<sub>i k+1</sub> = y<sub>i k</sub> + (K<sub>1 i</sub>+2K<sub>2 i</sub>+2K<sub>3 i</sub>+K<sub>4 i</sub>) / 6
K<sub>1 i</sub> = h f<sub>i</sub>(x<sub>k</sub>, y<sub>1 k</sub>, … , y<sub>m k</sub>)
Ví dụ : Sử dụng cơng thức Euler giải gần đúng
hệ pt vi phân
y’<sub>1</sub> = 3y<sub>1</sub> + 2y<sub>2</sub> – (2x2 <sub>+1)e</sub>2x
y’<sub>2</sub> = 4y<sub>1</sub> + y<sub>2</sub> + (x2 <sub>+2x –4) e</sub>2x
với 0 ≤x≤0.5
điều kiện ban đầu y<sub>1</sub>(0)=y<sub>2</sub>(0)=1
điều kiện ban đầu y<sub>1</sub>(0)=y<sub>2</sub>(0)=1
bước h = 0.1
So sánh với nghiệm chính xác
y<sub>1</sub>(x) = 1/3e5x <sub>–1/3e</sub>-x<sub>+e</sub>2x
Cơng thức Euler
y<sub>1 0</sub> = 1
y<sub>1 k+1</sub> = y<sub>1 k</sub> + h (3y<sub>1k</sub> + 2y<sub>2 k</sub> – (2x<sub>k</sub>2 <sub>+1)e</sub><sub>2xk</sub><sub>)</sub>
y<sub>2 0</sub> = 1
y<sub>2 k+1</sub> = y<sub>2 k</sub> + h (4y<sub>1k</sub> + y<sub>2 k</sub> + (x<sub>k</sub>2 <sub>+2x</sub>
k –4) e2xk)
x<sub>k</sub> y<sub>1k</sub> y<sub>1</sub>(x<sub>k</sub>) y<sub>2k</sub> y<sub>2</sub>(x<sub>k</sub>)
x<sub>k</sub> y<sub>1k</sub> y<sub>1</sub>(x<sub>k</sub>) y<sub>2k</sub> y<sub>2</sub>(x<sub>k</sub>)
0 1 1 1 1
0.1 1.4 1.4694 1.1 1.1650
0.2 1.9154 2.1250 1.3071 1.5116
0.3 2.5903 3.0691 1.6729 2.1518
A=0 (x)
B=1 (y<sub>1k</sub>)
C=1 (y<sub>2k</sub>)
D=B + 0.1 (3B + 2C – (2A2 <sub>+1)e</sub>2A<sub>):</sub>
C=C + 0.1 (4B + C + (A2 <sub>+2A –4) e</sub>2A<sub>):</sub>
B=D:
B=D:
A=A+0.1
A=0
e5A<sub>/3–e</sub>-A<sub>/3+e</sub>2A<sub>:</sub>
e5A<sub>/3+2/3e</sub>-A<sub>/3+A</sub>2<sub>e</sub>2A<sub>:</sub>
y(m)<sub>(x) = f(x, y, y’, ... , y</sub>(m-1)<sub>), a</sub><sub>≤</sub><sub>x</sub><sub>≤</sub><sub>b</sub>
với điều kiện ban đầu
với điều kiện ban đầu
Đặt y<sub>1</sub> = y, y<sub>2</sub> = y’, y<sub>3</sub> = y”, ... , y<sub>m</sub> = y(m-1)
Ta chuyển phương trình vi phân bậc m về hệ
y’<sub>1</sub> = y<sub>2</sub>
y’<sub>2</sub> = y<sub>3</sub>
. . .
với điều kiện ban đầu
y<sub>1</sub>(a) = <sub>1</sub>, y<sub>2</sub>(a) = <sub>2</sub>, .... , y<sub>m</sub>(a) = <sub>m</sub>,
. . .
y’<sub>m-1</sub> = y<sub>m</sub>
Ví dụ : Sử dụng cơng thức Euler giải gần đúng
pt vi phân cấp 2
y “ – 2 y’ + 2y = sinx e2x <sub>, 0</sub><sub>≤</sub><sub>x</sub><sub>≤0.5</sub>
điều kiện ban đầu
y(0) = -0.4, y’(0) = -0.6
với bước h = 0.1
với bước h = 0.1
So sánh với nghiệm chính xác biết nghiệm CX
y<sub>1</sub>(x) = 0.2e2x <sub>(sinx – 2cosx)</sub>
đặt y<sub>1</sub> = y, y<sub>2</sub> = y’ chuyển pt về hệ
y’<sub>1</sub> = y<sub>2</sub>
y’<sub>2</sub> = sinx e2x<sub>– 2 y</sub>
1 + 2y2
điều kiện y<sub>1</sub>(0) = -0.4, y<sub>2</sub>(0) = -0.6
Công thức Euler
Công thức Euler
y<sub>1 0</sub> = -0.4
y<sub>1 k+1</sub> = y<sub>1 k</sub> + 0.1 y<sub>2k</sub>
y<sub>2 0</sub> = -0.6
y<sub>2 k+1</sub> = y<sub>2 k</sub> + 0.1 (sinx<sub>k</sub>e2xk <sub>- 2y</sub>
x<sub>k</sub> y<sub>1 k</sub> y<sub>1</sub>(x<sub>k</sub>) y<sub>2 k</sub> y<sub>2</sub>(x<sub>k</sub>)=y’(x<sub>k</sub>)
0 -0.4 -0.4 -0.6 -0.6
0.1 -0.46 -0.4617 -0.64 -0.6316
0.2 -0.524 -0.5256 -0.6638 -0.6401
0.3 -0.5904 -0.5886 -0.6621 -0.6137
0.4 -0.6566 -0.6466 -0.6226 -0.5366
0.5 -0.7189 -0.6936 -0.5292 -0.3887
0.5 -0.7189 -0.6936 -0.5292 -0.3887
A=0
B=-0.4
C=-0.6
D=B+0.1C