4. Tìm giá trị gần đúng của tích phân xác định sau : Trong đó f(x) là một hàm liên tục và khả vi trên đoạn . (1) Cách giải quyết : Sử dụng công thức SIMPSON. Cụ thể như sau : Chia đoạn thành 2 đoạn bằng nhau với 3 mốc các giá trị tương ứng là Bài toán đặt ra : PPS 1. Lí thuyết
5. Khi đó, ta có : trong đó Công thức (2) gọi là công thức Simpson đơn giản (2) Để gia tăng độ chính xác khi lấy tích phân trên các khoảng lớn hơn, khoảng (a,b) có thể được chia nhỏ hơn nữa thành n bước. Việc định trị qua 3 điểm (tương đương với việc có hai khoảng) đối với mỗi khoảng con đòi hỏi rằng phải có một số chẳn các khoảng con. Nghĩa là chúng ta có thể khai triển số các khoảng con dưới dạng n = 2k . PPS 1. Lí thuyết
6. Ta có : các mốc là Giá trị của hàm tương ứng Ta có các phép biến đổi sau : PPS 1. Lí thuyết
7. Vậy : (4) Công thức (4) gọi là công thức Simpson mở rộng Để thuận tiện cho việc viết thuật toán cũng như viết chương trình sau này, công thức (4) được viết lại như sau : (5) PPS 1. Lí thuyết
12. Chương trình sau đây được xây dựng để tính tích phân của hàm y = 2x trong một đoạn cho trước (mà nếu tính giải tích sẽ cho kết quả là ). Ngôn ngữ lập trình : Turbo Pascal 7.0 Chương trình được viết tương ứng 1-1 với giải thuật đã được trình bày ở trên. PPS 3. Chương trình
13. Program TINH_TICH_PHAN_BANG_CONG_THUC_SIMPSON; Uses crt; Var a,b,k:integer; {------------------------Xac lap ham f(x)---------------------} Function f(x:real):real; Begin f := 2*x; End; {-------------------------Ket thuc ham------------------------} PPS 3. Chương trình
14. {-----------------------Thu tuc SIMPSON-----------------------} Procedure Simpson(a,b,k:integer); Var i:integer; h,x,S1,S2,T:real; Begin h := (b-a)/(2*k); S1 := 0; S2 := 0; For i:=1 to k-1 do Begin x := a + 2*i*h; S1 := S1 +f(x); End; For i:=1 to k do Begin x := a + (2*i-1)*h; S2 := S2 + f(x); End; T := (h/3)*(f(a) + f(b) + 2*S1 + 4*S2); Writeln('----------------------------------------------'); Writeln('Ket qua :'); Writeln(' T = ',T:5:5); End; {----------------------Ket thuc thu tuc-----------------------} PPS 3. Chương trình
15. {=====================Chuong trinh chinh======================} Begin Clrscr; Writeln('Chuong trinh :'); Writeln('TINH GAN DUNG TICH PHAN XAC DINH BANG CONG THUC SIMPSON'); Writeln(' ********************************'); Readln; Writeln; Writeln('Nhap gia tri nguyen cua can a :'); Readln(a); Writeln('Nhap gia tri nguyen cua can b :'); Readln(b); Writeln('So cac khoang con la mot so chan n=2k, ban hay nhap so k :'); Readln(k); Simpson(a,b,k); Writeln('----------------------------------------------'); Writeln('Chuong trinh ket thuc'); Readln; End. PPS 3. Chương trình
16. Chương trình trên đã được chạy thử với 2 cận a = 0, b =1, số các khoảng con bằng 4. Kết quả được hiển thị như hình bên dưới : PPS 3. Chương trình
18. Để kiểm tra chương trình trên chạy có chính xác hay không, ta so sánh một kết quả được tính bằng chương trình với một kết quả được tính giải tích. Ta đặt hàm G(x) là một hàm được xác định như sau : Giá trị của làm G(x) được tính bằng cách xấp xỉ, tức là sử dụng chương trình trên để lấy kết quả với cận a cố định bằng 0, còn cận b (tương ứng với biến x trong tích phân trên) được nhập từ bàn phím. Hàm thứ 2 là nguyên hàm của hàm y = 2x mà ta đã biết Cho x nhận giá trị từ 1 đến 5, ta sẽ có các giá trị tương ứng của hai hàm trên. Sau đó ta vẽ các điểm (x,F(x)) và (x,G(x)) lên cùng một hệ trục toạ độ Oxy. Nối các điểm với nhau rồi so sánh hình dáng của 2 đồ thị. PPS 4. Đồ thị
19. Vì hàm dưới dấu tích phân đã cho quá đơn giản nên giá trị của hàm G(x) được tính xấp xỉ (dùng chương trình) đúng bằng giá trị của hàm F(x) được tính giải tích. Ta có bảng thống kê số liệu sau : PPS 4. Đồ thị 25 16 9 4 1 F(x) 25 16 9 4 1 G(x) 5 4 3 2 1 x
20. Đồ thị của hai hàm F(x) và G(x) trùng nhau trên cùng một h ệ trục toạ độ Oxy. Đồ thị được vẽ bằng chương trình EXCEL. PPS 4. Đồ thị
21. Bây giờ ta xét hàm f(x) phức tạp hơn : Lúc này ta sẽ có : Sử dụng chương trình trên, chỉ thay đổi hàm f(x) , cố định điểm a = 0 , số các khoảng con bằng 2b , còn điểm b sẽ nhận giá trị lần lượt từ 1 đến 10, đồng thời ta xác lập thêm hàm F(x) để đối chiếu kết quả. Chương trình cụ thể như sau : PPS 4. Đồ thị
22. Program SO_SANH_DANH_GIA_KET_QUA; Uses crt; Var a,b,k:integer; {------------------Xac lap ham f2(x)---------------} Function f2(x:real):real; Begin f2 := sqrt(1+x*x); End; {-------------------Ket thuc ham-------------------} {---------------Nguyen ham cua ham f2--------------} Function f(x:real):real; Begin f := (x/2)*sqrt(1+x*x) + ln(x+sqrt(1+x*x))/2; End; {-------------------Ket thuc ham-------------------} PPS 4. Đồ thị
23. {-------------Thu tuc SIMPSON_So sanh--------------} Procedure Simpson_so_sanh; Var i,j:integer; S1,S2,h,x,T:real; Begin a :=0; Writeln('Ket qua :'); Writeln('~~~~~~~~~'); Write('x':7);Write('|':9); Write('Tinh xap xi':16); Write('|':6); Write('Tinh giai tich':19); Write('|':6); Write('So khoang con':16); Writeln; For i:=1 to 80 do write('='); Writeln; For j:=1 to 10 do Begin b :=j; k :=j; h := (b-a)/(2*k); S1 := 0; S2 := 0; For i:=1 to k-1 do Begin x := a + 2*i*h; S1 := S1 +f2(x); End; For i:=1 to k do Begin x := a + (2*i-1)*h; S2 := S2 + f2(x); End; T := (h/3)*(f2(a) + f2(b) + 2*S1 + 4*S2); Write(j:7); Write('|':9); Write(T:14:5); Write('|':8); Write(f(b):17:5); Write('|':8); Write(2*k:11); Writeln; End; End; {-----------------Ket thu thu tuc------------------}
25. Chương trình trên đã được chạy thử. Kết quả được hiển thị như hình bên dưới : Nhận xét : Các giá trị chênh lệch nhau không đáng kể, mặc dù số các khoảng con không lớn so với độ dài của đoạn PPS 4. Đồ thị
26. Ta có đồ thị minh hoạ sau : Đồ thị được vẽ bằng chương trình EXCEL. PPS 4. Đồ thị
27. Đồ thị sau đây cũng vẽ 2 hàm G(x) và F(x) như trên nhưng trong chương trình tính giá trị hàm G(x) ta đã cố định số các khoảng con luôn bằng 2. Đồ thị được vẽ bằng chương trình EXCEL. PPS 4. Đồ thị
28. Tại các điểm x = 7,8,9,10 hai đồ thị chênh lệch nhau khá rõ ràng, bởi vì lúc này đoạn có độ dài lớn trong khi số các khoảng con luôn bằng 2. Do đó ta có nhận xét : Nhận xét : Số các khoảng con phải chọn sao cho phù hợp với khoảng cách đoạn thì phương pháp này sẽ cho kết quả với độ chính xác cao. PPS 4. Đồ thị
29. Kết luận : Dựa vào số liệu kết quả và các đồ thị ở trên, ta thấy được ưu điểm của phương pháp này, đó là : tích phân tìm được có độ chính xác cao, thậm chí đối với các hàm đơn giản như y = 2x (tổng quát : y = ax + b ), phương pháp này cho ta kết quả chính xác đến 100%. PPS 4. Đồ thị