Tiểu luận môn TOÁN CHO KHOA HỌC MÁY TÍNH Một vài phương pháp tính gần đung ứng dụng cho đạo ham và tích phân

21 767 2
Tiểu luận môn TOÁN CHO KHOA HỌC MÁY TÍNH Một vài phương pháp tính gần đung ứng dụng cho đạo ham và tích phân

Đ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

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH ĐẠI HỌC CÔNG NGHỆ THÔNG TIN Bài thu hoạch môn: Toán cho Khoa học máy tính Giảng viên hướng dẫn: PGS. TS. Nguyễn Phi Khứ Học viên: Hà Siu Mã số học viên: CH1301051 Lớp: Cao học Khóa 8 (đợt 1) MỤC LỤC 1 TP.HCM, Tháng 12 - 2013 Lời nói đầu Phương pháp tính là một môn học đã có từ lâu, nhưng từ khi máy tính điện tử ra đời, môn học này phát triển rất nhanh, nhằm xây dựng những thuật toán đơn giản, có hiệu lực, giải đến kết quả bằng số những bài toán của khoa học kỹ thuật trên máy tính. Vì vậy, ngày nay với việc sử dụng rộng rãi máy tính trong các cơ quan, xí nghiệp, các kiến thức của môn phương pháp tính càng trở nên hết sức cần thiết đối với người học khoa học máy tính. Trong nhiều bài toán kỹ thuật, ví dụ khi cần tính tích phân trong phương pháp số phần tử hữu hạn, phần tử biên… thường chúng không nhận được kết quả bởi giải tích; lúc đó người ta hay sử dụng các phương pháp tính gần đúng. Bài thu hoạch này em xin trình bày hai phần sau đây: Chương 1: Tính gần đúng đạo hàm. Chương 2: Tính gần đúng tích phân xác định. Với những kiến thức toán học hạn chế của em nên mục tiêu của bài thu hoạch này chỉ nhằm mục đích học tập và tìm hiểu một vài phương pháp tính gần đúng ứng dụng cho việc tính đạo hàm và tích phân, báo cáo mang tính chất học tập và minh họa là chính. Em xin chân thành cảm ơn PGS. TS. Nguyễn Phi Khứ đã có những bài giảng súc tích và sâu sắc để tạo cảm hứng cho sự ra đời của bài thu hoạch này. 2 CHƯƠNG 1: TÍNH GẦN ĐÚNG ĐẠO HÀM 1.1. Đạo hàm ROMBERG Ta biểu diễn hàm f(x) bằng đa thức nội suy: f(x) = P(x), với P(x) là đa thức nội suy (đa thức nội suy tiện lợi là spline bậc 3); tiếp theo ta tính gần đúng đạo hàm f’(x) ở đa thức này: f’(x) = P’(x) Ta cũng có thể áp dụng khai triển Taylor: ( ) ( ) ( ) ( ) 2 h f x h f x h.f x .f c 2! ′ ′′ + = + + , với c x h,0 1 = + θ < θ < Từ đó ta tính được: ( ) ( ) ( ) f x h f x f x h + − ′ ≈ Đạo hàm ROMBERG là một phương pháp ngoại suy để xác định đạo hàm với độ chính xác cao theo mong muốn. Để nhận được đạo hàm theo phương pháp này, ta sử dụng khai triển Taylor hàm f(x) tại (x + h) và (x – h): ( ) ( ) ( ) ( ) ( ) ( ) ( ) 2 3 4 4 h h h f x h f x h.f x .f x .f x .f x 2! 3! 4! ′ ′′ ′′′ + = + + + + + (1.1) ( ) ( ) ( ) ( ) ( ) ( ) ( ) 2 3 4 4 h h h f x h f x h.f x .f x .f x .f x 2! 3! 4! ′ ′′ ′′′ − = − + − + + (1.2) Trừ vế cho vế, ta được: ( ) ( ) ( ) ( ) ( ) ( ) 3 5 5 h h f x h f x h 2h.f x 2 .f x 2 .f x 3! 5! ′ ′′′ + − − = + + + (1.3) Từ biểu thức trên ta rút ra f’(x): ( ) ( ) ( ) ( ) ( ) ( ) 2 4 5 f x h f x h h h f x .f x .f x 2h 3! 5! + − − ′ ′′′ = − − + (1.4) Hay ta có thể viết lại: ( ) ( ) ( ) 2 4 6 2 4 6 1 f x f x h f x h a h a h a h 2h ′   = + − − + + + +   (1.5) Trong biểu thức trên, các hệ số a i phụ thuộc vào f và x. Ta đặt: ( ) ( ) ( ) 1 h f x h f x h 2h   φ = + − −   (1.6) Như vậy, từ hai biểu thức trên ta được: 3 ( ) ( ) ( ) 2 4 6 2 4 6 D 1,1 h f x a h a h a h ′ = φ = − − − − (1.7) Thay h h 2 = , ta có: ( ) ( ) 2 4 6 2 4 6 h h h h D 2,1 f x a a a 2 4 16 64   ′ = φ = − − − −  ÷   (1.8) Tổng quát, nếu thay h bằng i i 1 h h h 2 − = = , ta được: ( ) ( ) ( ) 2 4 6 i 2 i 4 i 6 i D i,1 h f x a h a h a h ′ = φ = − − − − (1.9) Để tạo ra sai phân có độ chính xác cao hơn, ta lấy D(1,1) – 4.D(2,1), được: ( ) ( ) 4 6 4 6 h 3 15 h 4 3f x a h a h 2 4 16   ′ φ − φ = − − − −  ÷   (1.10) Chia hai vế của (1.10) cho -3, ta được: ( ) ( ) ( ) ( ) 4 6 4 6 4D 2,1 D 1,1 1 5 D 2,2 f x a h a h 3 4 16 − ′ = = + + + (1.11) Đối chiếu các biểu thức (1.7), (1.8), (1.9) với biểu thức (1.11), ta nhận thấy: D(i, 1) sai khác với f’(x) bậc h 2 , trong khi D(2, 2) sai khác với f’(x) bậc 0(h) 4 . Bây giờ, nếu chia đôi bậc h, ta sẽ nhận được: ( ) ( ) 4 6 4 6 1 h 5 h D 3,2 f x a a 4 2 16 2     ′ = + + +  ÷  ÷     (1.12) Và để khử số hạng h 4 , ta lấy (1.11) – 16.(1.12), được: ( ) ( ) ( ) 6 6 15 D 2,2 16D 3,2 15f x a h 64 ′ − = − + + (1.13) Ta đi chia hai vế của (1.13) cho -15, được: ( ) ( ) ( ) ( ) 6 6 16D 3,2 D 2,2 1 D 3,3 f x a h 15 64 − ′ = = − + (1.14) Với (1.14), ta thấy sai số bậc 0(h) 6 . Nếu ta tiếp tục chia đôi bậc h và tính D(4, 4) thì sai số của đạo hàm f’(x) là bậc 0(h) 8 . Một cách truy hồi, ta có sơ đồ tính đạo hàm theo phương pháp ROMBERG như sau: 4 Trong đó, mỗi giá trị sau có được bằng cách ngoại suy các giá trị trước nó ở hàng trên. Với : 2 ≤ j ≤ i ≤ n ; ta có công thức tổng quát: ( ) ( ) ( ) j i j i 4 D i, j 1 D i 1, j 1 D i, j 4 1 − − − − − − = − (1.15) Và giá trị khởi đầu là: ( ) ( ) ( ) ( ) i i i i 1 D i, j h f x h f x h 2h   = φ = + − −   (1.16) Với i i 1 h h 2 − = . Như vậy phương pháp ROMBERG có thể cho phép tính đạo hàm với độ chính xác tùy ý; trong thực hành khi hai lần tính đạo hàm liên tiếp, nếu sai số nhỏ hơn sai số cho phép, thì chương trình tính sẽ dừng lại. Ví dụ. Tìm đạo hàm của hàm f(x) = x 2 + arctan(x) tại x = 2 với bước tính h = 0.5. Trị chính xác của đạo hàm là 4.2. ( ) ( ) ( ) 1 D 1,1 f 2,5 f 1,5 4.207496266 2x0,5   = − =   ( ) ( ) ( ) 1 D 2,1 f 2,25 f 1,75 4.201843569 2x0,25   = − =   ( ) ( ) ( ) 1 D 3,1 f 2,125 f 1,875 4.200458976 2x0,125   = − =   ( ) ( ) ( ) 4D 2,1 D 1,1 D 2,2 4.19995935 4 1 − = = − ( ) ( ) ( ) 4D 3,1 D 2,1 D 3,2 4.200458976 4 1 − = = − ( ) ( ) ( ) 2 2 4 D 3,2 D 2,1 D 3,3 4.200492284 4 1 − = = − 5 Chương trình tính đạo hàm như dưới đây. Dùng chương trình tính đạo hàm của hàm cho trong function với bước h = 0.25 tại x 0 = 0 ta nhận được giá trị đạo hàm là 1.000000001. 1.2. Ứng dụng lập trình 1.2.1. Dùng C++ //Daoham_Romberg; #include <conio.h> #include <stdio.h> #include <math.h> #define max 11 float h; void main() { float d[max]; int j,k,n; float x,p; float y(float),dy(float); clrscr(); printf("Cho diem can tim dao ham x = "); scanf("%f",&x); printf("Tinh dao ham theo phuong phap Romberg\n"); printf("cua ham f(x) = th(x) tai x = %4.2f\n",x); n=10; h=0.2; d[0]=dy(x); for (k=2;k<=n;k++) { h=h/2; d[k]=dy(x); p=1.0; for (j=k-1;j>=1;j ) { p=4*p; d[j]=(p*d[j+1]-d[j])/(p-1); } } printf("y'= %10.5f\n",d[1]); getch(); } float y(float x) { float a=(exp(x)-exp(-x))/(exp(x)+exp(-x)); return(a); } 6 float dy(float x) { float b=(y(x+h)-y(x-h))/(2*h); return(b); } 1.2.2. Dùng Matlab Xây dựng hàm: function df = diffromberg(f, x, h, maxiter, tol) %Tinh dao ham bang phuong phap Romberg D(1, 1) = (feval(f,x+h) - feval(f, x-h))/(2*h); for i = 1:maxiter h = h/2; D(i + 1, 1) = (feval(f,x+h) - feval(f, x-h))/(2*h); for j = 1:i D(i + 1, j + 1) = (4^j*D(i + 1, j) - D(i, j))/(4^j - 1); end if (abs( D(i + 1, i + 1) - D(i, i) ) < tol) df = D(i+1, i+1); break; elseif ( i == maxiter ) error( 'Ngoai suy Richardson khong hoi tu' ); end end Áp dụng. Tìm đạo hàm của hàm f(x) = x 2 + 2xe x + 1 tại x = 2 với bước tính h = 0.5. Kết quả tính đạo hàm là 48.334. Để tính đạo hàm của hàm cho trước ta dùng chương trình: clear all, clc format long; f = inline('x^2 + 2*x*exp(x) + 1'); x = 2; h = 0.5; tol = 1e-6; maxiter = 10; df = diffromberg(f, x, h, maxiter, tol) 7 CHƯƠNG 2: TÍNH GẦN ĐÚNG TÍCH PHÂN XÁC ĐỊNH 2.1. Công thức hình thang Trong từng khoảng chia (i, i+1), đường cong M i , M i+1 được xấp xỉ thành đường thẳng. Đối với tích phân thứ (i + 1), ta có: ( ) i 1 i x i i 1 x y y f x dx h 2 + + + = ∫ Với i b a x a ih,h n − = + = 0 n i 1, 2, ,n;a x ,b x= = = ( ) ( ) ( ) ( ) 1 2 n 0 1 n 1 b x x x a x x x I f x dx f x dx f x dx f x dx − = = + + + ∫ ∫ ∫ ∫ (2.1) ( ) ( ) ( ) T 0 1 1 2 n 1 n h I y y y y y y 2 −   ≅ + + + + + +   0 n T 1 2 n 1 y y I h y y y 2 − +   ≅ + + + +     (2.2) Sai số ( ) 2 T M I I h b a 12 − ≤ − , với ( ) M max f x ,a x b ′′ = ≤ ≤ . Ví dụ. Dùng công thức hình thang tổng quát với n=10 để tính gần đúng: 1 0 dx I 1 x = + ∫ Đánh giá những sai số của những giá trị gần đúng nhận được. 8 Giải: Ta có: 1 0 h 0,1 10 − = = Kết quả tính toán trong bảng sau: Theo công thức hình thang tổng quát ta có: 1,0000 0,50000 I 0,1( 0,90909 0,83333 0,76923 0,71429 0,66667 2 0,62500 0,58824 0,55556 0,52632) 0,69377 − ≈ + + + + + + + + + + = Sai số R được xác định như sau: ( ) 2 T M I I h b a 12 − = − (2.3) Với ( ) M max f x ,0 x 1 ′′ = < < ( ) ( ) 1 1 f x 1 x 1 x − = = + + ( ) ( ) 2 f x 1 x − ′ = − + 9 ( ) ( ) ( ) ( ) ( ) 3 3 2 f x 1 2 1 x 1 x − ′′ = − − + = + Trong đó ( ) M max f x 2 ′′ = = ( ) ( ) 2 2. 0.1 R 1 0 0,00167 12 ≤ − = (2.4) 2.2. Ứng dụng lập trình 2.2.1. Dùng C++ //tinh tich phan bang phuong phap hinh_thang; #include <conio.h> #include <stdio.h> #include <math.h> float f(float x) { float a=exp(-x)*sin(x); return(a); }; void main() { int i,n; float a,b,x,y,h,s,tp; clrscr(); printf("Tinh tich phan theo phuong phap hinh thang\n"); printf("Cho can duoi a = "); scanf("%f",&a); printf("Cho can tren b = "); scanf("%f",&b); printf("Cho so buoc n = "); scanf("%d",&n); h=(b-a)/n; x=a; s=(f(a)+f(b))/2; for (i=1;i<=n;i++) { x=x+h; s=s+f(x); } tp=s*h; printf("Gia tri cua tich phan la : %10.6f\n",tp); getch(); } 10 [...]... là một ngành kết hợp giữa hai ngành Toán học và Khoa học máy tính và nó được đã và đang được sử dụng rộng rãi trong các ngành khoa học và kỹ thuật Phép tính đạo hàm bằng số (đạo hàm gần đúng) được dùng để tính giá trị đạo hàm của một hàm số khi biết giá trị cho sẵn của hàm số tại một số điểm nhất định Việc tính đạo hàm bằng số giữ vai trò quan trọng trong việc tính đạo hàm thường và phương trình đạo. .. riêng Phương pháp tính tich phân bằng số được áp dụng cho các hàm số không có biểu thức giải tích nhưng có các giá trị tại một số điểm và cho cả các hàm có biểu thức giải tích; nó tiện lợi khi chỉ cần tính giá trị của tích phân Giống như phép tính đạo hàm bằng số, cơ sở để tính tích phân bằng số là đa thức nội suy 20 Tài liệu tham khảo [1] PGS TS Đặng Văn Liệt, Giải tích số, Nhà xuất bản Đại học Quốc... Áp dụng Tính tích phân 1 J = ∫ e x sin xdx 0 Để tính tích phân ta dùng chương trình: clear al, clc f = inline('exp(x).*sin(x)','x'); n = 6;%n . kiến thức toán học hạn chế của em nên mục tiêu của bài thu hoạch này chỉ nhằm mục đích học tập và tìm hiểu một vài phương pháp tính gần đúng ứng dụng cho việc tính đạo hàm và tích phân, báo. đây là một ngành kết hợp giữa hai ngành Toán học và Khoa học máy tính và nó được đã và đang được sử dụng rộng rãi trong các ngành khoa học và kỹ thuật. Phép tính đạo hàm bằng số (đạo hàm gần đúng). kiến thức của môn phương pháp tính càng trở nên hết sức cần thiết đối với người học khoa học máy tính. Trong nhiều bài toán kỹ thuật, ví dụ khi cần tính tích phân trong phương pháp số phần

Ngày đăng: 23/05/2015, 01:38

Từ khóa liên quan

Mục lục

  • ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

  • Lời nói đầu

    • CHƯƠNG 1: TÍNH GẦN ĐÚNG ĐẠO HÀM

      • 1.1. Đạo hàm ROMBERG

      • 1.2. Ứng dụng lập trình

        • 1.2.1. Dùng C++

        • 1.2.2. Dùng Matlab

        • CHƯƠNG 2: TÍNH GẦN ĐÚNG TÍCH PHÂN XÁC ĐỊNH

        • 2.2. Ứng dụng lập trình

          • 2.2.1. Dùng C++

          • 2.2.2. Dùng Matlab

          • 2.3. Công thức Simpson

          • 2.4. Ứng dụng lập trình

            • 2.4.1. Dùng C++

            • 2.4.2. Dùng Matlab

            • 2.5. Công thức của Gauss

              • 2.5.1. Liên hệ giữa các hệ toạ độ tổng thể và hệ toạ độ địa phương

              • 2.5.2 Ứng dụng lập trình

              • 2.5.3. Tích phân số

              • Tài liệu tham khảo

Tài liệu cùng người dùng

Tài liệu liên quan