1 TRUONG DAI HOC VINH KHOA TOAN SU DUNG NGON NGU LAP TRINH C# GIẢI GẦN ĐŨNG PHƯƠNG TRÌNH MỘT ẤN VÀ TÍNH TÍCH PHÂN KHỐ LUẬN TỐT NGHIỆP ĐẠI HỌC NGÀNH CỬ NHÂN KHOA HỌC TOÁN-TIN
Chuyên ngành:
Xác suất Thống kê và Toán ứng dụng
Cán bộ hướng dân: PGS.TS Trần Xuôn Sinh Sinh viên thực hiện: Nguyễn Thị Nhung
Lớp: 47Toán-Tin ứng dụng
Trang 3Chương 1 1 1.1 1.2 1.3 1.4 I 2.1 2.2 2.3 Chuong 2 1.1 1.2 I MUC LUC
Lời nói đầu
Các kiến thức cơ SỞ -¿¿-52225cz222cSveescvrverrrrrrrrrrrrrev Giải gần đúng phương trình một ẩn - - „000
Phương pháp lặp đơn ‹‹ - << ++ Phương pháp dây cung -. - << +
Phương pháp Newton cccc 22211111 222xxzrverrrrree
Tính gần đúng tích phân - -+++++++++52
Công thức hình thang «+ <<<<<<++
Cơng thức Parbol (Simpson) -‹ ¿+ + << 55s Công thức Newton - COotes -¿s.-55-5cc5c+2cc+cecxssxcsrvsrxee
Thiết kế chương trình bằng ngơn ngữ C#
©1806 015
kÙIo c9 010 -“dA Ô
Chức năng của C# -.- c6 c+ 2 x2 vsExvsrrvsrrrrrrrrer
Trang 5LỜI NÓI ĐẦU
Trong thời đại công nghệ thông tin ngày nay, việc ứng dụng công nghệ thông tin vào cuộc sống, cũng như các ngành khoa học ngày càng trở nên quan trọng và
cần thiết, các ứng dụng của phần mềm như Pascal, C, C# vào khoa học kỹ thuật ngày càng đóng vai trò quan trọng Trước đây khi công nghệ thông tin chưa phát triển thì việc giải các loại bài tốn thuộc bộ mơn Giải tích số như Phương trình hay tính Tích phân, thật khó khăn, dẫn đến kết quả không cao
Giờ đây khi máy tính được sử dụng rộng rãi thì những yêu cầu đó có thể được
giải quyết một cách đơn giản hơn Việc giải các loại bài toán Phương trình hay tính Tích phân bằng các phần mềm ứng dụng là nhanh và hiệu quả hơn rất nhiều Chỉ cần một thuật toán và chỉ cần thay các giá trị khác nhau thì sẽ cho ra các bài
toán khác nhau Việc tìm hiểu, học hỏi, ứng dụng và lập trình các phần mềm giải
quyết vấn đề này ngày nay là quan trọng và cần thiết
Đề tài khóa luận “Sử dụng ngôn ngữ lập trình C† giải gần đúng phương
trình một ẩn và tính tích phán” là một cách tập dượt nghiên cứu khoa học, ứng
dụng những thành tựu mới của công nghệ thông tin vào giải quyết các bài toán thuộc Giải tích số
Khóa luận được chia làm 2 chương:
Chương 1 trình bày một số phương pháp giải gần đúng phương trình một ẩn và tính gần đúng tích phân, với mỗi phương pháp chúng tôi trình bày yêu các bài toán khác nhau tương ứng với các lược đồ thuật toán giải Các kiến thức chủ yếu được trích dẫn từ tài liệu tham khảo [1]
Chương 2 trình bày các đoạn code và các giao diện mô tả cách nhập và các
kết quả của các phương pháp
Khoá luận này được thực hiện và hoàn thành tại Khoa Toán - Trường Đại học
Vinh, dưới sự hướng dẫn của thầy giáo PGS.TS Trần Xuân Sinh Tôi xin bày tỏ lòng biết ơn sâu sắc đến thầy, người đã dành cho tôi nhiều thời gian, sự quan tâm
Trang 62
Nhân dịp này tôi cũng xin được cảm ơn các thầy cô giáo trong Tổ Xác suất Thống kê và Toán ứng dụng Khoa Toán, đặc biệt là các thầy giáo PGS.TS Nguyễn
Văn Quảng, đã tạo điều kiện giúp đỡ em hồn thành Khố luận này
Mặc dù đã có rất nhiều cố gắng nhưng vì năng lực và thời gian còn hạn chế nên Khố luận khơng thể tránh khỏi những thiếu sót cả về nội dung và hình thức Vì vậy, tôi rất mong lời chỉ bảo và sự góp ý của quý thầy cô và bạn đọc
Tôi xin chân thành cảm ơn!
Vĩnh, tháng 05 năm 2010
Trang 7Chương I KIẾN THỨC CƠ SỞ 1 Giải gần đúng phương trình một ẩn 1.1 Mở đầu Trong chương này chúng ta sẽ nghiên cứu một số phương pháp giải phương trình một biến số f(x) =0, (1.1)
trong đó /(x) là hàm số (đại số hay siêu việt)
Phương trình (1.1), trừ một số trường hợp đặc biệt có công thức giải đúng,
nói chung rất phức tạp, do đó ta phải tìm cách giải gần đúng Ngoài ra, các hệ số của f(x) trong thực tế chỉ biết gần đúng, vì thế việc giải đúng (1.1) chẳng những
không thực hiện nổi mà nhiều khi không có ý nghĩa
Thông thường, quá trình giải phương trình (1.1) bao gồm hai bước:
1) Bước giải sơ bộ: ở giai đoạn này, ta tìm một khoảng đủ bé chứa duy nhất một nghiệm của /(x) Để xác định khoảng (ø, b) đủ bé như vậy, người ta thường sử dụng các phương pháp như: Phương pháp Đồ thị, Phương pháp Đại số, phương pháp Giải tích Chẳng hạn phương pháp Giải tích ta sử dụng mệnh đề: Nếu trên khoảng (a, b) phương trình (1.1) thoả mãn:
+) liên tục,
+ /()/@b) <0
+f (x) không đổi dấu,
thì (a, b) chứa duy nhất một nghiệm
2) Bước giải kiện toàn: Tìm nghiệm với độ chính xác cần thiết
Để giải phương trình (1.1) trong luận văn này, chúng tôi trình bày 3 phương pháp, đó là: Phương pháp lặp đơn, Phương pháp Newton và Phương pháp Dây cung
1.2 Phương pháp lặp đơn
Giả sử phương trình (1.1) tương ứng với phương trình sau:
Trang 84
Chọn x, c(ø,b) bất kỳ và tính các xấp xỉ tiếp theo nhờ công thức
X„¿¡ = Ø(X„)), (n 3 0) (1.3)
Định lý 2.1 Giả sử @ e C'[a.b] sao cho:
a) Vxe [a,b], es) <q<I1, trong đó q là một số thực nào đó xác định
b vxela,b| ø(x) e [a,b]
Khi đó
i) Phuong trinh (1.2) có nghiệm £ duy nhất trên [a,b]
1) Phép lặp (1.3) hội tụ, hơn nữa ta có ước lượng , (1.4) Ix, -E] Sq - 9)" |X, ~ Xp hoặc |x„=£|<4"(—4) |xị — xạ} Chứng mình Ta có, theo công thức số gia hữu hạn, lø()~ø()|=|ø (6)|x~ yÌ<4lx~ yỊ-
Vậy ø là ánh xạ co Không gian X =[a,b] v6i metric d(x, y):=|x—y| 1& khong gian
metric đủ Áp dụng nguyên lí ánh xạ co Banach ta suy ra điều phải chứng minh
Chú ý
1) Công thức (1.4) thường dùng làm ước lượng tiên nghiệm
Thật vậy, muốn x, -é|<e, ta chi cần:
4"q~4) | |x, -x9|< hay n >| nf 02 mu lạ =No
x1 ~ Xo
Như vậy, từ công thức (1.4), ta có thể chỉ ra số phép lặp cần thực hiện để
nghiệm gần đúng x„ xấp xỉ £ với độ chính xác « Mặt khác công thức (1.3) tiện lợi
trong quá trình tính toán vì nó cho ta ước lượng hậu nghiém (a- posteriori estimate)
Nếu sai số giữa hai xấp xỉ liên tiếp |x„ - x„_¡|< e—4)/4 thì |x„ —¿|<£ 2) Nếu a= xạ —r;b= xạ +r thì để ø đưa đoạn [a,ø] vào [a,b] chỉ cần
Trang 95
3) Nếu ø đơn điệu tăng (giảm) thì để ø đưa đoạn [z,;] vào trong nó thì chỉ cần
a< ø(a); ø(b) <b (a< ø(0);ø(a) < b)
4) Nếu ø(x) >0 (vx e[a,5]) thì dấy {x„} hội tụ đến £ từ một phía
Thật vậy, ta có
X„a ~§ = Pn) — 9S) = Ø (ế„)Œx„ — Ê)-
Do đó
sgn(x,.1 —$) = sgn(x, — $)
trong đó sgn(z) là hàm dấu của a
Trang 11Rõ ràng phép lặp a) và b) cho trường hợp ø,.ø, là phân kỳ còn cho ø, thì hội tụ rất nhanh về ¿ khá bé Lấy xạ =10, tính tốn theo cơng thức x„„¡ = (1000— x„)' 3, ta được xạ ~9.96666; x; ~9.06667 Do vay |x; - ¿|< ạ— g) [x; — xạ|< 590.000! Một cách tổng quát, ta có thể đặt: ø(z)=x+ ()./(), trong đó z(x) z 0 (Vx e [a,b| duoc chon dé |g'(x)| <1 va (vx e|a,b]) Ví dụ, nếu /(£)=0, còn f'(é) #0 ta cé thể lấy p(x) = FO x
Khi đó ø=x- 4 i va oth Vì ø{)=0 và ø'@)liên tục nên tìm được : ;
ø >0 khá bé, sao cho Vx e(£—=ø,£+ø_ |ø@(+)|<4<1
Phương pháp lặp đơn có những ưu điểm sau:
1 Xấp xỉ ban đầu x„ không nhất thiết phải thật gần nghiệm đúng ý
2 Phép lặp đơn có khả năng tự sửa sai Nếu xấp xỉ thứ *,x, mắc sai số thì coi như xấp xỉ ban đầu mới
3 Có các đánh giá sai số (tiên nghiệm, hậu nghiệm)
4 Dễ lập trình trên máy tính (xem sơ đồ khối)
5 Dễ song song hoá trên các máy siéu tinh (supe computer)
Nhược điểm của phương pháp lặp là khi hệ số ¿ gần 1, phép lặp hội tụ rất
chậm
1.3 Phương pháp dây cung
Trong mục này, ta luôn giả thiết các điều kiện sau thoả mãn:
h1) Phương trình (1.1) có nghiệm ¿ duy nhất trên [z,b] h2) / eC?[a,b| và ƒ'tx),ƒ”(x) không đổi dấu trên [a,»]
Trang 12Không giảm tổng quát, hàm f(x) trong phương trình (1.1) có thể coi có đạo
hàm /”(+) >0, nếu không ta xét phương trình g(x)=0 với g:=-—ƒ
Để xác định, ta gid sit f’<0 Diém x =a 1a diém Fourier, vi f(a) > f(6) =0 và /”(a)>0 Gọi x, là xấp xỉ thứ & >0 của nghiệm é (x„ = là xấp xỉ ban đầu)
Để tìm hoành độ của giao điểm của cung MN¿ với trục hoành, trong đó toạ độ của các điểm M,X, tương ứng là A⁄(z,ƒ(ø)), N,(x,,ƒ(zx,)), ta thay cung MN: bang
dây cung MN, và tìm hoành độ giao điểm của đoạn thẳng MA, với trục hoành
Phương trình đường thẳng đi qua hai điểm AM va N, 1a: 70/)~/0), —-a XK y„=/()+ 4) Cho y=0 ta tìm được hoành độ x,,, của giao điểm A⁄X, với trục hoành Sn 8 ca (1.5) Từ (1.5) suy ra x
Mere “Fe - fia Go,
Theo công thức số gia hữu hạn, ta có Xk XR FT LO) : SE) Bằng quy nạp ta chứng minh được rằng #Œ¿)<0 và do /f(x¿) <0 ta suy ra x¿¿¡ <x,
Hình 1.2 Như vậy dãy {x„ } đơn điệu giảm đến ý
Trang 139
Ta có thể đánh giá sai số của phương pháp dây cung
Trang 1410 ⁄ Input 4b,£/m y xX, =b r xị =%e — ƒ(X (Xe =đ)/(ƒ(,)—= /(4)) ‘ err =|f(x,)|/m Vi du Tim nghiém duong cua phuong trinh f (x)= x? -0.2x* -0.2x-1.2=0 với độ chính xác e =0.02 Vì /()=-0.6; (1.5) =1.425 nên ý e (1.5)
Dễ thấy ƒf(x)=3x”—0.4x—-0.2>0 và /ƒ”(x)=6x-0.4>0 với mọi xe(11.5)
Trang 1511 1.4 Phuong phap Newton
Chọn x4p xi ban dau x, là điểm Fourier: f(x,)f"(x,) > 0
Trang 1612 Ta co [/G„)| =|/'G„)|X„a — x„|< Mlx„„i — trong đó 1 =sup|/'(x,)|:x e|a,b]} n\>
Cho n> ta duoc f(¢)=0 Tir gia thiét (hl, muc 1.3) suy ra =€
Để đánh giá giá sai số phương pháp Newton ta giả thiết rằng |ƒ"(x)|< M, và
'(x)|> M; với mọi x e[a,b| Một mặt ta có: S Gn) = fC) - LE) = f' Onna — §)- Tir day suy ra ⁄ FÁO DI Iyer £|< (1.9) M, Mặt khác sử dụng (1.8) và khai triển Taylor ta có “ nh nn nan nnn nỉ 42 2 on M Tir bat dang thtic cudi suy ra | f(x,,,)| < > Pn ~ x, Ap dung (1.9) ta duoc 2 xua —|< 2w, nat Xl (1.10) Khi ø lớn, độ lệch |x„, -x„| khá bé Từ công thức (1.10) suy ra x„„ rất gần với £ (vì |x„ =¿|=0(x„u=x„| )
Khác với phương pháp lặp đơn, có bậc hội tụ 1 vì |x„, -¿|=0(|x„„, —x, 3),
phương pháp Newton có bậc hội tụ bằng 2
Phương pháp Newton hội tụ rất nhanh và do đó thường được sử dụng trên bước giải kiện toàn phương trình (1.1)
Sơ đồ khối mô tả phương pháp Newton gồm 2 phần Phần 1 là các thủ tục (ham) tinh f(x) va dao ham 7ƒ(x)= /(+) Phần 2 tìm nghiệm gần đúng theo
Trang 1713 Begin x procedure f(x) procedure Df (x) ‡ Input xạ,£ ——y Y: =*o ~ ƒŒu)/Œ¿ —4)/ Đƒ(x,) err = |Xị — Xạ] Ví dụ ƒ(x)=x?—3x?+75x—10000 Tìm nghiệm /(+) với 5 chữ số chắc Vì f(-10) = -1050; f(-11) = 3453 nén ý e(—11,—10) Ngoài ra, /<0; /”>0 Điểm Fourier xạ =-11 Áp dụng thuật toán (1.8), Ta được x; =-10.26; ƒ(x;)=0.2>0 Tiếp theo f(xy +0.001) = f(-10.260) <0, vì vậy ¿ e (—10.261;—10.260)
II TINH GAN ĐÚNG TÍCH PHÂN
Trong thực tế, nhiều khi ta phải tính tích phân xác định của hàm số mà không
n=l
biết nguyên hàm của nó Nếu định nghĩa tích phân 7 =lim > f(x,)Ax, thì tổng n0
Trang 1814
thực hiện một khối lượng tính tốn rất lớn Ngồi ra, trong nhiều trường hợp, hàm #Œ&) chỉ được cho dưới dạng bảng, vì vậy khái niệm nguyên hàm trở nên vô nghĩa
Phương pháp đơn giản nhất để tính gần đúng tích phân xác định là thay f(x)
bằng đa thức nội suy P(x), sau đó đặt b b 1= [7k [P()4 2.1 Công thức hình thang Ta chia đoạn [a,b] thành ø phần tử bằng nhau với các điểm chia ;=a+ih,¡= 0, 1, n; h = (b-a)/n
y Thay diện tích hình thang cong bằng diện tích (oes hình thang vuông, ta được (xem hình 1.4)
[fear = Tnhh, Tương tự, ta có
n=l nol
[te = ste Son
Hinh 1.4 Nhu vay ` be [700k * 2 9 +291 Ht We +I nd (1.11) Xo Sai số phương pháp
a) Sai số địa phương Thực chất của việc thay [rac ~ “ là xấp xỉ hàm
Trang 1915 3 b) Sai số toàn phần z = nh = — Sai số tính toán sẽ trình bày chung cho các công thức cầu phương (tính gần đúng tích phân) Ví dụ Tính 7= {_“Ý =In5.Lấy ø =4, theo (2.1) ta có x 5-1,,2,2,2,1,_101 1x (+=+—=+—+*—) 2x4 2 3 4 5 60
Vì f"(x) =2x nên |ƒ”(x)|<2(Vx €[L5) và như vậy r= ee P= ; = 0.66
2.2 Công thức Parbol (Simpson)
Chia [a,b] thành 2z phân bằng nhau với bước ¡= (b— ø)/2w Trên mỗi đoạn
Trang 2016 Sai số phương pháp Sai số địa phương 5 Xét ham F(x) = ®(f)- (;) ®() (0<z<ï) trong đó ®0)= [ 8= 3[/G¡ )34/G,)+ /0 +9] Dé thay F(0) = F(h) =0; F'(0) = F"(0) =0, con 2 605 “ur t 3Œ, +p)= /!)0,=0]= ` ®(/) hay 2 F=f OO + OW], (1.13) trong đó ý e (x, —, x; +7)
Ap dụng định lí Rolle va vi F(0)=F(A)=0, nén tim được /e(0,) để
Trang 2218 Từ đây ta suy ra sai số tồn phần của cơng thức Simpson thoả mãn điều kiện: 5 <n bra ys 90 180 (1.15) I ‘glob dx Ví dụ Tính tích phân 7 = f z theo công thức parabol ø =2; l+x Te la +4y, +27, +49, +9) = = (1+ 3.764714 1.6 + 2.56000+ 0.5) = 0.785399 Để ý rằng z = 47, ta được biểu thức gần đúng z x 3.141596
Phương pháp Runge trình bày dưới đây cho phép ta nhận được các ước lượng
hậu nghiệm (a- posteriori) khá hiệu quả của sai số
Gọi ® là sai số của phương pháp Simpson, theo (2.5) ® có dạng R~Cñ”,
trong đó C= cøns¿ >0 Tính tích phân 7 hai lần theo công thức (2.2) với bước h và h/2, ta được 1=3%) +CŒ`=Ề` +C(/2)! h h/2 Tir day suy ra R=Ch* -Íš -> _= h2 h 2.3 Công thức Newtfon - Cotes xa Giả sử phải tính tích phân 7 = [Z@& Đổi biến ¿ = , ta duoc b-a [2k=0-~a)[®(2)4£, trong đó ®(¿)= ƒ(a+(b-a)£) Chia đoạn [a,b] thành ø phần bằng nhau với bước b-a n Thay
h= , ta duoc x, =a+ih va G5 (i=0,n)
1 =(b-a) | Ode = (ba) f POC,
trong đó P(¢) là đa thức nội suy Lagrange của hàm ®(đ) với các số liệu
,0¢,)} -{ re} Đặt y= f(x,), ta có i
—*»
Trang 2319 ( 2).(-~Ð — -0(-^).Œ-Đ (~0(~).(£~”—5 P(v) = vụ 7 2 +y, i 2 i + TỰ, T I 0~2/0-5).0-) H H =0 =2).-Ð H q~0/4—) 4~”=5 H H Đặt i+] fee —- - 5-5 (Ide P= 1 ¡L7 141 , C0) CE, GD n n n
ta nhận thấy các hệ số ?'_ (¡=0,n) không phụ thuộc vào hàm f(x) va đoạn lấy tích
phân [z,;], do đó chúng có thể được tính sẵn, lập bảng va sử dụng lâu dài
Trang 2420
Khi ølớn, các hệ số Newton- Cotes P/ khá phức tap Vi vay, ta nên chia đoạn [0.1] thành một số phần bằng nhau Sau đó áp dụng công thức Newton- Cotes với
„' nhỏ hơn trên từng đoạn con Ví dụ Tính tích phân 7 = iF de theo công thức Newton- Cotes +x 41 59 9 34 Ta c6 P® =P’ =—_; P! =P? = —; P? = P} =; P? =—~;h=12=1 "ch 8400” ° 357 § 4 2807" 8 105 os Dat P =840P; Từ công thức Newton- Cotes suy ra: 6 1 & ~
1=>y,Pi => DvP = edt yP
Trang 2521 Chương 2 THIẾT LẬP CHƯƠNG TRÌNH BẰNG NGƠN NGỮ LẬP TRÌNH C# 1 Giới thiệu về C# 1.1 Sơ lược về C#
C# 1a 1 ngôn ngữ lập trình đa năng và khá toàn diện hiện nay C# được phát
triển bở Microsoft và cũng chính là I phần của NET Phù hợp với nhiều tiêu chuẩn
nhu ECMA (ECMA-334) va ISO (ISO/IEC 23270) C# là I trong 44 ngôn ngữ được hỗ trợ bởi Common Language Runtime của NET Framework
Tháng I năm 1999, Ander Hejlsberg đã xây dựng thành công 1 ngôn ngữ mới
gọi là "Cool" Cùng thời điểm này, dự ánh NET được phát hành ra thị trường tại cuộc họp của các chuyên gia lập trình vào tháng 7 năm 2000 và cũng chính từ đây "cool" chính thức chuyển tên thành C# Các thư viện ASP.NET runtime cũng được tích hợp vào
C# là ngôn ngữ lập trình đơn giản, hiện đại, có tính tổng quát và dễ dàng định hướng cho dự án Gói C# gần đây nhất chính là bản 3.0 và bản này chỉ có thể chạy với >NET Framework 3.5 Phiên bản 4.0 đang được hoàn tất
C# có khoảng 80 từ khóa và hơn 10 kiểu dữ liệu dựng sẵn, những C# có tính
diễn đạt cao C# hỗ trợ lập trình có cấu trúc, hướng đối tượng, hướng thành phần
(component oriented)
Trọng tâm của ngôn ngữ hướng đối tượng là lớp Lớp định nghĩa kiểu dữ liệu mới, cho phép mở rộng ngôn ngữ theo hướng cần giải quyết C# có những từ khóa dành cho việc khai báo lớp, phương thức, thuộc tính (property) mới C# hỗ trợ đầy đủ các khái niệm trụ cột trong lập trình hướng đối tượng: đóng gói, kế thừa, đa hình
Định nghĩa lớp trong C# không đòi hỏi tách rời các tập tin tiêu đề với tập tin cài đặt như C++ Hơn thế, C# hỗ trợ sưu liệu mới cho phép sưu liệu trực tiếp trong
tập tin mã nguồn Đến khi tập tin biên dịch sẽ tạo tập tin sưu liệu theo định dạng
Trang 2622
C# hỗ trợ khái niệm giao diện, interface (tương tự java) Một lớp chỉ có thể kế thừa duy nhất một cha nhưng có thể cài đặt nhiều giao diện
C# cung cấp những đặc trưng lập trình hướng thành phần property, sự kiện và dẫn hướng khai báo (được gọi là attribute) Lập trình hướng component được hỗ trợ
CLR thông qua siêu dữ liệu (metadata) Siêu dữ liệu mô tả các lớp bao gồm các phương thức và thuộc tính, các thông tin bảo mật
1.2.Chức năng của C#
* Không có hàm và biến dùng chung Mỗi coder phải tự thiết kế cho mình từ cơ bản
* C# hỗ trợ dạng dữ liệu Boolean
* Trong C#, bộ nhớ chỉ định có thể dùng kèm với khả năng chặn những cái
không an toàn Những sản phẩm được đánh dấu không an toàn cần xin phép để
chạy
* Không thể quản lý bộ nhớ 1 cách thoải mái tuy nhiên, nó sẽ tự thu gom
những câu lệnh vô nghĩa
* C# bao mat an toàn hon C++
II Cấu trúc và giao diện của chương trình
Chương trình gôm 4 From (giao diện)
From1 1a giao dién man hình chính của chương trình như hình 1 dưới đây:
Giao diện có 2 thực đơn cho người dùng chọn đó là Lựa chọn và Trợ giúp
Trang 2723
BẾI Giai phoang trình và tính tích phần (E JElX)
Lựa chọn - Trợgiúp
Sinh viên thực hiện:Nguyễn Thị Nhung
Giáo viên hướng dẫn:PGS.TS.Trần Xuân Sinh
Hình 2.1
Khi nhấp chuột vào thực đơn Lựa chọn thì ta có giao diện như hình 2.2
EỀ Giai phanng trình và tính tích phần
Sinh viên thực hiện:Nguyễn Thị Nhung
Giáo viên hướng dẫn:PGS.TS.Trần Xuân Sinh
Trang 28
24
Khi nhấp chuột vào thực đơn trợ giúp ta có giao diện như hình 2.3
Gisi phang trình và tính tích phân
Hình 2.3
Nếu lựa chọn thực đơn Giải phương trình thì ta có giao diện như hình 2.4 đoạn
code thể hiện thao tác này như sau:
private void giaiPhuongTrinhToolStripMenultem_Click(object sender, EventArgs e)
{
CodedomCalculator gpt = new CodedomCalculator(); gpt.Show();
}
Khi nhấp chuột vào thực đơn Tính tích phân thì ta có giao diện như hình 4 đoạn
code thể hiện thao tác này như sau:
private void tinhTichPhanToolStripMenultem_Click(object sender, EventArgs e)
{
frmTichphan tp = new frmTichphan();
Trang 2925
Giao diện các phương pháp giải phương trình như hình dưới
Trong đó ô Biểu thức cho phép ta nhập phương trình vào dưới dạng phương trình bất kì ví dụ:
3*x*x-4*x
Còn ô f(x) cho phép ta nhập đạo hàm của biểu thức tương ứng trên ô Biểu thức, ô x từ: cho phép nhập giá trị ban đầu của đoạn [a,b] ô Đến nhập giá trị của b,
ô sai số: nhập giá trị sai số cho việc tính toán chẳng hạn 0.002
Tương ứng với giải phương trình bằng phương pháp nào thì ta chọn phương pháp đó chẳng hạn ta dùng phương pháp Dây cung ta nhấp chuột vào chọn phương
pháp đó trong khung thuật toán, ô Kết quả để thể hiện kết quả cuối cùng của
nghiệm tìm được, ô Lỗi để thông báo các lỗi xảy ra trong quá trình tính toán nhằm
nhắc nhở người dùng, ô Chỉ tiết nhằm thể hiện nghiệm chỉ tiết qua các bước thực
hiện được, khung Hàm toán học để thêm các hàm có sẵn thông dụng khi ta tạo phương trình trong ô Biểu thức hoặc f?(x), nhập xong tất cả các ô cần thiết ta thực
hiện nhấp chuột vào nút Tính toán để tính nghiệm
Khi nhấp chuột vào nút Tính toán ta có code thể hiện thao tác này như sau:
private void btnCalculate_ Click(object sender, System.EventArgs e)
{
/Ichudi dé nhén phuong trinh dugc nhap vao trong 6 Biéu thức
Trang 3026 else
/Inéu la phitong phap newton (f(x)/f'(x))
ThuatToanTuyenTinh("(" + StringCale + ")/(" + txtfx.Text.TrimQ +
);
}
Trang 3127 } if (txtfx Text.TrimQ == "" && (rbtLapDon.Checked II rbtTiepTuyen.Checked)) { txtCompile.Text = "Bạn phải nhập biểu f(x) cua f(x)"; txtfx.Focus(); return false; } string StringFx = txtfx.Text.Trim(); return true; }
Code thể hiện các phương pháp đó như sau:
Code Phương pháp dây cung:
void ThuatToanChiadoi(string strCalc) { string result = ""; double n = 0; double From = double.Parse(txtFrom.Text); double To = double.Parse(txtTo.Text); double Saiso = double.Parse(txtSaiSo.Text);
n= Math.Round((Math.Log((To - From) / Saiso) / Math.Log(2)) + 1);
result += "Số lần chia đôi "+n; double a, b, c; a= double.Parse(txtFrom.Text); b = double.Parse(txtTo.Text); c=0;
result += "\n x0 = (a+ b)/2 =" + ((a+ b) / 2); // bat dau giai thuat
Trang 32}
28
c=(a+b)/2;
double TempA = calc(strCalc.Replace("x", a.ToString())); double TempC = calc(strCalc.Replace("x", c.ToString())); result += '\n x" +i+ "=" + strCalc.Replace("x", "x" + 1); result +=" =" + strCalc.Replace("x", c.ToString()); if (TempA * TempC > 0) a=C; else b=c; result += "="+c; } txtResult.Text = c.ToString(); //txtCompile.Text = result; txtkq.Text = result;
Code Phương pháp lap don
void ThuatToanLapDon(string strCalc)
{
bool exit = true;
Trang 3329 } a = double.Parse(txtFrom.Text); b = double.Parse(txtTo.Text); x0 = (a+b)/2; result += '\n xO = (a + b)/2 =" + x0; //bat dau gia thuat do { x1 =calc(strCalc.Replace("x", x0.ToString()));
result += '\n x" + (dem + 1) +" =" + strCalc.Replace("x", "x" + dem); result += "=" + strCalc.Replace("x", x0.ToString()); result += "="+ x1; if (Math Abs(x1 - x0) <= Saiso) exit = false; x0Ũ =xI; dem++; if (dem % 10 == 0) {
Trang 3430
bool exit = true;
double Saiso = double.Parse(txtSaiSo.Text); double a, b, x0, x1; int dem = 0; string result = ""; a = double.Parse(txtFrom.Text); b = double.Parse(txtTo.Text); x0 = (a+b)/2; result += '\n x0 = (a+ b)/2="+ x0; /fbat dau gia thuat do { x1 =x0 - calc(strCalc.Replace("x", x0.ToString()));
result += '\n x" + (dem + 1) +" =" + strCalc.Replace("x", "x" + dem); result += "=" + strCalc.Replace("x", x0.ToString()); result += "="+ x1; if (Math.Abs(x1 - x0) <= Saiso) exit = false; x0 =xI; dem++; if (dem % 10 == 0) {
if (DialogResult Yes == MessageBox.Show("Vong lap chạy duge : "+ dem + " lần rồi!\n Bạn có muốn ngưng chương trình không ?","Thông
bdo" ,MessageBoxButtons YesNo))
{
exit = false;
}
Trang 3531 txtResult.Text = x1.ToString(); txtkq.Text = result; Phuong Phap Tinh Biểu thức |3**-0.4*x xtừ: {0 Đến (05 —— | —" sai số: 1 Hàm toán học Thuật toán E O Day cung © Lap dén © Tiếp tuyến aobnoan lữ) Ok Ci Két quà 0.000130496024217709 To) |OFx Lối Loaf) i Loal.) Pow.) Sam] 4 — Thêm Chỉ tiết ^ xŨ = [a + b)¿2 = 25 xÌ = 3°x040-0.4°X0 = 3°0,25°0,25-0.4°0,25 = 0.0875 x2 = 3°1"41-0.4°x1 = 3°0.0875°0,0875-0.4°0,0875 = -0.01203125 x3 = 3°x2"R2-0.4%R2 = 3°-0.01203125*-0,01203125-0.4*-0,01203125 = 0.0052467529296875 x = 3°x3"X3-0.4%X3 = 3°0.0052467529296875"0,0052467529296875-0 4"0.0052457529296875 = - 0.00201611532295345 x5 = 3°x4"x4-0.4"x4 = 3°0.00201611582285945~01.00201611532235345.01.4*-I 0201611532235345 = fìnnn818R4rI538428212 w Hình 2.4
- Giao diện các phương pháp Tính gần đúng tích phân như hình 2.5 dưới:
Khi ta chọn PP hình thang thì ta sẽ thực hiện tính tích phân hàm theo phương pháp
hình thang, khi chọn PP Parabol thì ta sẽ thực hiện tính tích phân hàm theo phương pháp Parabol, trong khung trị ban đầu ta nhập các thông số ban đầu như a,b,n
Sau khi đã lựa chọn phương pháp ta nhấp vào nút Tính để tính tích phân với phương pháp tương ứng code thể hiện thao tác đó như sau:
Trang 36a,b,n 32 /Icac bién dé tinh todn cdc phutong phap tich phan int n, i; float a,b,x,h,s,tp,x2,y2,x4,y4; /lgán a cho ô text nhập cận trên a=Convert.ToSingle(txt1.TexÐ; !gán b cho ô text nhập cận dưới b = Convert.ToSingle(txt2.Text); IIgán n là số đoạn trên [a.b] n = Convert.Tolnt32(txt3.Text); IItính bước h qua công thức h=(b-a)/n; //gan x ban đầu là a X=a; IIcác giá trị phục vụ cho các phương pháp hình thang và parabol s = x@) + fx(b)) /2; x2=a+h; x4=a+h/2; y4 = fx(x4); y2 =fx(x2);
Iltính tích phân theo công thức hình thang
IInếu phương pháp hình thang được chọn ta tính phương pháp hình thang if (rbHinhthang.Checked)
{
//kiém tra xem cdc 6 text da@ duoc nhap chưa,để đảm bảo có đâu vào
if (txtl.Text != null && txt2.Text != null && txt3.Text != null)
{
Trang 3733 x+=h; s += fx(x); } //tinh tich phan tp=s*h; /lin kết quả tính được của công thức hình thang txtKqtp.Text = tp.ToString(); /Inéu cdc 6 a, b, n chua nhập thì thông báo cho người dùng biết else {
MessageBox.Show("nhap giá trị a,b,n", "Lưu ý”, MessageBox Buttons.OK, MessageBoxlcon.Warning); } } /Inéu phuong pháp Parabol được chọn if (rbParabol.Checked) {
//kiém tra tinh hop lé cua cdc gid tri ban dau a, b,n
Trang 3935
Hàm số được sử dụng cho các phương pháp này là f(x)=x-I thể hiện ở code như sau
/uHàm ƒ(x) được dùng để tính tích phân ƒ(x)=x-l float fx(float y) { floata=y - 1; return a; }
Ta có thể thay hàm số bất kì ở đoạn code này để thử !
Giao diện liên hệ tác giả để có giải đáp khi dùng chương trình như hình 2.6 dưới
đây:
Trang 40
36
KẾT LUẬN
Khóa luận đã đạt được một số kết quả sau:
1 Đã hệ thống được những kiến thức cơ bản, cần thiết về lý thuyết các
phương pháp giải gần đúng phương trình và giải gần đúng tích phân 2 Đưa ra lược đồ giải của ba phương pháp giải gần đúng phương trình một
ẩn và ba phương pháp giải gần đúng tích phân
3 Viết các chương trình thử nghiệm chạy bằng ngôn ngữ C# cho phương
pháp chia đôi, phương pháp lặp đơn, phương pháp Newton, phương pháp hình thang, phương pháp parabol, phương pháp dây cung, phương pháp
Newton-Cotes
Sau khi hoàn thành khóa luận tôi thấy có một số vấn đề đặt ra:
1 Chương trình ứng dụng cần hoàn thiện hơn với các tính năng nhập dữ liệu các hàm đầu vào là các hàm tổng quát hơn, in dữ liệu và các kết quả ra màn hình đây đủ và đẹp hơn