1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO CÁO BÀI TẬP LỚN PHƯƠNG PHÁP TÍNH

39 13 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 39
Dung lượng 530,38 KB

Nội dung

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC ỨNG DỤNG BÁO CÁO BÀI TẬP LỚN PHƯƠNG PHÁP TÍNH ĐỀ TÀI NHĨM 3, LỚP L08 Giáo viên hướng dẫn: Đậu Thế Phiệt TP HCM - 11/2021 DANH SÁCH THÀNH VIÊN STT Họ tên MSSV Nguyễn Phương Thú y 2014633 Đậ u Thị Kim Chi 2012718 Bù i Hữ u Phú c 2014150 Trầ n Ngọ c Thắ ng 2012082 Võ Vă n Nguyên 2013941 MỤC LỤC I BÀI TOÁN 1 Đề Cơ sở lý thuyết Code 10 Kết thu 13 II BÀI TOÁN .16 Đề 16 Cơ sở lí thuyết 16 Code 22 Kết thu 28 III BÀI TOÁN .30 Đề 30 Cơ sở lý thuyết 30 2.1Phương pháp Euler cải tiến 30 2.2Spline bậc ba tự nhiên 33 Code 34 Kết thu 37 I BÀI TOÁN 1 Đề bài: Mộ t vậ n độ ng viên nhảy bungee nhả y từ nú ixuố ng vớ i vậ n tố c thẳ ng đứ ng v đượ c mơ tả bằ ng mơ hình tố n họ c: dv Cd =gv ( xem hình), m khố i dt m lượ ng củ a vậ n độ ng viên Cd đượ c gọ i hệ số n Lực hướng lên lực cản khơng khí Lực hướng xuống trọng lực a) Giả sử ban đầ u vậ n độ ng viên nhảy trạ ng thá i nghỉ, hã y tìm biểu thứ c phâ n tích cho v b) Cho g= 9,8 (m/ s2), m= 68,1 (kg), Cd= 0,25 (kg/m) ngườ i nhả y lú c đầ u trạ ng thá i nghỉ, thiết lậ p bả ng để xá c định vậ n tố c củ a ngườ i nhảy sau mỗ i giâ y 10 giâ y đầ u tiên bằ ng cá ch sử dụ ng phương phá p củ a Euler Runge-Kutta đượ c sử a đổ i So sá nh kết thu đượ c vớ i giá trị tìm thấ y câ u a) c) Sử dụ ng kết củ a a) phương phá p phâ n giá c, phương phá p mả nh để xá c định hệ số n đố i vớ i mộ t vậ n độ ng viên nhả y cầ u có khố i lượ ng 95 (kg) vậ n tố c v = 46 (m / s) sau 10 giâ y rơi sai số tương đố i nhỏ 5% (Đoá n khoả ng cô lậ p a gố c) Cơ sở lý thuyết: Mộ t vậ n độ ng viên nhảy bungee nhả y từ nú i xuố ng vớ i vậ n tố c thẳ ng đứ ng v đượ c mô tả bằ ng cô ng thứ c sau: cd dv =g− v (xem hình), m dt m khố i lượ ng củ a vậ n độ ng viên c d đượ c gọ i hệ số n 2.1 Giả sử ban đầu vận động viên nhảy trạng thái nghỉ, tìm biểu thức phân tích cho v Ta có ng thứ c: c dv =g− d v dt m Nhâ n vế củ a phương trình cho cd , ta đượ c: m m dv m = g−v c d dt c d Đặ t a= √ mg , suy ra: cd m dv 2 =a −v c d dt Lấ y nguyên hà m vế: c d = dt (1) ∫ a2dv ∫ m −v Tham khả o bả ng tích phâ n, ta thấ y: dv x ∫ a2 −x2 = a tanh−1 a (2) Á p dụ ng cô ng thứ c (2) o phương trình (1): cd −1 v = t +C a a m Vì ban đầ u vậ n độ ng viên trạ ng thá i nghỉ nên v( 0)=0 Suy ra: tanh−1 ( )=0 C=0 √ (√ ) g cd Vậ y, cô ng thứ c biểu diễn vậ n tố c (v): v= gm ⁡ t 2.2 cd m Phương pháp Euler cải tiến: Xét bà i toá n tính hình ng củ a mộ t đườ ng cong chưa biết, bắ t đầ u tạ i mộ t điểm cho trướ c thỏ a mã n mộ t phương trình vi phâ n cho ¿ Ý tưởng: Ta chia đườ ng cong giớ i hạ n tạ i [a;b] nh n đoạ n nhỏ bằ ng nhau: h= b−a n Khi cá c điểm nú t t 0=a , t k =t +kh , k =0 ; 1; ; ; ,t n=b Giả sử y(t) có đạ o hà m cấ p liên tụ c [a;b], ta có ng thứ c khai triển Taylor bậ c 2: y (t k+1 )= y ( t k ) +h y ' ( t k ) + h '' y ( t k ) + y ' ' ' (ξ )h3 3! h2 → y (t k+1) ≈ y ( t k ) + h f ( t k , y k ) + f ' ( t k , y k ) → y (t k+1)≈ y ( t k ) + h f ( t , y ) + f ( t k +1 , y k+1 ) ) 2( k k Để tính tố n theo cô ng thứ c Euler i tiến đơn giả n hơn, ta thay: y k +1= y k +hf ( t k , y k ) Cô ng thứ c Euler i tiến: y k +1= y k +h f (t ¿ ¿ k , y k )+ f ( t k+1 , y k + hf ( t k , y k ) ) ¿ Vớ i k =0,1,2 , , n−1 So vớ i ng thứ c Euler ng thứ c Euler i tiến sử dụ ng phương phá p điểm giữ a (Mid-point) để thay: f (t ¿ ¿ k , y k )=f (t ¿ ¿ k , y k )+f ( t k+ , y k+1 ) ¿¿ Xét toán 1: dv ∆ v v ( t i+1 )−v ( t i ) ≈ = dt ∆ t t i+1−t i Từ ng thứ c cho, ta có : Suy ra: v ( t i +1 )−v ( t i ) t i+1−t i =g− cd v (t i ) m Á p dụ ng phương phá p Euler i tiến cho bà i toá n trên: , vớ i n=10 ¿ 2.3 Phương pháp Euler cải tiến: Bấ m má y: Quy ướ c A= 9,8 - 0,25 : 68,1 Y Giá trị đầ u : B = Y + A: { ' Cd v m v (0)=0 v =g− t = X; v=Y X = X + 1: Y=Y+ 0,25 [ A + 9,8 ] 68,1 B X = ( t0 = 0) Y = ( v(0) = 0) Giá trị X Giá trị Y v(1) 9,6237 v(2) 18,5852 v(3) 26,4015 v(4) 32,8445 v(5) 37,9176 v(6) 41,7725 v(7) 44,6251 v(8) 46,6953 v(9) 48,1770 v(10) 49,2271 Vậ y vậ n tố c củ a ngườ i nhả y 10 giâ y đầ u tiên vớ i bướ c kích thướ c h = (s) bằ ng phương phá p Euler 49,2271 m/s 2.4 Phương pháp Runge-Kutta: Phương phá p Euler cũ ng phương phá p Runge-Kutta bậ c 1, cò n phương phá p Runge-Kutta đâ y ta xét phương phá p Runge-Kutta bậ c (Cũ ng phương phá p đượ c biết đến rộ ng rã i nhấ t) Phương phá p RungeKutta bậ c cà ng cao cho kết cà ng xá c Ý tưở ng: Xét bà i tố n Cauchy : Tìm y(x) thỏ a: ¿ vớ i a ≤ x ≤ b tự phương phá p Euler, ta cũ ng chia quã ng đườ ng [a;b] nh n bướ c nhả y đoạ n nhỏ bằ ng nhau, từ ng bướ c có độ lớ n bằ ng: h= b−a n Vớ i cá c điểm nú t x 0=a , x i+1=x i +h , x i=b ; i=0 , , 2, , … Ta có : n y(x) i+1= y(xi +h) ≈ yk + ∑ A j K j j=1 K 1=hf (x i , y i) K 2=hf (x i+ α h , yi + β 21 K ) K 3=hf (x i+ α h , y i+ β31 K 1+ β 32 K 2) K n=hf ¿) Giả sử y(x) có đạ o hà m bậ c m liên tụ c [a;b], ta khai triển Taylor đến bậ c m rồ i thay x= x i+1, ta đượ c: y(xi+1) = y(xi +h) ≈ y(xi)+ y’(xi)h + y’’(xi) h2 h3 h4 + y(3)(xi) + y(4)(xi) + + y 24 (m) (xi) hm 1.2.3 … m Ta xét cô ng thứ c Runge-Kutta bậ c nên thay n=4 m=4, đồ ng 2 thờ i chọ n:α1 = 0; α2 = ; α3 = ; α4 = β21= 1 ; β31=0; β32= ; β42=0; β41=0; 2 β43= Ta đượ c cô ng thứ c Runge-Kutta bậ c 4: y(x) i+1= y(xi +h) ≈ yi + (K1 + 2K2 + 2K3 + K4) K 1=hf ( x i , y i) K1 h K 2=hf (x i+ , yi + ) 2 , Vớ i i = 0,1,2, ,n-1 K2 h K 3=hf (x i+ , y i+ ) 2 K 1=hf (x i+ h , y i + K ) Xét bà i tố n : Từ ng thứ c cho, ta có : Suy ra: v ( t i +1 )−v ( t i ) t i+1−t i =g− dv ∆ v v ( t i+1 )−v ( t i ) ≈ = dt ∆ t t i+1−t i cd cd 2 v ( t i ) → f ( t , v )=g− v m m Á p dụ ng phương phá p Runge-Kutta o bà i toá n: v(t i+1 ) = v(ti +h) ≈ vi + K 1=hf ( t i , v i )=h(g− ( (K + 2K2 + 2K3 + K4) cd v ) m i ) K1 cd K1 h K 2=hf t i+ , v i + =g− ( v i+ ) 2 m K c K h K 3=hf (t i+ , v i + )=g− d ( v i+ ) 2 m K 1=hf ( t i +h , v i + K ) =g− Ta có : v=g− cd ( vi + K )2 m Cd v , h=1; x0 = 0; y0 = m Bấ m má y: Quy ướ c v=Y Y =g− Cd 0,25 Y = 9,8 Y 68,1 m X x0 x0 + h x0 + h x0+h Y y0 y0+ A y0+ B y0+C Kết 9,8 9,7119 9,7134 9,4536 SHIF-STO A B C D y(1) = y(0) + = 0+ (A+2B+2C+D) (9,8+2*9,7119+2*9,7134+9,4536) = 9,6840 Tương tự ta có : Giá trị X Giá trị y 18,7107 26,5898 33,0824 38,1836 42,0435 44,8819 46,9254 48,3745 10 49,3910 Vậ y vậ n tố c củ a ngườ i nhả y 10 giâ y đầ u tiên vớ i bướ c kích thướ c h = (s) bằ ng phương phá p Runge-Kutta 49,3910 m/s 2.5 Phương pháp chia đơi: Xét bà i tố n f ( x )=0 vớ i khoả ng cá ch ly nghiệm (a,b) Nội dung phương pháp: Kết luận: Có thể thấ y giá trị MSE củ a mơ hình parabol nhỏ so vớ i mơ hình tuyến tính, nên ướ c lượ ng đưa bở i mơ hình parabol xá c Code: 3.1 Câu a: X = [1.3 1.8 4.5 9]; Y = [0.07 0.13 0.22 0.275 0.335 0.35 0.36]; N = length(X) % S -> 1/S^2 for i = : N X(1,i) = / (X(1,i)^2); end % v -> 1/v for i = : N Y(1,i) = / Y(1,i); end X_total = 0; Y_total = 0; XX_total = 0; XY_total = 0; % cal X total for i = : N X_total = X_total + X(1,i); end % cal Y total for i = : N Y_total = Y_total + Y(1,i); end % cal XX total for i = : N XX_total = XX_total + X(1,i)^2; 22 end % cal XY total for i = : N XY_total = XY_total + X(1,i)*Y(1,i); end % solve equantion syms a b % variables % this is the equantions need to be calculated eqn1 = XX_total*a + X_total*b == XY_total; eqn2 = X_total*a + N*b == Y_total; % the function to sol sol = solve([eqn1, eqn2], [a,b]); % results aSol = round(sol.a, 6) bSol = round(sol.b, 6) vm = 1/bSol; Ks=sqrt(aSol/bSol); fprintf('giá trị vm %f\n', vm); fprintf('giá trị Ks là: %f\n', Ks); % plot the figure figure x = 0:0.01:1; y = aSol*x+bSol; plot(x,y) title('biểu đồ minh họa') xlabel('nồng độ 1/S^2') ylabel('Tốc độ 1/v') hold on scatter(X, Y) hold off % cal the error 23 S = [1.3 1.8 4.5 9]; V = [0.07 0.13 0.22 0.275 0.335 0.35 0.36]; err = 0; for i=1 : N err = err + (V(1,i)-vm*S(1,i)^2/(Ks^2+S(1,i)^2))^2*1/N; end fprintf('sai số cần tính %f\n', err); 3.2 Câu b: X = [1.3 1.8 4.5 9]; Y = [0.07 0.13 0.22 0.275 0.335 0.35 0.36]; N = length(X) % % S -> 1/S^2 % for i = : N % X(1,i) = / (X(1,i)^2); % end % % v -> 1/v % for i = : N % Y(1,i) = / Y(1,i); % end X_total = 0; Y_total = 0; XX_total = 0; XY_total = 0; XXX_total = 0; XXY_total = 0; XXXX_total = 0; % cal X total for i = : N X_total = X_total + X(1,i); end % cal Y total 24 for i = : N Y_total = Y_total + Y(1,i); end % cal XX total for i = : N XX_total = XX_total + X(1,i)^2; end % cal XY total for i = : N XY_total = XY_total + X(1,i)*Y(1,i); end % cal XXX total for i = : N XXX_total = XXX_total + X(1,i)^3; end % cal XXXX total for i = : N XXXX_total = XXXX_total + X(1,i)^4; end % cal XXY total for i = : N XXY_total = XXY_total + (X(1,i)^2)*Y(1,i); end % solve equantion syms a b c% variables % this is the equantions need to be calculated eqn1 = XX_total*a + X_total*b + N*c == Y_total; eqn2 = XXX_total*a + XX_total*b + X_total*c== XY_total; eqn3 = XXXX_total*a + XXX_total*b + XX_total*c == XXY_total; % the function to sol sol = solve([eqn1, eqn2, eqn3], [a,b,c]); 25 % results aSol = round(sol.a, 6); bSol = round(sol.b, 6); cSol = round(sol.c, 6); fprintf('phương trình cần tìm v=%f.S^2 + %f.S + %f\ n',aSol,bSol,cSol) % plot the figure figure x = 0:0.1:10; y = aSol*x.^2+bSol*x+cSol; plot(x,y) title('biểu đồ minh họa') xlabel('nồng độ S') ylabel('Tốc độ v') hold on scatter(X, Y) hold off % cal the error S = [1.3 1.8 4.5 9]; V = [0.07 0.13 0.22 0.275 0.335 0.35 0.36]; err = 0; for i=1 : N err = err + (V(1,i)-(aSol*S(1,i)^2+bSol*S(1,i)+cSol))^2*1/N; end fprintf('sai số cần tính %f\n', err); 26 Kết thu được: 4.1 Câu a: Hình 2.1 Hình chụp từ cửa sổ Command Window Matlab Hình 2.2 Biểu đồ minh họa 27 4.2 Câu b: Hình 2.2 Hình chụp từ cửa sổ Command Window Matlab Hình 2.4 Biểu đồ minh họa Nhận xét: Qua kết tính tố n đượ c, ta thấ y đồ thị phương trình bậ c hai phù hợ p vớ i tậ p liệu đồ thị phương trình tuyến tính Bên cạ nh , xử lý liệu đườ ng cong, ta sử dụ ng hồ i quy phi tuyến thay sử dụ ng cá c phép biến đổ i tuyến tính Điều m cho kết tính tố n trở nên xá c Lý việc tố i ưu hó a sai số bình phương củ a liệu khô ng giố ng vớ i sai số củ a liệu cho ban đầ u 28 III BÀI TOÁN 3: Đề bài: Trong sinh họ c, mơ hình thú să n mồ i-con mồ i đượ c sử dụ ng để quan sá t tương tá c gữ a cá c loà i Mộ t mơ hình đượ c đề xuấ t bở i Lotka-Volterra: Trong x , y lầ n lượ t số lượ ng mồ i thú să n mồ i, a tố c độ phá t triển củ a mồ i, c tỉ lệ chết củ a thú să n mồ i, b d lầ n lượ t tỉ lệ đặ c trưng cho tá c độ ng củ a thú să n mồ i đố i vớ i cá i chết củ a mồ i phá t triển củ a thú să n mồ i t thờ i gian đượ c tính bằ ng thá ng a) Cho cá c số liệu sau: a=1,2 ; b=0,6; c=0,8 ; d=0,3 vớ i điều kiện ban đầ u x=2 y=1 Tìm số lượ ng mồ i thú să n mồ i sau 10 thá ng bằ ng phương phá p Euler vớ i độ dà i bướ c h=0,625 b) Vớ i liệu tìm đượ c, hã y xâ y dự ng đườ ng thẳ ng bậ c ba tự nhiên cho x y Vẽ đồ thị củ a x ( t ) y ( t ) cù ng hình Cơ sở lý thuyết: 2.1 Phương pháp Euler cải tiến 2.1.1 Phương trình vi phân Để tă ng độ xá c củ a phương phá p Euler ngườ i ta m sau: Theo cô ng thứ c Newton-Lepnitz, ta có t2 y ( t 2) − y ( t ) =∫ y ( t ) dt ' t1 Tính gầ n đú ng tích phâ n xá c định vế phả i bằ ng ng thứ c hình thang ta có : t2 h h ∫ y ' ( t ) dt ≈ [ y ' ( t ) + y ' ( t ) ]= [f ( t1 , y ( t ) ) + f ( t , y ( t2 ) ) ] t1 ,trong h=t −t Thay t bằ ng t k , t bằ ng t k+1, ta có : 29 y k +1= y k + h [ f ( t k , y k ) + f ( tk +1 , y k +1 ) ] , k=0,1 , … ,(n−1) (1) , vớ i y 0=α Ngườ i ta ng minh đượ c rằ ng sai số củ a (1) tạ i điểm x i : ¿ y k − y( t k )∨≤ M h , M hằ ng số khơ ng phụ thuộ c h Vậ y cô ng thứ c (1) xá c ng thứ c Euler Tuy nhiên có nhượ c điểm y k +1 xuấ t vế phả i Như vậ y biết y k ta vẫ n cò n phả i giả i mộ t phương trình đạ i số phi tuyến đố i vớ i y k +1 (nếu f (x , y ) phi tuyến đố i vớ i y ) Vì vậ y đâ y mộ t phương phá p ẩ n Ngườ i ta i tiến phương phá p (1) bằ ng cá ch phố i hợ p (1) vớ i phương phá p Euler sau: Ta có ng thứ c Euler y o =α y k +1 ≈ y k +h f ( t k , y k ) , k =0,1,2 , … ,(n−1) y 0= y (t ) biết Vớ i k =1 ,2 , ,n ta tính: z= y k −1 +hf ( t k−1 , y k−1 ) y k +1= y k + h [ f ( t k , y k ) + f ( tk , z ) ](2) k =0,1 , , n−1 Cô ng thứ c (2) đượ c gọ i cô ng thứ c Euler i tiến Như vậ y cô ng thứ c (2) đầ u tiên ngườ i ta dù ng cô ng thứ c Euler để ướ c lượ ng giá trị củ a y i (đượ c ký hiệu z ) dù ng z để tính Khi loạ i bỏ z ta đượ c cô ng thứ c Euler i tiến dướ i ng: y (t k+1 )≈ y k+1= y k +h f ( t k , y k )+ f ( t k+1 , y k +hf (t k , y k ) ) 2.1.2 Hệ phương trình vi phân Tương tự vớ i cô ng thứ c Euler đố i vớ i hệ phương trình vi phâ n : x ( t k ) ≈ x k =x k−1 +hf (t k−1 , x k−1 , y k−1 ) y ( t k ) ≈ y k = y k−1+ hg(t k−1 , x k−1 , y k−1) k =1,2 , … n Xét hệ phương trình vi phâ n ' x ( t )=f ( t , x ( t ) , y ( t ) ) 30 ' y ( t )=g ( t , x ( t ) , y ( t ) ) t ϵ [t 0, t 0+ H ] x ( t ) =α y ( t )=β Chia đoạ n [ t ,t + H ] nh n đoạ n nhỏ bằ ng có độ dà i h= H Cá c n điểm chia t k =t +k h , k =0,1 ,… , n Giá trị gầ n đú ng tạ i điểm t k củ a x (t) x k =x (t k ) , củ a y (t) y k = y (t k ) Ta xây dự ng cô ng thứ c hệ phương trình vi phâ n dự a phương phá p Euler i tiến sau: K x =hf ( t k −1 , x k−1 , y k−1 ) K y =hg ( t k −1 , x k−1 , y k−1 ) K x =hf ( t k −1 +h , x k−1+ K x , y k−1 + K y ) K y =hg ( t k −1 +h , x k−1+ K x , y k−1 + K y ) x ( t k ) ≈ x k =x k−1 + ( K x + K x ) y ( t k ) ≈ y k = y k−1+ ( K y + K y ) k =1,2 , … ,n 2.2 Thuật tốn: 2.2.1 Giải thuật cho phương trình vi phân theo phương pháp Euler cải tiến Nhậ p a , b , y n Đặ t h= b−a , t 0=a n Vớ i k =1,2 , , n tính z= y k −1 +hf ( t k−1 , y k−1 ) h y k = y k−1+ ¿ 2.2.2 Giải thuật cho hệ phương trình vi phân theo phương pháp Euler cải tiến - Nhậ p a , b , y , H - Đặ t h 0= H (0) (0) , t =a , y = y , vớ i k =1 ,2 , ,n tính n 31 K x =hf (t k−1 , x k−1 , y k−1 ) K y =hg(t k−1 , x k−1 , y k−1 ) K x =hf ( t k −1 +h , x k−1+ K x , y k−1 + K y ) K y =hg ( t k −1 +h , x k−1+ K x , y k−1 + K y ) - Từ tính đượ c: x ( t k ) ≈ x k =x k−1 + (K x + K x ) y ( t k ) ≈ y k = y k−1+ ( K y + K y ) k =1,2 , … ,n 2.3 Spline bậc ba tự nhiên 2.3.1 Định nghĩa spline bậc ba tự nhiên Cho f ( x) xá c định đoạ n [a , b] mộ t bả ng số x a=x x1 x2 … x n=b y y0 y1 y2 … yn Đặ t y k =f ( x k ),k =0 n Mộ t spline bậ c ba tự nhiên nộ i suy hà m f ( x) [a , b] hà m g( x ) thỏ a cá c điều kiện sau: - g( x ) có đạ o hà m đến cấ p liên tụ c [a , b] - g( x )=gk ( x ) đa thứ c bậ c ba mỗ i đoạ n [ x k , x k+1 ], ∀ k=0 n−1 - g ( x k )=f ( x k )= y k , ∀ k=0 n - g ' ' ( a ) =g ' ' ( b )=0 2.3.2 Thuật xác định spline bậc ba tự nhiên Điều kiện g' ' ( a )=g' ' ( b )=0 ⟹ c 0=c n=0 Bước 1: Tính h k =x k+1−x k , ∀ k=0 n−1 ; T Bước 2: Giả i hệ AC=B tìm C vớ i C=( c ; c ;… ; cn−1 ; c n ) 32 ( 0 h0 ( h0 +h 1) h1 0 h1 ( h1 +h2 ) h A= … … … … 0 0 0 0 … 0 … 0 … 0 … … … … … h n−2 ( hn−2+ hn−1 ) hn−1 … 0 ) ( ) y 2− y y − y0 −3 h1 h0 y 3− y y 2− y −3 B= h2 h1 … y n − y n−1 y −y −3 n−1 n−2 hn−1 hn−2 Bước 3: Tính cá c hệ số a k , b k , d k a k = y k , ∀ k=0 n b k= y k+1− y k h k c −c − ( c k+1 +2 c k ) k+1 k , ∀ k =0 n−1 hk 3 hk dk = c k +1−c k , ∀ k =0 .n−1 hk Code: function bai3 clear; clc; %chuong trinh giai %% Thong so dau vao a=1.2; b=0.6; c=0.8; d=0.3; h=0.625; N=16; %% Thong so ban dau, x la so moi, y la so thu san moi 33 x(1)=2; y(1)=1; tk(1)=0; %% Giai theo Euler cai tien for n=1:N K1x=h*(a*x(n)-b*x(n)*y(n)); K1y=h*(-c*y(n)+d*x(n)*y(n)); K2x=h*(a*[x(n)+K1x]-b*[x(n)+K1x]*[y(n)+K1y]); K2y=h*(-c*[y(n)+K1y]+d*[x(n)+K1x]*[y(n)+K1y]); x(n+1)=x(n)+(K1x+K2x)/2; y(n+1)=y(n)+(K1y+K2y)/2; tk(n+1)=tk(n)+h; end %Ve spline tu nhien ts=0:.625:10; xq1 = 0:.01:10; s1 = spline(ts,x,xq1); plot(ts,x,'o',xq1,s1,'-') hold on s2=spline(ts,y,xq1); plot(ts,y,'o',xq1,s2,' '); %% Tim nghiem chinh xac bang ham ode45 %%Hpt vi phan function dy=hpt(t,y) dy=zeros(2,1); dy(1)=a*y(1)-b*y(1)*y(2); %Y(:,1) la so moi dy(2)=-c*y(2)+d*y(1)*y(2);%Y(:,2) la so thu san moi end %%Giai ptvp [T Y]=ode45(@hpt,[0 10],[2 1]); %%Ve thi nghiem chinh xac 34 plot(T,Y(:,1),'-'); hold on plot(T,Y(:,2),' '); legend('Sample points X','Spline moi','Sample points Y','Spline thu san moi','Nghiem chinh xac moi','Nghiem chinh xac thu san moi') %% So luong va sai so moi va thu san moi thang 10 fprintf('Dong vat an co o thang 10'); disp(x(17)); fprintf('Dong vat an thit o thang 10'); disp(y(17)); fprintf('Sai so cua so luong moi thang 10'); disp(abs(x(17)-Y(17,1))); fprintf('Sai so cua so luong thu san moi thang 10'); disp(abs((y(17)-Y(17,2)))); end Kết thu được: Hình 3.1 Hình chụp từ cửa sổ Command Window Matlab 35 Nhận xét: Như vậ y ta sử dụ ng phương phá p Euler i tiến để giả i hệ phương trình vi phâ n độ xá c cao, vớ i sai số củ a số lượ ng mồ i thá ng thứ 10 0.7341 tương tự số lượ ng thú săn mồ i thá ng thứ 10 0.0628 Hình 3.2 Đồ thị thu Nhận xét: Bằ ng phương phá p Spline bậ c tự nhiên ta lậ p đượ c đồ thị nghiệm xấ p xĩ số lượ ng mồ i thú să n mồ i 10 thá ng Đồ ng thờ i đồ thị cho ta thấ y phụ thuộ c củ a thú să n mồ i mồ i vớ i nhau, số lượ ng mồ i tă ng số lượ ng thú săn mồ i cũ ng tă ng ngượ c lạ i số lượ ng mồ i giả m số lượ ng thú să n mồ i cũ ng giả m 36

Ngày đăng: 12/12/2022, 18:57

TỪ KHÓA LIÊN QUAN

w