Tính gần đúng tích phân xác định bằng công thức hình thang và công thức simpson tổng quát
Trang 1KHOA TOÁN - TIN ỨNG DỤNG
BÀI TẬP LỚN MÔN: LẬP TRÌNH TÍNH TOÁN
Đề tài:
Tính gần đúng tích phân xác định bằng công thức hình
thang và công thức Simpson tổng quát
Giáo viên hướng dẫn : TS Nguyễn Hữu Điển Sinh viên thực hiện : Doãn Thu Anh
Phạm Thị Quỳnh Ngân
Hà Nội - 11/2009
Trang 2MỤC LỤC
Lời mở đầu 3
Chương I Lý thuyết cơ sở 4
I Giới thiệu tổng quan về Maple 4
II Một số lệnh sử dụng trong chương trình 5
1 Vòng lặp while 5
2 Vòng lặp for 6
3 Câu điều kiện If 7
4 Lệnh Break 8
5 Lệnh Next 8
6 Sử dụng hàm Return, Error 9
Chương II Tính gần đúng tích phân xác định nhờ công thức hình thang và Simpson tổng quát 10
I Giới thiệu chủ đề bài toán 10
1 Mô tả bài toán 10
2 Yêu cầu và mục đích của bài toán 11
3 Giới hạn việc thực hiện bài toán 11
II Xây dựng công thức hình thang và Simpson tổng quát 12
1 Công thức hình thang và Simpson 12
Trang 32 Công thức hình thang và Simpson tổng quát 14
III Chương trình minh họa 15
IV Ví dụ cụ thể 18
Chương III Kết luận 35
I Kết quả đã đạt được của đề tài 35
II Tài liệu tham khảo 36
II Kết luận 37
Trang 4LỜI MỞ ĐẦU
Ngày nay việc áp dụng các công nghệ khoa học kỹ thuật vào lĩnh vực đời sống của con người ngày càng tăng và không ngừng can thiệp vào hầu hết các công việc trong đời sống Công nghệ thông tin là một trong số những ngành khoa học đó Đi đôi với sự phát triển của công nghệ chế tạo các thiết bị máy tính thì việc các sản phẩm phần mềm ứng dụng ra đời có tính chất quyết định đối với việc áp dụng ngành khoa học này Trên thế giới cũng như ở Việt Nam, công nghệ thông tin đã trở thành một ngành công nghiệp mũi nhọn, đó là một ngành khoa học kỹ thuật không thể thiếu trong việc áp dụng vào các hoạt động
xã hội như : quản lý, kinh tế, thông tin …Yêu cầu tin học hóa đang trở nên ngày một cấp thiết hơn đặc biệt là khi nước ta gia nhập WTO (Tổ Chức Thương Mại Thế Giới) Đối với các trường Đại hoc, Cao đẳng hay trung cấp
và dạy nghề hay các trường học bậc phổ thông cũng như tiểu học thì việc áp dụng công nghệ thông tin là không thể thiếu Maple là một chương trình hiện nay được sử dụng rất rộng rãi trong các bộ môn khoa học, nhất là sinh viên
các trường Đại học
Sau khi tìm hiểu các thuật toán đã được học trong Giáo trình Giải tích
số của thầy GS Lê Trọng Vinh kết hợp với những kiến thức đã học tại nhà trường chúng em xin được chọn đề tài “Tính gần đúng tích phân xác định
bằng công thức hình thang và công thức Simpson tổng quát” với mong
muốn có thể nắm bắt và có khả năng tiếp thu các môn khoa học khác phục vụ cho đào tạo ngành, đồng thời hiểu được mối quan hệ giữa toán học và thực tiễn kỹ thuật của các ngành kỹ thuật mà trường đang đào tạo
Chúng em xin chân thành cảm ơn PTS Nguyễn Hữu Điển đã hướng dẫn
và giúp đỡ chúng em trong quá trình thực hiện đề tài Bên cạnh những kiến thức mà thầy truyền thụ cho chúng em thì chính kinh nghiệm và phương pháp làm việc của thầy sẽ trở thành những bài học quý báu cho bản thân chúng em
Hà Nội ngày 11 tháng 11 năm 2009 Sinh viên
Doãn Thu Anh – Phạm Thị Quỳnh Ngân
Trang 5
CHƯƠNG I: LÝ THUYẾT CƠ SỞ
I Giới thiệu tổng quan về Maple:
Maple là một hệ thống tính toán trên các biểu thức đại số và minh họa toán học mạnh mẽ Từ khi ra đời đến nay Maple đã phát triển qua rất nhiều phiên bản, Maple có cách cài đặt đơn giản, chạy được trên nhiều hệ điều hành,
có cấu trúc linh hoạt để sử dụng một cách tối ưu cấu hình máy và có trình trợ giúp rất dễ sử dụng
Trải qua nhiều phiên bản, Maple cung cấp ngày càng nhiều các công cụ trực quan, các gói lệnh giúp tính toán toán học phổ thông và đại học Ưu điểm
đó làm cho nhiều người lựa chọn và sử dụng Maple cùng với các phần mềm toán học khác áp dụng trong dạy toán và các công việc tính toán đòi hỏi thực tiễn và sự phát triển của giáo dục
Ngôn ngữ lập trình Maple là một ngôn ngữ kiểu động Cũng giống như các hệ thống đại số máy tính, các biểu thức hình thức đuợc lưu trữ trong bộ nhớ theo đồ thị không chu trình có huớng (DAG) Ngôn ngữ cho phép các biến có phạm vi nhất định (lexical scoping) Ngôn ngữ có hình thức lập trình hàm, nhưng cũng có hỗ trợ đầy đủ cho lập trình truyền thống, theo kiểu mệnh lệnh
Các tính năng cơ bản của Maple
Người dùng có thể nhập biểu thức toán học theo các ký hiệu toán học truyền thống
Có thể dễ dàng tạo ra những giao diện người dùng tùy chọn
Maple hỗ trợ cho cả tính toán số và tính toán hình thức, cũng như hiển thị Nhiều phép tính số học được thực hiện dựa trên thư viện số học NAG; trong Maple, các chương trình con NAG đã được mở rộng để cho phép độ chính xác ngẫu nhiên lớn
Cho phép triết xuất ra các định dạng khác nhau như LaTex, Word, HTML,…
Trang 6 Maple cũng có một ngôn ngữ lập trình cấp cao đầy đủ Cũng có giao diện cho những ngôn ngữ khác (C, Fortran, Java, MatLab, và Visual Basic) Cũng có một giao diện dành cho Excel
Đáp ứng nhu cầu tính toán của nhiều đối tuợng: nguời dùng có thể nhập biểu thức toán học theo các ký hiệu toán học truyền thống và thực hiện đuợc hầu hết các phép toán cơ bản trong chương trình đại học và sau đại học
Là một công cụ biên soạn giáo án và bài giảng điện tử, thích hợp với các lớp học tương tác trực tiếp; là một trợ giáo hữu ích cho học sinh sinh viên trong việc tự học
II Một số lệnh sử dụng trong chương trình
mãn (giá trị của nó là đúng) thì các câu lệnh bên trong được thực hiện, sau đó
lại tiếp tục kiểm tra điều kiện condition cho đến khi điều kiện không còn thỏa mãn nữa Vòng lặp while thường được sử dụng khi số lần lặp một hay một
chuỗi biểu thức là không xác định rõ, đồng thời ta muốn các biểu thức đó cần được lặp trong khi một điều kiện nào đó còn được thỏa mãn
Điều kiện condition trong vòng lặp phải là một biểu thức boolean, tức là
giá trị của nó chỉ có thể là đúng hoặc sai, nếu không thì sẽ sinh ra lỗi
Chú ý rằng vòng lặp while- do- od; không bắt buộc phải nằm trên nhiều
dòng lệnh nhưng người ta thường viết trên nhiều dòng để câu lệnh dễ đọc và
dễ hiểu hơn
Vòng lặp While cho phép lặp chuỗi các câu lệnh nằm giữa do và od khi
mà điều kiện vẫn còn đúng
2 Vòng lặp for
Trang 7Vòng lặp for được dùng để lặp một chuỗi các biểu thức được đặt giữa do
và od, mỗi lần lặp tương ứng với một giá trị phân biệt của biến chỉ số name đứng sau từ khoá for Ban đầu, giá trị start được gán cho biến chỉ số Nếu giá
trị của biến name nhỏ hơn hay bằng giá trị finish thì chuỗi lệnh nằm giữa do
và od được thực hiện, sau đó biến name được gán giá trị tiếp theo bằng cách
cộng thêm vào nó giá trị change (name:=name+change) Sau đó, biến name
được so sánh với finish để quyết định xem việc thực hiện chuỗi lệnh có được tiếp tục nữa không Quá trình so sánh biến chỉ số name và thực hiện chuỗi
lệnh được lặp liên tiếp cho đến khi giá trị của biến name lớn hơn giá trị finish
Giá trị cuối cùng của biến name sẽ là giá trị vượt quá finish đầu tiên Chú ý, nếu các từ khóa from start hoặc by change bị bỏ qua thì mặc định from 1 và
Trang 83 Câu điều kiện If
Ghi chú: Các câu lệnh trong cặp dấu ngoặc đứng là các lệnh tuỳ chọn Thí dụ:
biểu thức | statement | cho biết rằng statement là một câu lệnh tuỳ chọn
tương ứng sau then được thực hiện, cứ tiếp tục cho đến khi các điều kiện condition đều không thỏa mãn, thì các biểu thức sau lệnh else được thực hiện
Lưu ý rằng cấu trúc lệnh (tuỳ chọn) elif then được lặp lại với số lần tuỳ ý Từ khoá elif là dạng viết tắt của else if
Các biểu thức điều kiện condition được sử dụng trong câu lệnh if phải
được tạo thành từ các bất đẳng thức, các đẳng thức (các phép toán quan hệ),
các biến số, các phép toán logic, các hàm có giá trị trả lại là giá trị logic Nếu trái lại thì sẽ gây ra lỗi
4 Lệnh Break
Cấu trúc cú pháp: break
Chức năng:
Trong lúc vòng lặp while/for đang được thực hiện, nếu lệnh break được
gọi thì chương trình sẽ thoát ngay lập tức ra khỏi vòng lặp while/for tận trong
Trang 9cùng nhất mà có chứa lệnh break (vì cũng có thể có nhiều vòng lặp while/for được lồng nhau) Một ví dụ khá điển hình trong việc sử dụng lệnh break là trong quá trình tìm kiếm search, rõ ràng là chúng ta sẽ muốn dừng quá trình
quét lại ngay khi tìm thấy đối tượng cần tìm Khi đó, ngay tại thời điểm tìm
thấy, dùng lệnh break để nhảy ra khỏi vòng lặp tìm kiếm Trước lệnh break
thường có một câu lệnh điều kiện if then
Nếu lệnh break dùng ngoài các vòng lặp while/for thì sẽ sinh ra lỗi Chú ý: break không phải là từ khoá (từ dành riêng cho Maple), vì vậy ta có thể gán giá trị cho biến có tên là break mà không hề sinh ra lỗi (mặc dù điều này là
không nên)
5 Lệnh Next
Cấu trúc cú pháp: next
Chức năng:
Cũng giống như câu lệnh break, lệnh next được thực hiện trong vòng lặp
while/for với mục đích bỏ qua một số lệnh bên trong vòng lặp để nhảy qua lần
lặp tiếp theo Khi gặp lệnh next trong vòng lặp, chương trình bỏ qua các lệnh
tiếp theo của vòng lặp tận cùng nhất chứa next cho đến khi gặp từ khoá xác định kết thúc vòng lặp (ở đây là lệnh od) Đến đây vòng lặp tiếp tục nhảy qua
lần lặp tiếp theo (nếu có thể) bằng cách tăng chỉ số hoặc kiểm tra điều kiện để quyết định xem có nên thực hiện vòng lặp tiếp theo
Lệnh next sinh ra lỗi nếu nó được gọi ngoài vòng lặp while/for Tương
tự như break, next cũng không phải là từ khóa, do đó ta hoàn toàn có thể gán cho next một giá trị (xem như next là một biến) Ngay trước lệnh next cũng
thường là một câu lệnh điều kiện if then
6 Sử dụng các hàm RETURN, ERROR
Hàm RETURN được sử dụng để cho giá trị hàm trước khi thoát khỏi chu trình Nếu không có lệnh RETURN, chu trình tự động cho kết quả của phép tính cuối cùng trong chu trình Hàm ERROR được sử dụng để đưa thông điệp
lỗi ra màn hình từ bên trong chu trình
Trang 10CHƯƠNG II:
TÍNH GẦN ĐÚNG TÍCH PHÂN XÁC ĐỊNH NHỜ CÔNG THỨC HÌNH THANG VÀ CÔNG THỨC SIMPSON TỔNG QUÁT
I Giới thiệu chủ đề bài toán
1 Mô tả bài toán
Xét tích phân xác định của một hàm số f(x) trong khoảng [a,b]
I = (2.3)
Nhưng tổng Darboux hội tụ rất chậm, do đó để đạt được độ chính xác cao đòi hỏi một khối lượng tính toán rất lớn Nên trong thực tế người ta hầu như không dùng (2.3) để tính xấp xỉ tích phân
Trường hợp hàm số cho trong dạng bảng số, khái niệm nguyên hàm không còn ý nghĩa gì nữa
Trang 11Bài toán tìm giá trị của tích phân xác định trong toán học tính toán nghĩa
là giá trị đó được tìm thông qua giá trị hàm số dưới dấu tích phân tại một số điểm thuộc đoạn [a,b]
Phương pháp đơn giản nhất để giải quyết bài toán trên là tính các giá trị của hàm f(x) tại một số điểm [a,b] i =
Từ bảng số đó ta xây dựng đa thức nội suy φ(x) thì
I = ≈
Sau đây là một vài phương pháp tính gần đúng tích phân hay được dùng
Ý tưởng cơ bản của các phương pháp này là chia nhỏ khoảng [a,b] cần lấy tích phân, sau đó trên mỗi khoảng nhỏ này ta xấp xỉ hàm số bằng một đa thức Với mỗi đa thức ta có thể dùng nguyên hàm của chúng để tính tích phân, sau đó ta cộng các tích phân thành phần để được xấp xỉ của tích phân toàn thể
2 Yêu cầu và mục đích của bài toán
• Hiểu và nắm được thế nào là bài toán tính gần đúng tích phân xác định
• Nắm được phương pháp tính gần đúng tích phân xác định, qua đó biết cách tính giá trị gần đúng tích phân xác định của một hàm bất kỳ
• Biết cách áp dụng phương pháp tính gần đúng trên vào việc giải các bài toán ngoài thực tế Cụ thể ở đây ta giải bài toán trên Maple
3 Giới hạn việc thực hiện bài toán
Giả sử cần tính gần đúng tích phân trên đoạn [a,b] lớn, thì h = b – a theo công thức hình thang; h = theo công thức Simpson với độ sai số xấp xỉ tương ứng 0( ) ; hoặc 0( ) còn quá lớn
Để khắc phục được h bé (0 < h < 1) mà vẫn sử dụng được các công thức trên, người ta dựa vào tính chất khả tổng của tích phân xác định, nghĩa là chia đoạn [a,b] thành các đoạn nhỏ rồi áp dụng công thức hình thang hay Simpson trên đoạn nhỏ đó
Trang 12Có được h nhỏ mà công thức tính toán không phức tạp, thuận lợi cho tính toán và thường sử dụng trong thực tế người ta đã xây dựng nên công thức hình thang và Simpson tổng quát dựa trên công thức hình thang và Simpson
II Xây dựng công thức hình thang và Simpson tổng quát
1 Công thức hình thang và công thức Simpson
Giả sử biết giá trị = f( ) i = ;
trong đó là số không đổi nào đó
Ta đi tìm biểu thức hiện của các trong công thức (2.6) Nếu sử dụng đa thức nội suy Lagrange thì
= dx
Trang 13Do các mốc cách đều nhau bước là h = và x = + ht , nên
• Trường hợp (2.7) khi n = 2 thì ta có
= ·
= − ·
Trang 14= ·
Do h = , nên theo công thức (2.7) ta được
I = ≈ ( + + ) (2.9)
Công thức (2.9) gọi là công thức Simpson hay công thức Parabol
2 Công thức hình thang và công thức Simpson tổng quát
Việc dùng công thức hình thang và Simpson tổng quát thay vì công thức
hình thang và Simpson đơn thuần sẽ đem lại kết quả tính với độ chính xác cao
hơn
a) Công thức hình thang tổng quát
Chia đoạn [a,b] thành m phần bằng nhau có độ dài h = bởi các điểm
Trang 15Công thức (2.10) được gọi là công thức hình thang tổng quát
b) Công thức Simpson tổng quát
Chia đoạn [a,b] thành 2n phần bằng nhau có độ dài h = bởi các điểm chia:
Với h =
Công thức (2.11) được gọi là công thức Simpson tổng quát
Nhận xét: Nói chung công thức Simpson tổng quát có độ chính xác cao hơn
công thức hình thang tổng quát tuy nhiên độ chênh lệch là không đáng kể
III Chương trình minh họa
Sau đây là đoạn chương trình chính thể hiện ( mô tả) thuật toán:
1 Công thức Simpson:
> simpson:=proc(f,a,b,n)
Trang 17od;
print("The solution is:",y);
end;
>
Trang 18IV Ví dụ cụ thể
Ví dụ 1: Bài 3 trang 195 – Giáo trình Giải tích số - Lê Trọng Vinh
Tính gần đúng tích phân I = dx bằng công thức hình thang tổng quát, lấy m = 10
ApproximateInt(f(x), x=0 1, method = trapezoid);
ApproximateInt(f(x), x=0 1, method = trapezoid,
Trang 20Kết luận : Kết quả của ví dụ trên hòan toàn đúng với đáp án đã cho
Trang 21Ví dụ 2: Bài 4 trang 195 – Giáo trình Giải tích số - Lê Trọng Vinh
Tính gần đúng tích phân I = dx bằng công thức Simpson tổng quát với n = 10
ApproximateInt(f(x), x=0 1, method = simpson);
ApproximateInt(f(x), x=0 1, method = simpson, output = plot);
ApproximateInt(f(x), x=0 1, method = simpson, output = plot, partition = 50);
ApproximateInt(f(x), 0 1, method = simpson, output
= animation);
Trang 23Kết luận : Kết quả của ví dụ trên hòan toàn đúng với đáp án đã cho
Trang 24Ví dụ 3: Bài 6 trang 195 – Giáo trình Giải tích số - Lê Trọng Vinh
ApproximateInt(f(x), x=0 1, method = simpson);
ApproximateInt(f(x), x=0 1, method = simpson, output = plot);
ApproximateInt(f(x), x=0 1, method = simpson, output = plot, partition = 50);
Trang 25ApproximateInt(f(x), 0 1, method = simpson, output
= animation);
Trang 27ApproximateInt(f(x), x=0 1, method = trapezoid);
ApproximateInt(f(x), x=0 1, method = trapezoid, output = plot);
ApproximateInt(f(x), x=0 1, method = trapezoid, output = plot, partition = 50);
ApproximateInt(f, 0 1, method = trapezoid, output = animation);