1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

41 447 0
Tài liệu được quét OCR, nội dung có thể không chính xác

Đ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 41
Dung lượng 5,05 MB

Nội dung

Trang 2

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 3

Chươ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 5

LỜ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 6

2

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 7

Chươ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 8

4

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 9

5

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 11

Rõ 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 12

Khô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 13

9

Ta có thể đánh giá sai số của phương pháp dây cung

Trang 14

10 ⁄ 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 15

11 1.4 Phuong phap Newton

Chọn x4p xi ban dau x, là điểm Fourier: f(x,)f"(x,) > 0

Trang 16

12 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 17

13 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 18

14

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 19

15 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 20

16 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 22

18 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 23

19 ( 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 24

20

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 25

21 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 26

22

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 27

23

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 29

25

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 30

26 else

/Inéu la phitong phap newton (f(x)/f'(x))

ThuatToanTuyenTinh("(" + StringCale + ")/(" + txtfx.Text.TrimQ +

);

}

Trang 31

27 } 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 33

29 } 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 34

30

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 35

31 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 36

a,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 37

33 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 39

35

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

Ngày đăng: 18/11/2014, 11:32

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w