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

giải phương trình vi phân bằng phương pháp runge-kuta 4

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 (935.82 KB, 9 trang )




ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
***
KHOA ĐIỆN – ĐIỆN TỬ














Giáo viên hướng dẫn: Lê Thị Quỳnh Hà






Các thành viên trong nhóm:

40901457: Nguyễn Phước Lộc


40902767: Võ Nhựt Tiến
40902741: Cù Văn Tiến
40903057: Huỳnh Trung Trực
40902907: Nguyễn Kim Triển
40902935: Phan Đức Trí






















Đề tài: Viết chương trình giải phương trình bằng phương pháp Runge-Kutta bậc 4.
Vẽ đồ thị hàm nhận được.








M
t
ph
ng
trình
vi
phân
c
p
1

th
vi
t
d
i
d
ng
gi
i
c
yf (x,y)
mà ta có th tìm c hàm y t o hàm c a nó. T n t i vơ s
nghi m tho mãn ph ng trình trên. M i nghi m ph thu c vào m t h ng s

tu ý. Khi cho tr c giá tr ban u c a y là y
o
t i giá tr u x
o
ta nh n c
m t nghi m riêng c a ph ng trình. Bài tốn Cauchy (hay bài tốn có i u
ki
n u) tóm l i nh sau: cho x sao cho b x a, tìm y(x) tho mãn i u
ki n:
)a(y
)y,x(
f
)x(y
(1)
Ng i ta ch ng minh r ng bài tốn này có m t nghi m duy nh t n u f
tho mãn i u ki n Lipschitz:
2121
yyL)y,x(f)y,x(f
v i L là m t h ng s d ng.
Ng
i ta c ng ch ng minh r ng n u f
y
( o hàm c a f theo y ) là liên
t c và b ch n thì f tho mãn i u ki n Lipschitz.
M t cách t ng qt h n, ng i ta nh ngh a h ph ng trình b c 1:
)y, ,y,y,x(fy
)y, ,y,y,x(fy
)y, ,y,y,x(
f
y

n21nn
n2122
n2111
Ta ph i tìm nghi m y
1
, y
2
, , y
n
sao cho:
)a(Y
)X,x(
f
)x(Y
v i:
n
2
1
y


y
y
Y
n
2
1
f



f
f
F
n
2
1
y


y
y
Y
CƠ SỞ LÝ THUYẾT
BÀI TOÁN CAUCHY
N u ph ng trình vi phân có b c cao h n (n), nghi m s ph thu c vào
n h
ng s tu ý. nh n c m t nghi m riêng, ta ph i cho n i u ki n u.
Bài toán s có giá tr u n u v i giá tr x
o
ã cho ta cho y(x
o
), y (x
o
), y (x
o
),
M t ph ng trình vi phân b c n có th a v thành m t h ph ng
trình vi phân c
p 1. Ví d n u ta có ph ng trình vi phân c p 2:
)a(y,)a(y

)y,y,x(
f
y
Khi
t u = y và v = y ta nh n c h ph ng trình vi phân c p 1:
)v,u,x(gv
vu
v i i u ki n u: u(a) = và v(a) =
Các ph ng pháp gi i ph ng trình vi phân c trình bày trong
ch
ng này là các ph ng pháp r i r c: o n [a, b] c chia thành n o n
nh b ng nhau c g i là các b c tích phân h = ( b a) / n.

§2.
PH
NG
PHÁP
EULER
ch
a
chính
xác
i
v
i
các
bài
toán
th
c

t
.
Xét bài toán Cauchy (1). Gi s ta ã tìm c giá tr g n úng y
i
c a
y(x
i
) và mu n tính y
i+1
c a y(x
i+1
). Tr c h t ta vi t công th c Taylor:
)c(y
!m
h
)x(y
!m
h
)x(y
2
h
)x(yh)x(y)x(y
)1m(
1m
i
)m(
m
i
2
ii1i

(11)
v i c (x
i
, x
i+1
) và:
)x(y,x
f
)x(y
iii
)x(y,xf
dx
d
)x(y
ii
1k
1k
i
)k(
Ta vi t l i (11) d i d ng:
)c(y
!m
h
)x(y
!m
h
)x(y
2
h
)x(yhyy

)1m(
1m
i
)m(
m
i
2
ii1i
(12)
Ta ã kéo dài khai tri n Taylor k t qu chính xác h n. tính y
i
, y
i
v.v. ta
có th dùng ph ng pháp Runge Kutta b ng cách t:
)i(
44
)i(
33
)i(
22
)i(
11i1i
krkrkrkryy
(13)
trong ó:

)kky,bhx(hfk
)ky,ahx(hfk
)y,x(hfk

)i(
2
)i(
1ii
)i(
3
)i(
1ii
)i(
2
ii
)i(
1
(14)
và ta c n xác nh các h s a, b, ; , , , ; r
1
, r
2
, sao cho v ph i c a (13)
khác v
i v ph i c a (12) m t vô cùng bé c p cao nh t có th có i v i h.
Khi dùng công th c Runge Kutta b c hai ta có:
)ky,ahx(hfk
)y,x(hfk
)i(
1ii
)i(
2
ii
)i(

1
(15)

)i(
22
)i(
11i1i
krkryy (16)
Ta có:
y (x) = f[x,y(x)]
)x(y,x
f
)x(y,x
f
)x(y
yx

Do
ó v ph i c a (12) là:
)x(y)y,x(f)y,x(f
2
h
)y,x(hf
iiyiix
2
ii
(17)
M t khác theo (15) và theo công th c Taylor ta có:
PHÖÔNG PHAÙP RUNGE KUTTA
iii

)i(
1
yh)y,x(h
f
k
])y,x(
f
k)y,x(
f
ah)y,x(
f
[hk
iiy
)i(
1iixii
)i(
2
Do ó v ph i c a (16) là:
)]y,x(
f
yr)y,x(
f
ar[h)y,x(
f
)rr(h
iiyi2iix2
2
ii21
(18)
Bây gi

cho (17) và (18) khác nhau m t vô cùng bé c p O(h
3
) ta tìm c các
h
s ch a bi t khi cân b ng các s h ng ch a h và ch a h
2
:
r
1
+ r
2
= 1
a.r
1
= 1/ 2
.r
2
= 1
Nh v y: = a, r
1
= (2a 1)/ 2a, r
2
= 1/ 2a v i a c ch n b t kì.
N u a = 1 / 2 thì r
1
= 0 và r
2
= 1. Lúc này ta nh n c công th c Euler. N u
a=1 thì r
1

= 1 / 2 và r
2
= 1/2. Lúc này ta nh n c công th c Euler c i ti n.
M
t cách t ng t chúng ta nh n c công th c Runge Kutta b c 4.
Công th c này hay c dùng trong tính toán th c t :
k
1
= h.f(x
i
, y
i
)
k
2
= h.f(x
i
+h/ 2, y
i
+ k
1
/ 2)
k
3
= h.f(x
i
+h/ 2, y
i
+ k
2

/ 2)
k
4
= h.f(x
i
+h, y
i
+ k
3
)
yi
+1
= yi + (k
1
+ 2k
2
+ 2k
3
+ k
4
) / 6
Ta
xây
d
ng
hàm
rungekutta()
th
c
hi

n
công
th
c
Runge
Kutta
b
c
4:


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 – x
2
+1, 0≤ x ≤1
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
– 0.5e
x




Giải:
Ta có h = 0.2
x
0

= 0, x
1
= 0.2, x
2
= 0.4, x
3
= 0.6, x
4
= 0.8, x
5
= 1













Xây dựng hàm rk4 trong matlab để giải phương trình vi phân theo phương pháp trên.

Hàm rk4 sẽ nhận vào 4 đến 5 đối số.
Nếu ta nhập số đối số bé hơn 4 thì chương trình sẽ báo lỗi để nhắc nhỡ.
Nếu ta nhập số đối số bằng 4 thì chương trình sẽ yêu cầu ta nhập số đoạn chia n.
Để giải phương trình vi phân dùng hàm trên trước hết ta phải định nghĩa hàm f.



Ví dụ: Ta giải lại phương trình: y’ = y – x
2
+1, 0≤ x ≤1, y(0) = 0.5, với n = 5


Định nghĩa trực tiếp hàm f từ của sổ Command Windows:




Định nghĩa hàm f trong của sổ Script rồi lưu thành file f.m






Vẽ đồ thị từ các giá trị x
k
,y
k
(giá trị trả về của hàm rk4):




function[x,y]=rk4(f,x0,x1,y0,h)


if nargin<4, error('Vui long nhap du doi so !! '), end;

if nargin<5, m = input('Nhap so doan chia n = ');,h=(x1-x0)/m; end;

x=[]; x(1)=[x0]; n=(x1-x0)/h;

for i=1:n, x(i+1)=x(i)+h; end;

y=[]; y(1)=[y0];

for i=1:n

K1=h*f(x(i),y(i));

K2=h*f(x(i)+h/2,y(i)+K1/2);

K3=h*f(x(i)+h/2,y(i)+K2/2);

K4=h*f(x(i)+h,y(i)+K3);

y(i+1)=y(i)+(K1+2*K2+2*K3+K4)/6;

end;


function [dy] = f(a,b)

dy = b-a^2 +1;

end



>> [X,Y]=rk4(inline('y-x^2+1','x','y'),0,1,0.5)


>> [X,Y]=rk4(@f,0,1,0.5)


plot(X,Y,'rd-', 'LineWidth',3)

xlabel('Truc X')

ylabel('Truc Y')

title('DO THI CUA HAM DA CHO')

grid on


Kết quả cửa sổ Command Windows:













>> [X,Y]=rk4(inline('y-x^2+1','x','y'),0,1,0.5)
Nhap so doan chia n = 5
n =
5
X =
0 0.2000 0.4000 0.6000 0.8000 1.0000
Y =
0.5000 0.8293 1.2141 1.6489 2.1272 2.6408
>> ve
>>

×