Tải bản đầy đủ (.pdf) (29 trang)

chuong_6_-_giai_gan_dung_pt_vi_phan.pdf

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>

Chương 6



GIẢI GẦN ĐÚNG



</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

I. GIẢI GẦN ĐÚNG PTVP CẤP 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


</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

1. Cơng thức Euler :



Để tìm nghiệm gần đúng của bài toán Cauchy


ta chia đoạn [a,b] thành n đoạn nhỏ bằng nhau


với bước h = (b-a)/n



x

<sub>o</sub>

= a, x

<sub>1</sub>

= x

<sub>0</sub>

+h, ... , x

<sub>k</sub>

= x

<sub>0</sub>

+ kh, ... , x

<sub>n</sub>

= b


x

<sub>o</sub>

= a, x

<sub>1</sub>

= x

<sub>0</sub>

+h, ... , x

<sub>k</sub>

= x

<sub>0</sub>

+ kh, ... , x

<sub>n</sub>

= b



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>



</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

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 :


</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

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


giải




ta có h = 0.2


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

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


</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

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



</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

2. Công thức Euler cải tiến :



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>),


</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

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


giải



ta có h = 0.2


</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

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


</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>

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>


</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

3. Công thức Runge Kutta bậc 4 :



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>


  


  


</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

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


</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>

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


</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

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à :


Tính sai số biết nghiệm chính xác là :


y(x) = (x+1)2 <sub>– 0.5e</sub>x


giải



ta có h = 0.2


</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>

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:


</div>
<span class='text_page_counter'>(17)</span><div class='page_container' data-page=17>

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)


</div>
<span class='text_page_counter'>(18)</span><div class='page_container' data-page=18>

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


</div>
<span class='text_page_counter'>(19)</span><div class='page_container' data-page=19>

II. GIẢI GẦN ĐÚNG HỆ PTVP :


Xét hệ phương trình vi phân cấp 1


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>


</div>
<span class='text_page_counter'>(20)</span><div class='page_container' data-page=20>

Để tìm nghiệm gần đúng, ta chia đoạn [a,b]



thành n đoạn nhỏ bằng nhau với bước h = (b-a)/n


và các điểm chia



x

<sub>o</sub>

= a, x

<sub>1</sub>

= x

<sub>0</sub>

+h, ... , x

<sub>k</sub>

= x

<sub>0</sub>

+ kh, ... , x

<sub>n</sub>

= b



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


</div>
<span class='text_page_counter'>(21)</span><div class='page_container' data-page=21>

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>)


</div>
<span class='text_page_counter'>(22)</span><div class='page_container' data-page=22>

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


</div>
<span class='text_page_counter'>(23)</span><div class='page_container' data-page=23>

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



</div>
<span class='text_page_counter'>(24)</span><div class='page_container' data-page=24>

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>


</div>
<span class='text_page_counter'>(25)</span><div class='page_container' data-page=25>

III. GIẢI GẦN ĐÚNG PTVP CẤP CAO:


Xét phương trình vi phân bậc m


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


</div>
<span class='text_page_counter'>(26)</span><div class='page_container' data-page=26>

Đặ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ệ


m phương trình vi phân cấp 1


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>


</div>
<span class='text_page_counter'>(27)</span><div class='page_container' data-page=27>

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>


</div>
<span class='text_page_counter'>(28)</span><div class='page_container' data-page=28>

đặ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>


</div>
<span class='text_page_counter'>(29)</span><div class='page_container' data-page=29>

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


</div>

<!--links-->

×