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

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

Đang tải... (xem toàn văn)

Thông tin tài liệu

ĐẠ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 có 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. 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) và )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: 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. 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 >> . 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.  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. 40 902907: Nguyễn Kim Triển 40 902935: 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

Ngày đăng: 29/06/2014, 09:32

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan