Luận văn Giải gần đúng phương trình phi tuyến và phương trình vi phân trên máy tính điện tử
CHƢƠNG I
GIẢI GẦN ĐÚNG PHƢƠNG TRÌNH
PHI TUYẾN TRÊN MÁY TÍNH ĐIỆN TỬ
Đ1. GIẢI GẦN ĐÚNG PHƢƠNG TRÌNH f x ( ) 0
Phương trình f x ( ) 0 thường gặp nhiều trong thực tế. Tuy nhiên, ngoài
một số lớp phương trình đơn giản như phương trình bậc nhất, phương trình bậc hai,
phương trình bậc ba và bậc bốn là các phương trình có công thức nghiệm biểu diễn
qua các hệ số, và một vài lớp phương trình được giải nhờ các kĩ thuật của đại số
(phân tích ra thừa số, đặt ẩn phụ, ) để đưa về các phương trình bậc nhất hoặc bậc
hai, hầu hết các phương trình phi tuyến là không giải được chính xác (không có
công thức biểu diễn nghiệm qua các hệ số của phương trình), vì vậy người ta
thường tìm cách tìm nghiệm gần đúng của phương trình. Và ngay cả khi biết công
thức nghiệm, do tính phức tạp của công thức, giá trị sử dụng của công thức nhiều
khi cũng không cao. Thí dụ, ngay cả với lớp phương trình đơn giản là phương trình
đa thức bậc ba ax bx cx d 3 2 0, mặc dù có công thức Cardano để giải,
nhưng vì công thức này chứa nhiều căn thức khá cồng kềnh (xem, thí dụ:
Eric W. Weisstein: CRS Concise Encyclopedia of Mathematics, CRS Press, New
York, 1999, mục Cubic Equation, trang 362-365),
nên thực chất chúng ta cũng chỉ có thể tìm được nghiệm gần đúng. Hơn nữa, đa số
các phương trình, thậm chí những phương trình rất đơn giản về mặt hình thức
nhưng lại xuất phát từ các bài toán thực tế, thí dụ, phương trình x x cos không có
công thức biểu diễn nghiệm thông qua các phép toán cơ bản (cộng, trừ, nhân, chia,
khai căn, lũy thừa), nói cách khác, không giải được hoặc rất khó giải bằng các phép
biến đổi đại số, nhưng có thể giải gần đúng đến độ chính xác bất kì rất dễ dàng nhờ
phép lặp x x n n 1 cos , nhất là trên máy tính điện tử bỏ túi (chỉ cần bấm liên tiếp
một phím ).
Những phương trình xuất hiện trong các bài toán thực tế (thí dụ, khi đo
đạc, ) nói chung có thông tin đầu vào (thể hiện trên các hệ số, trong công thức) chỉ5
là gần đúng (sai số trong đo đạc, đánh giá, tính toán sơ bộ,.). Vì vậy việc tìm
nghiệm chính xác cũng không có ý nghĩa thực tế lớn, trong khi đó với các phương
pháp giải gần đúng phương trình, ta thường có công thức đánh giá độ chính xác của
nghiệm gần đúng và có thể tìm nghiệm đến độ chính xác bất kì cho trước, nên
phương pháp giải gần đúng phương trình có ý nghĩa rất quan trọng trong giải quyết
các bài toán thực tế.
Các phương pháp giải chính xác phương trình chỉ mang tính đơn lẻ (cho từng
lớp phương trình), còn các phương pháp giải gần đúng phương trình mang tính phổ
dụng: một phương pháp có thể dùng để giải cho những lớp phương trình rất rộng,
thí dụ, chỉ đòi hỏi hàm số là liên tục chẳng hạn, vì vậy khả năng ứng dụng của giải
gần đúng là rất cao.
Tóm tắt nội dung tài liệu: Luận văn Giải gần đúng phương trình phi tuyến và phương trình vi phân trên máy tính điện tử
ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC SƯ PHẠM TRẦN THỊ HOÀN GIẢI GẦN ĐÚNG PHƯƠNG TRÌNH PHI TUYẾN VÀ PHƯƠNG TRÌNH VI PHÂN TRÊN MÁY TÍNH ĐIỆN TỬ LUẬN VĂN THẠC SĨ TOÁN HỌC THÁI NGUYÊN - 200 ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC SƯ PHẠM TRẦN THỊ HOÀN GIẢI GẦN ĐÚNG PHƯƠNG TRÌNH PHI TUYẾN VÀ PHƯƠNG TRÌNH VI PHÂN TRÊN MÁY TÍNH ĐIỆN TỬ Chuyên ngành: Giải tích Mã số: 60.46.01 LUẬN VĂN THẠC SĨ TOÁN HỌC Người hướng dẫn khoa học: TS Tạ Duy Phượng THÁI NGUYÊN - 2007 1 MỤC LỤC Trang Lời nói đầu..............................................................................................2-3 Chương 1. Giải gần đúng phương trình phi tuyến trên máy tính điện tử...............................................4 Đ1. Giải gần đúng phương trình ( ) 0f x .......4 Đ2. Các phương pháp tìm nghiệm gần đúng của phương trình ( ) 0f x ......10 Đ3. Tìm nghiệm gần đúng của phương trình ( ) 0f x trên máy tính điện tử.....24 Chương 2. Giải gần đúng nghiệm của bài toán Cauchy cho phương trình vi phân thường trên máy tính điện tử ..................48 Đ1. Phương pháp giải gần đúng bài toán Cauchy cho phương trình vi phân thường......48 Đ2. Phương pháp Euler .........52 Đ3. Phương pháp Runge-Kutta ......57 Đ4. Giải bài toán Cauchy cho phương trình vi phân trên máy tính điện tử .........64 Kết luận..................................................................................................82 Tài liệu tham khảo...............................................................................83 2 LỜI NÓI ĐẦU Các bài toán thực tế (trong thiên văn, đo đạc ruộng đất,) dẫn đến việc cần phải giải các phương trình phi tuyến (phương trình đại số hoặc phương trình vi phân), tuy nhiên, các phương trình này thường phức tạp, do đó nói chung khó có thể giải được (đưa được về các phương trình cơ bản) bằng các biến đổi đại số. Hơn nữa, vì các công thức nghiệm (của phương trình phi tuyến hoặc phương trình vi phân) thường phức tạp, cồng kềnh, nên cho dù có công thức nghiệm, việc khảo sát các tính chất nghiệm qua công thức cũng vẫn gặp phải rất nhiều khó khăn. Vì vậy, ngay từ thời Archimedes, các phương pháp giải gần đúng đã được xây dựng. Nhiều phương pháp (phương pháp Newton-Raphson giải gần đúng phương trình phi tuyến, phương pháp Euler và phương pháp Runge-Kutta giải phương trình vi phân) đã trở thành kinh điển và được sử dụng rộng rãi trong thực tế. Với sự phát triển của công cụ tin học, các phương pháp giải gần đúng lại càng có ý nghĩa thực tế lớn. Để giải một phương trình bằng tay trên giấy, có khi phải mất hàng ngày với những sai sót dễ xảy ra, thì với máy tính điện tử, thậm chí với máy tính điện tử bỏ túi, chỉ cần vài phút. Tuy nhiên, việc thực hiện các tính toán toán học trên máy một cách dễ dàng càng đòi hỏi người sử dụng có hiểu biết sâu sắc hơn về lí thuyết toán học. Mặt khác, nhiều vấn đề lí thuyết (sự hội tụ, tốc độ hội tụ, độ chính xác, độ phức tạp tính toán,) sẽ được soi sáng hơn trong thực hành tính toán cụ thể. Vì vậy, việc sử dụng thành thạo công cụ tính toán là cần thiết cho mọi học sinh, sinh viên. Công cụ tính toán sẽ hỗ trợ đắc lực cho việc tiếp thu các kiến thức lí thuyết, giảng dạy lí thuyết gắn với thực hành tính toán, sẽ giúp học sinh, sinh viên không chỉ tiếp thu tốt hơn các kiến thức khoa học, mà còn tiếp cận tốt hơn với các phương pháp và công cụ tính toán hiện đại. Nói chung, trong các trường phổ thông và đại học hiện nay, việc gắn giảng dạy lí thuyết với tính toán thực hành còn chưa được đẩy mạnh. Điều này hoàn toàn không phải vì thiếu công cụ tính toán, mà có lẽ là vì việc phổ biến cách sử dụng các công cụ tính toán còn ít được quan tâm. Với mục đích minh họa khả năng sử dụng máy tính điện tử trong dạy và học môn Giải tích số, chúng tôi chọn đề tài luận văn Giải gần đúng phương trình phi 3 tuyến và phương trình vi phân trên máy tính điện tử. Luận văn gồm hai chương: Chương 1 trình bày ngắn gọn các phương pháp giải gần đúng phương trình phi tuyến và đặc biệt, minh họa và so sánh các phương pháp giải gần đúng phương trình thông qua các thao tác thực hành cụ thể trên máy tính điện tử khoa học Casio fx-570 ES. Chương 2 trình bày phương pháp Euler, phương pháp Euler cải tiến và phương pháp Runge-Kutta giải phương trình vi phân thường. Các phương pháp này được so sánh và minh họa qua thực hành tính toán trên máy tính Casio fx-570 ES và trên chương trình Maple. Có thể coi các qui trình và chương trình trong luận văn là các chương trình mẫu để giải bất kì phương trình phi tuyến hoặc phương trình vi phân nào (chỉ cần khai báo lại phương trình cần giải). Điều này đã được chúng tôi thực hiện trên rất nhiều phương trình cụ thể. Tác giả xin chân thành cám ơn TS. Tạ Duy Phượng (Viện Toán học), người Thầy đã hướng dẫn tác giả hoàn thành luận văn này. Xin được cảm ơn Trường Đại học Sư phạm (Đại học Thái Nguyên), nơi tác giả đã hoàn thành chương trình cao học dưới sự giảng dạy nhiệt tình của các Thầy. Xin được cám ơn Phòng Giáo dục Phổ Yên (Thái Nguyên), nơi tác giả công tác, đã tạo mọi điều kiện thuận lợi để tác giả hoàn thành khóa học và luận văn. Cuối cùng, xin được cám ơn Gia đình đã động viên, giúp đỡ và chia xẻ những khó khăn với tác giả trong thời gain học tập. Thái Nguyên, 20.9.2007 Trần Thị Hoàn 4 CHƢƠNG I GIẢI GẦN ĐÚNG PHƢƠNG TRÌNH PHI TUYẾN TRÊN MÁY TÍNH ĐIỆN TỬ Đ1. GIẢI GẦN ĐÚNG PHƢƠNG TRÌNH ( ) 0 f x Phương trình ( ) 0f x thường gặp nhiều trong thực tế. Tuy nhiên, ngoài một số lớp phương trình đơn giản như phương trình bậc nhất, phương trình bậc hai, phương trình bậc ba và bậc bốn là các phương trình có công thức nghiệm biểu diễn qua các hệ số, và một vài lớp phương trình được giải nhờ các kĩ thuật của đại số (phân tích ra thừa số, đặt ẩn phụ,) để đưa về các phương trình bậc nhất hoặc bậc hai, hầu hết các phương trình phi tuyến là không giải được chính xác (không có công thức biểu diễn nghiệm qua các hệ số của phương trình), vì vậy người ta thường tìm cách tìm nghiệm gần đúng của phương trình. Và ngay cả khi biết công thức nghiệm, do tính phức tạp của công thức, giá trị sử dụng của công thức nhiều khi cũng không cao. Thí dụ, ngay cả với lớp phương trình đơn giản là phương trình đa thức bậc ba 3 2 0 ax bx cx d , mặc dù có công thức Cardano để giải, nhưng vì công thức này chứa nhiều căn thức khá cồng kềnh (xem, thí dụ: Eric W. Weisstein: CRS Concise Encyclopedia of Mathematics, CRS Press, New York, 1999, mục Cubic Equation, trang 362-365), nên thực chất chúng ta cũng chỉ có thể tìm được nghiệm gần đúng. Hơn nữa, đa số các phương trình, thậm chí những phương trình rất đơn giản về mặt hình thức nhưng lại xuất phát từ các bài toán thực tế, thí dụ, phương trình cos x x không có công thức biểu diễn nghiệm thông qua các phép toán cơ bản (cộng, trừ, nhân, chia, khai căn, lũy thừa), nói cách khác, không giải được hoặc rất khó giải bằng các phép biến đổi đại số, nhưng có thể giải gần đúng đến độ chính xác bất kì rất dễ dàng nhờ phép lặp 1 cos n nx x , nhất là trên máy tính điện tử bỏ túi (chỉ cần bấm liên tiếp một phím ). Những phương trình xuất hiện trong các bài toán thực tế (thí dụ, khi đo đạc,) nói chung có thông tin đầu vào (thể hiện trên các hệ số, trong công thức) chỉ 5 là gần đúng (sai số trong đo đạc, đánh giá, tính toán sơ bộ,...). Vì vậy việc tìm nghiệm chính xác cũng không có ý nghĩa thực tế lớn, trong khi đó với các phương pháp giải gần đúng phương trình, ta thường có công thức đánh giá độ chính xác của nghiệm gần đúng và có thể tìm nghiệm đến độ chính xác bất kì cho trước, nên phương pháp giải gần đúng phương trình có ý nghĩa rất quan trọng trong giải quyết các bài toán thực tế. Các phương pháp giải chính xác phương trình chỉ mang tính đơn lẻ (cho từng lớp phương trình), còn các phương pháp giải gần đúng phương trình mang tính phổ dụng: một phương pháp có thể dùng để giải cho những lớp phương trình rất rộng, thí dụ, chỉ đòi hỏi hàm số là liên tục chẳng hạn, vì vậy khả năng ứng dụng của giải gần đúng là rất cao. Giải gần đúng phương trình liên quan đến nhiều vấn đề quan trọng khác của toán học. Thí dụ, theo điều kiện cần cực trị (Định lí Fermat), điểm 0x là điểm cực trị (địa phương) của hàm số ( ) y F x thì nó phải là điểm dừng, tức là 0 0'( ) '( ) 0 y x F x . Như vậy, để tìm điểm cực trị, trước tiên ta phải giải phương trình ' '( ) : ( ) 0 y F x f x để tìm điểm dừng (điểm được nghi ngờ là điểm cực trị). Trong thực tế để tìm nghiệm tối ưu, ta thường đi tìm các điểm dừng (nghi ngờ là cực trị) nhờ giải gần đúng phương trình ' '( ) : ( ) 0 y F x f x . Bởi vì một trong những thế mạnh của máy tính điện tử là khả năng lặp lại một công việc với tốc độ cao, mà giải gần đúng phương trình thực chất là việc thực hiện một dãy các bước lặp, nên nhờ máy tính mà việc giải gần đúng phương trình trở nên đơn giản, nhanh chóng và thuận tiện. Không những thế, máy tính còn cho phép, thông qua lập trình, mô phỏng quá trình thực hiện bước lặp giải phương trình, bởi vậy nó là công cụ tốt trợ giúp học sinh và sinh viên tiếp thu các kiến thức toán học nói chung, các phương pháp giải gần đúng phương trình nói riêng. Do đó thực hành giải gần đúng trên máy tính điện tử có một ý nghĩa nhất định trong giảng dạy và học tập bộ môn toán trong các trường phổ thông và đại học. Trong chương này, để giải gần đúng phương trình, chúng ta luôn giả thiết rằng, ( )f x là một hàm xác định và liên tục trên một đoạn nào đó của đường thẳng 6 thực. Nhiều khi điều kiện này đã là đủ để xây dựng phương pháp giải gần đúng. Trong một số phương pháp, ta sẽ giả thiết rằng ( )f x khả vi đến cấp cần thiết (có đạo hàm cấp một hoặc có đạo hàm cấp hai). Nếu ( ) 0 f x thì điểm x được gọi là nghiệm hoặc không điểm của phương trình ( ) 0 f x . Ta cũng giả thiết rằng các nghiệm là cô lập, tức là tồn tại một lân cận của điểm x không chứa các nghiệm khác của phương trình. Khoảng lân cận (chứa x ) này được gọi là khoảng cách li của nghiệm x . Các bước giải gần đúng phương trình Giải gần đúng phương trình ( ) 0 f x được tiến hành theo hai bước: Bước 1. Tìm khoảng chứa nghiệm Một phương trình nói chung có nhiều nghiệm. Ta cần tìm khoảng chứa nghiệm, tức là khoảng ( , )a b trong đó phương trình có nghiệm (có duy nhất nghiệm), bằng một trong các tiêu chuẩn sau. Định lí 1 (Bolzano-Cauchy) Nếu hàm ( )f x liên tục trên đoạn ,a b và thỏa mãn điều kiện ( ) ( ) 0 f a f b thì phương trình ( ) 0 f x có ít nhất một nghiệm trong khoảng ( , )a b . Ý nghĩa hình học của Định lí này khá rõ ràng: Đồ thị của một hàm số liên tục là một đường cong liên tục (liền nét), khi chuyển từ điểm ( , ( ))A a f a sang điểm ( , ( ))B b f b nằm ở hai phía khác nhau của trục hoành, đường cong này phải cắt trục hoành tại ít nhất một điểm (có thể tại nhiều điểm). Thí dụ, hàm số 3( ) 3 1 y f x x x có ( 2) 3 f ; ( 1) 1 f ; (0) 1 f và (2) 1 f nên p ... thức tính 0nx x nh : [> x:=n->n*h; := x n n h Khai báo thủ tục tính giá trị ny theo công thức Euler cải tiến: [> y:=proc(n) option remember; [> y(n-1)+h/2*(f(x(n-1),y(n-1))+ f(x(n),y(n-1)+h*f(x(n-1),y(n-1)))); [> end; 78 y nproc ( ) := option ;remember ( )y n 1 /1 2 h ( ) ( )f ,( )x n 1 ( )y n 1 ( )f ,( )x n ( )y n 1 h ( )f ,( )x n 1 ( )y n 1 end proc Khai báo giá trị ban đầu: [> y(0):=0; := ( )y 0 0 Lập dãy các giá trị của y từ 0 tới 20: [> seq(y(i),i=0..20); 0 .00006250000000.0003750009768.001187523634.002750192592.005313445880, , , , , , .009128432478.01444766188.02152597185.03062188483.04199943062, , , , , .05593052466.07269800874.09259948706.1159521276 .1430986522, , , , , .1744148130 .2103187590 .2512828469 .2978486637 .3506463408, , , , Vào gói công cụ Phương trình vi phân DEtools: [> with(DEtools): Tìm nghiệm đúng của phương trình vi phân nhờ lệnh dsolve: [> Sol:=dsolve({diff(Z(X),X)=X^2+(Z(X))^2,Z(0)=0},Z(X)); := Sol ( )Z X X BesselJ , -3 4 1 2 X2 BesselY , -3 4 1 2 X2 BesselJ , 1 4 1 2 X2 BesselY , 1 4 1 2 X2 Ấn định công thức nghiệm: [> assign(Sol); Lập mảng để so sánh giá trị gần đúng (tính theo công thức Euler) và giá trị đúng của phương trình (tính theo công thức nghiệm): [> array([seq([n,y(n),evalf(subs(X=n/10,Z(X)))],n=0..20]); 79 0 0 0. 1 .00006250000000 .00004166662214 2 .0003750009768 .0003333349060 3 .001187523634 .001125027190 4 .002750192592 .002666869814 5 .005313445880 .005209302335 6 .009128432478 .009003473190 7 .01444766188 .01430188852 8 .02152597185 .02135938017 9 .03062188483 .03043446027 10 .04199943062 .04179114620 11 .05593052466 .05570133762 12 .07269800874 .07244786118 13 .09259948706 .09232831036 14 .1159521276 .1156598536 15 .1430986522 .1427852338 16 .1744148130 .1740802646 17 .2103187590 .2099632190 18 .2512828469 .2509066824 19 .2978486637 .2974526313 20 .3506463408 .3502318440 Kết quả tính toán trên Casio fx-570 ES hoàn toàn trùng khớp với kết quả tính toán trên Maple. Với cùng số bước lặp (n=20, h=0.05), phương pháp Euler cải tiến cho kết quả tốt hơn phương pháp Euler rất nhiều. Phƣơng pháp Runge-Kutta cấp bốn Ta có 2 2 0 0( , ) , 0, 0,f x y x y x y áp dụng công thức (3.3)-(3.4) ta được: 1 2 2 1 2 21 1 2 2 22 2 3 2 2 4 1 3 3 ( , ) 0.1 0.1 ( , ) ( ) ( ) 2 2 2 2 0.1 0.1 ( , ) ( ) ( ) 2 2 2 2 ( , ) ( 0.1 ) n n n n n n n n n n n n n n n n k f x y x y h hk k k f x y x y h hk k k f x y x y k f x y hk x y k và 1 1 2 3 4 1 2 3 4 0.1 [ 2 2 ] [ 2 2 ] 6 6 n n n h y y k k k k y k k k k Khởi động chương trình: 80 [> restart; Định nghĩa yrk ( tính y theo Runge-Kutta): > yrk:='yrk'; := yrk yrk Khai báo vế phải của phương trình (hàm f ): [> f:=(x,y)->x^2+y^2; := f ( ),x y x2 y2 Khai báo bước nội suy h=0.1: [> h:=0.1; := h .1 Khai báo công thức tính 0nx x nh : [> x:=n->n*h; := x n n h Khai báo thủ tục tính giá trị ny theo công thức Runge-Kutta cấp bốn: > yrk:=proc(n) > local k1,k2,k3,k4; > option remember; > k1:=f(x(n-1),yrk(n-1)); > k2:=f(x(n-1)+h/2,yrk(n-1)+h*k1/2); > k3:=f(x(n-1)+h/2,yrk(n-1)+h*k2/2); > k4:=f(x(n),yrk(n-1)+h*k3); > yrk(n-1)+h/6*(k1+2*k2+2*k3+k4) > end; yrk nproc ( ) := local ;, , ,k1 k2 k3 k4 option ;remember := k1 ( )f ,( )x n 1 ( )yrk n 1 ; := k2 ( )f , ( )x n 1 /1 2 h ( )yrk n 1 /1 2 h k1 ; := k3 ( )f , ( )x n 1 /1 2 h ( )yrk n 1 /1 2 h k2 ; := k4 ( )f ,( )x n ( )yrk n 1 h k3 ; ( )yrk n 1 /1 6 h ( ) k1 2 k2 2 k3 k4 end proc Khai báo giá trị ban đầu: [> y(0):=0; := ( )y 0 0 Lập dãy các giá trị của y từ 0 tới 10: [> seq(yrk(i),i=0..10); 81 0 .0003333348958.002666875369.009003498131.02135944733.04179128848, , , , , , .07244812485.1156603048.1740810040.2509078684.3502337417, , , , Vào gói công cụ Phương trình vi phân DEtools: [> with(DEtools): Tìm nghiệm đúng của phương trình vi phân nhờ lệnh dsolve: [> Sol:=dsolve({diff(Z(X),X)=X^2+(Z(X))^2,Z(0)=0},Z(X)); := Sol ( )Z X X BesselJ , -3 4 1 2 X2 BesselY , -3 4 1 2 X2 BesselJ , 1 4 1 2 X2 BesselY , 1 4 1 2 X2 Ấn định công thức nghiệm: [> assign(Sol); Lập mảng để so sánh giá trị gần đúng (tính theo công thức Runge-Kutta) và giá trị đúng của phương trình (tính theo công thức nghiệm): [> array([seq([n,yrk(n),evalf(subs(X=n/10,Y(X)))],n=0..10)]); 0 0 0. 1 .0003333348958 .0003333349060 2 .002666875369 .002666869814 3 .009003498131 .009003473190 4 .02135944733 .02135938017 5 .04179128848 .04179114620 6 .07244812485 .07244786118 7 .1156603048 .1156598536 8 .1740810040 .1740802646 9 .2509078684 .2509066824 10 .3502337417 .3502318440 So sánh các kết quả của phương pháp Runge-Kutta cấp 4 trong bảng trên với kết quả đã thực hiện theo phương pháp Euler và phương pháp Euler cải tiến, ta thấy rằng phương pháp này cho kết quả chính xác hơn tại mỗi điểm so với phương pháp Euler và phương pháp Euler cải tiến. Với số bước ít (n=10, h=0.1) ta đã thu được kết quả tốt hơn phương pháp Euler cải tiến với số bước gấp đôi (n=20, h=0.05). Hoàn toàn tương tự (với thay đổi duy nhất trong chương trình là khai báo lại bước nội suy h=0.05), ta có thể tính theo phương pháp Runge-Kutta với số bước n=20 (h=0.05) như sau. Khởi động chương trình: 82 [> restart; Định nghĩa yrk ( tính y theo Runge-Kutta): [> yrk:='yrk'; := yrk yrk Khai báo vế phải của phương trình (hàm f ): [> f:=(x,y)->x^2+y^2; := f ( ),x y x2 y2 Khai báo bước nội suy h=0.1: [> h:=0.05; := h .05 Khai báo công thức tính 0nx x nh : [> x:=n->n*h; := x n n h Khai báo thủ tục tính giá trị ny theo công thức Runge-Kutta bậc bốn: [> yrk:=proc(n) [>local k1,k2,k3,k4; [> option remember; [> k1:=f(x(n-1),yrk(n-1)); [> k2:=f(x(n-1)+h/2,yrk(n-1)+h*k1/2); [> k3:=f(x(n-1)+h/2,yrk(n-1)+h*k2/2); [> k4:=f(x(n),yrk(n-1)+h*k3); [> yrk(n-1)+h/6*(k1+2*k2+2*k3+k4) [> end; yrk nproc ( ) := local ;, , ,k1 k2 k3 k4 option ;remember := k1 ( )f ,( )x n 1 ( )yrk n 1 ; := k2 ( )f , ( )x n 1 /1 2 h ( )yrk n 1 /1 2 h k1 ; := k3 ( )f , ( )x n 1 /1 2 h ( )yrk n 1 /1 2 h k2 ; := k4 ( )f ,( )x n ( )yrk n 1 h k3 ; ( )yrk n 1 /1 6 h ( ) k1 2 k2 2 k3 k4 end proc Khai báo giá trị ban đầu: [> y(0):=0; := ( )y 0 0 Lập dãy các giá trị của y từ 0 tới 20: > seq(yrk(i),i=0..20); 83 0 .00004166667887.0003333349637.001125027316.002666870382.005209303462, , , , , , .009003475092.01430189176.02135938501.03043446755.04179115619, , , , , .05570135121.07244787939.09232833422.1156598841 .1427852732, , , , , .1740803146 .2099632826 .2509067623 .2974527325 .3502319724, , , , Vào gói công cụ Phương trình vi phân DEtools: [> with(DEtools): Tìm nghiệm đúng của phương trình vi phân nhờ lệnh dsolve: [> Sol:=dsolve({diff(Z(X),X)=X^2+(Z(X))^2,Z(0)=0},Z(X)); := Sol ( )Z X X BesselJ , -3 4 1 2 X2 BesselY , -3 4 1 2 X2 BesselJ , 1 4 1 2 X2 BesselY , 1 4 1 2 X2 Ấn định công thức nghiệm: [> assign(Sol); Lập mảng để so sánh giá trị gần đúng (tính theo công thức Runge-Kutta) và giá trị đúng của phương trình (tính theo công thức nghiệm): > array([seq([n,yrk(n),evalf(subs(X=n/20,Y(X)))],n=0..20)]); 84 0 0 0. 1 .00004166667887 .00004166662214 2 .0003333349637 .0003333349060 3 .001125027316 .001125027190 4 .002666870382 .002666869814 5 .005209303462 .005209302335 6 .009003475092 .009003473190 7 .01430189176 .01430188852 8 .02135938501 .02135938017 9 .03043446755 .03043446027 10 .04179115619 .04179114620 11 .05570135121 .05570133762 12 .07244787939 .07244786118 13 .09232833422 .09232831036 14 .1156598841 .1156598536 15 .1427852732 .1427852338 16 .1740803146 .1740802646 17 .2099632826 .2099632190 18 .2509067623 .2509066824 19 .2974527325 .2974526313 20 .3502319724 .3502318440 Các kết quả của phương pháp Runge-Kutta cấp 4 là tốt hơn rất nhiều so với kết quả đã thực hiện theo phương pháp Euler và phương pháp Euler cải tiến với cùng số bước (n=20, h=0.05) và tốt hơn phương pháp Runge-Kutta với số bước ít hơn (n=10, h=0.1). 85 KẾT LUẬN Luận văn trình bày ngắn gọn các phương pháp số giải phương trình phi tuyến và phương pháp Euler, phương pháp Euler cải tiến và phương pháp Runge-Kutta giải bài toán giá trị ban đầu của phương trình vi phân. Đặc biệt, qua một số bài toán cụ thể, luận văn trình bày chi tiết các thao tác thực hiện qui trình tính toán trên máy tính điện tử khoa học Casio fx-570 ES và trên chương trình Maple giải một số phương trình phi tuyến và phương trình vi phân thường. Các thao tác này có thể được coi là các chương trình mẫu để giải các bài toán khác (chỉ cần khai báo lại phương trình cần giải). Tính toán theo các phương pháp khác nhau và các công cụ khác nhau cho phép chúng ta hình dung rõ hơn các kết quả lí thuyết (sự hội tụ, độ chính xác, tốc độ hội tụ,), đồng thời cũng cho chúng ta thấy rõ hơn các điểm mạnh điểm yếu của mỗi phương pháp khi thực hiện cụ thê trên máy tính. Chúng ta cũng nhận thấy rằng, việc thực hành tính toán giải phương trình phi tuyến và phương trình vi phân trên máy tính, thậm chí trên máy tính điện tử khoa học (giá rẻ, thao tác đơn giản), rất dễ dàng, hoàn toàn có thể thực hiện được trên các giờ bài tập hoặc thực hành trên lớp, thậm chí cho học sinh phổ thông (giải gần đúng phương trình). Điều này cho phép có thể thay đổi hoặc bổ sung chương trình dạy và học toán trong trường phổ thông và đại học hiện nay theo hướng phát huy tính tích cực của học sinh, sinh viên và gắn các kiến thức lí thuyết với thực hành tính toán trên máy cũng như gắn các kiến thức cơ bản với sự phát triển của công nghệ hiện đại. Hy vọng rằng, các chương trình mẫu trong luận văn có thể được sử dụng trong các môn Phương pháp số giải phương trình phi tuyến và phương trình vi phân. 86 TÀI LIỆU TRÍCH DẪN 1. Phạm Kỳ Anh: Giải tích số. Nhà xuất bản Đại học Quốc gia Hà Nội, Hà Nội, 2001. 2. Nguyễn Minh Chương (Chủ biên), Nguyễn Văn Khải, Khuất Văn Ninh, Nguyễn Văn Tuấn, Nguyễn Tường: Giải tích số, Nhà xuất bản Giáo dục, Hà Nội, 2001. 3. Tạ Văn Đĩnh: Phương pháp tính. Nhà xuất bản Giáo dục, Hà Nội, 1999. 4. Doãn Tam Hòe: Toán học tính toán. Nhà xuất bản Giáo dục, Hà Nội, 2005. 5. Stoer, R. Bulirsch: Introduction to numerical Analysis, Springer, 2002, (Third Edition). 6. Tạ Duy Phượng: Giải tích số trên máy tính điện tử. Bản thảo Bài giảng Cao học. 7. Tạ Duy Phượng: Phương pháp số giải phương trình vi phân thường. Bản thảo Bài giảng Cao học. 8. Vũ Tuấn, Đoàn Văn Ngọc: Phương trình vi phân, Nhà xuất bản Giáo dục, 1996.
File đính kèm:
- luan_van_giai_gan_dung_phuong_trinh_phi_tuyen_va_phuong_trin.pdf