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

