ĐẠ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:... Đề tài: Viết chương trình g
Trang 1ĐẠ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:
Trang 2Đề 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
Trang 3M t ph ng trình vi phân c p 1 cĩ th vi t d i d ng gi i c
ki n:
) a ( y
) y , x ( ) x ( y
(1)
tho mãn i u ki n Lipschitz:
2 1 2
1) (x,y ) L y y y
, x (
t c và b ch n thì f tho mãn i u ki n Lipschitz
) y , , y , y , x ( f y
) y , , y , y , x ( f y
) y , , y , y , x ( f y
n 2
1 n n
n 2
1 2 2
n 2
1 1 1
Ta ph i tìm nghi m y1, y2, , yn sao cho:
) a ( Y
) X , x ( ) 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
Trang 4N u ph ng trình vi phân có b c cao h n (n), nghi m s ph thu c vào
Bài toán s có giá tr u n u v i giá tr xo ã cho ta cho y(xo), y (xo), y (xo),
) a ( y , )
a
(
y
) y , y , x ( y
) v , u , x ( g v
v u
§2 PH NG PHÁP EULER
Trang 5ch a chính xác i v i các bài tốn th c t
y(xi) và mu n tính yi+1 c a y(xi+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 ( y h ) x ( y ) x
(
1 m
i ) m ( m
i
2
i i
1
v i c (xi, xi+1) và:
) x ( y , x f )
x
(
) x ( y , x f dx
d ) x
(
1 k
i )
k
(
) c ( y
! m
h ) x ( y
! m
h )
x ( y 2
h ) x ( y h y
1 m i
) m ( m i
2 i
i 1
) i ( 4 4 ) i ( 3 3 ) i ( 2 2 ) i ( 1 1 i 1
trong ĩ:
) k k
y , bh x
( hf k
) k y
, ah x ( hf k
) y , x ( hf k
) i ( 2 ) i ( 1 i
i )
i
(
3
) i ( 1 i
i )
i
(
2
i i )
i
(
1
(14)
Khi dùng cơng th c Runge Kutta b c hai ta cĩ:
) k y
, ah x ( hf k
) y , x ( hf k
) i ( 1 i
i )
i
(
2
i i )
i
(
1
(15)
2 2 ) i ( 1 1 i 1
Ta cĩ:
y (x) = f[x,y(x)]
) x ( y , x f ) x ( y , x f )
x
(
Do ĩ v ph i c a (12) là:
) x ( y ) y , x ( f ) y , x ( f 2
h ) y , x
(
2 i
M t khác theo (15) và theo cơng th c Taylor ta cĩ:
PHƯƠNG PHÁP RUNGE KUTTA
Trang 6i i
i )
i
(
1 hf(x ,y ) hy
k
] ) y , x ( f k ) y , x ( f ah ) y , x ( [ h
Do ó v ph i c a (16) là:
)]
y , x ( f y r ) y , x ( f ar [ h ) y , x ( ) r r
(
h 1 2 i i 2 2 x i i 2 i y i i (18)
r1+ r2 = 1
a.r1 = 1/ 2
.r2 = 1
k1 = h.f(xi, yi)
k2 = h.f(xi+h/ 2, yi+ k1/ 2)
k3 = h.f(xi+h/ 2, yi+ k2/ 2)
k4 = h.f(xi+h, yi+ k3)
yi+1= yi + (k1+ 2k2 + 2k3+ k4) / 6
Trang 7Ví dụ : Dùng công thức Runge-Kutta tìm nghiệm gần đúng của bài toán Cauchy
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.5ex
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
Trang 8Xâ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 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
Trang 9Kế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
>>