1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình tính toán khoa học - Chương 6 ppt

30 997 5

Đ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 30
Dung lượng 394,82 KB

Nội dung

135 Chương 6 TÍNH VI PHÂN VÀ TÍCH PHÂN SỐ 6.1 TÍCH PHÂN SỐ DỰA TRÊN NỘI SUY Giải sử ta cần tính tích phân xác định có dạng I = b a f ( x)dx  . Nếu trong khoảng [a,b] hàm f(x) có nguyên hàm là F(x), thì có thể dùng công thức Newton- Leibnitz để tính tích phân đã cho: I = F(b)-F(a). Thí dụ 1. I =  b a dxx = 3 2 3 2 2 3 / / (b a )  Trong Matlab đã cài đặt sẵn hàm INT để tìm nguyên hàm và tính tích phân xác định theo phương pháp giải tích.  Hàm INT Cú pháp: int (S,v,a,b)  Giải thích. Hàm INT tính tích phân bất định và tích phân xác định theo phương pháp giải tích. Kết quả là một biểu thức viết dưới dạng xâu. int(S): tính tích phân bất định của biểu thức S viết dưới dạng xâu. Biến lấy tích phân được Matlab xác định tự động từ xâu S. Nếu S là một hằng thì mặc định của biến lấy tích phân là x. int(S,’v’): tính tích phân bất định của biểu thức S viết dưới dạng xâu. Biến lấy tích phân là v. Thí dụ 2. >> int('tan(u)') %% Lấy tích phân theo biến u ans = log(cos(u)) >> int('tan(u)','x') ans = 136 x*tan(u) >>int('tan(u)',t) %% Biến t không xác định ??? Undefined function or variable 't'. >> syms x t; >> int('tan(u)',t) %% Lấy tích phân theo biến t ans = t*tan(u) >> int('k*x^2*(1-x)^2') %% Lấy tích phân theo biến x ans = (k*x^3*(6*x^2 - 15*x + 10))/30 int (S,a,b): Tích phân xác định từ a đến b của biểu thức S viết dưới dạng xâu. Các cận tích phân là a và b là các giá trị hoặc biến vô hướng Biến lấy tích phân được xác định từ câu lệnh xâu S. int (S,’v’,a,b): Tích phân xác định từ a đến b của biểu thức S viết dưới dạng xâu. Các cận tích phân là a và b là các giá trị hoặc biến vô hướng. Biến lấy tích phân là v. Thí dụ 3. >> int('cos(u)',1,2) ans = sin(2) - sin(1) >> int('cos(u+2*x)',1,2) ans = sin(u + 4)/2 - sin(u + 2)/2 >> int('cos(u+2*x)','u',1,2) ans = sin(2*x + 2) - sin(2*x + 1) Nó chung tính nguyên hàm trên máy tính rất khó. Ngay cả một số phần mềm được xem là mạnh nhất mạnh nhất cũng chỉ tính được nguyên hàm của một số rất hạn chế hàm số. Thí dụ 4. >> int(‘sin(cos(x))’) 137 Warning: Explicit integral could not be found. ans = int(sin(cos(x)), x) >> int(‘tan(cos(x))’,0,pi) Warning: Explicit integral could not be found. ans = int(tan(cos(x)), x = 0 pi) Trong thực tế, rất nhiều bài toán ứng dụng cần sử dụng tích phân xác định. Thậm chí một số hàm số lấy tích phân mới chỉ tìm được dưới dạng bảng số. Vì vậy ta cần phải nghiên cứu các phương pháp tính gần đúng các tích phân xác định với một sai số cho phép. 6.1.1 Công thức hình thang Đầu tiên chia đoạn [a, b] thành n đoạn nhỏ bằng nhau bởi các điểm chia a =x 0 < x 1 < x 2 < < x n = b; Trong đó x i = a + ih, ni ,0 và h = b a n  . Sau đó tính y i = f(x i ), ni ,0 . Khi h đủ nhỏ mỗi hình thang cong nhỏ được tính xấp xỉ bằng diện tích một hình thang: 1 1 ( ) 2 i i x i i x y y f x dx h      . Từ 1 1 1 1 ( ) ( ) 2 i i x b n n i i i i a x y y I f x dx f x dx h             suy ra công thức hình thang: 0 1 2 1 2 n T n y y I I h y y y               (6.1) Để xây dựng công thức hình thang, người ta đã thay hàm f(x) trong [x i-1 ,x i ] bởi một phương trình đường thẳng đi qua 2 điểm (x i-1 ,y i-1 ) và (x i ,y i ). Có nghĩa là người ta đã sử dụng nội suy bậc nhất trong mỗi khoảng con [x i-1 ,x i ] . Do đó sai số của phương pháp dễ dàng được chứng minh là:   2 2 12 T M I I h b a    (6.2) trong đó   2 [ , ] max "( ) x a b M f x   . 138 Công thức hình thang có sai số tỷ lệ với h 2 , nên nó được gọi công thức có chính xác cấp 2 đối với h. Công thức Parabol (Hay công thức Simpson) Đầu tiên chia đoạn [a, b] thành 2n đoạn nhỏ bằng nhau bởi các điểm chia a =x 0 < x 1 < x 2 < <x 2n = b. Trong đó x i = a + ih, 0 2 i , n  và h = b a n  . Sau đó tính y i = f(x i ), 0 2 i , n  . Khi đó: 2 2 2 1 ( ) ( ) i i x b n i a x I f x dx f x dx        Bây giờ ta nội suy hàm f(x) trong mỗi đoạn [x 2i-2 ,x 2i ] bởi một đa thức bậc 2 qua 3 nút x 2i-2 , x 2i-1 và x 2i :               2 1 2 2 2 2 2i 2 2i 1 2 2 2 1 2 2 2 2 1 2 2 2 1 2 ( ) y y i i i i i i i i i i i i x x x x x x x x P x x x x x x x x x                             2 2 2 1 2i 2 2 2 2 2 1 y i i i i i i x x x x x x x x          . Sau đó tính xấp xỉ tích phân trong mỗi đoạn con bởi tích phân của parabol nội suy, ta được: 2 2 2 2 2 2 1 2 ( ) ( 4 ) 3 i i x i i i x h f x dx y y y        . Từ đó ta có công thức Parabol:   0 2 1 3 2 1 2 4 2 2 ( ) 4( ) 2( 3 S n n n h I I y y y y y y y y              (6.3) Tử công thức nội suy bậc 2 ta dễ dàng chứng minh được công thức sai số của công thức Parabol là:   4 4 180 S M I I h b a    (6.4) trong đó   (4) 4 [ , ] max ( ) x a b M f x   . Công thức Parabol có sai số tỷ lệ với h 4 , nên nó được gọi công thức có chính xác cấp 4 đối với h. 139 6.1.2 Một số hàm tính gần đúng tích phân xác định trong Matlab.  Hàm QUAD Cú pháp: I = quad(FUN,a,b,Tol) Giải thích. Hàm QUAD tính gần đúng tích phân xác định bằng phương pháp Sympson thích nghi. I = quad(FUN ,a,b): tính gần đúng tích phân xác định của hàm số FUN từ a đến b với sai số tuyệt đối mặc định là 10 -6 , theo phương pháp Simpson thích nghi. FUN là một xâu chứa tên hàm. Nếu kết quả trả về là I=Inf thì nghĩa là thông báo rằng số bước lặp và tích phân có thể là phân kì. Nếu a và b là vector thì kết quả I cũng là vector cùng cỡ với a và b. I = quad(FUN,a,b,Tol): tính tích phân với sai số tuyệt đối Tol thay cho sai số mặc định 10 -6 . Hình 6.1 Minh hoạ về các tích phân số dựa trên nội suy trên lưới đều và trên lưới thích nghi Trong các phương pháp tích phân thích nghi, bước đi của lưới dày hay thưa tùy thuộc vào tốc độ biến thiên của hàm trong các khoảng khác nhau là nhanh hay chậm.  Hàm QUAD8 Cú pháp: I = quad8(FUN,a,b,Tol) Giải thích. Hàm QUAD8 tích tích phân xác định bằng phương pháp số có cấp chính xác cao. 140 I = quad8(FUN ,a,b): tính gần đúng tích phân xác định của hàm số FUN từ a đến b với sai số tuyệt đối mặc định là 10 -6 , theo phương pháp Newton-Cotes thích nghi bậc 8 . I = quad8(FUN,a,b,Tol): tính tích phân với sai số tuyệt đối Tol thay cho sai số mặc định 10 -6 . Chú ý. Hàm QUAD8 đã bị gỡ bỏ trong Matlab 7.10.0 và được thay bởi hàm QUADL sử dụng phương pháp Lobatto thích nghi, có hiệu quả hơn. Hàm QUADL cũng sử dụng các tham số hoàn toàn tương tự. Thí dụ 5. Cài đặt chương trình để so sánh kết quả của các phương pháp đối với tích phân I =  b a dxx . Giải: - Cài đặt chương trình Tpxd61.m: % Matlab Code for Intergration clear; a = input(' Enter the Lower limit: '); b = input(' Enter the Upper limit: '); Kq = 2/3*(b^1.5-a^1.5); Kq2=quad('sqrt',a,b); Kq8=quad8('sqrt',a,b); fprintf(' Analytical: %f \n Numerical: %f \n %f \n',Kq,Kq2,Kq8) - Chạy chương trình: >> Tpxd61 Enter the Lower limit: 1 Enter the Upper limit: 20 Analytical: 58.961813 Numerical: 58.961623 58.961794 Trong thí dụ trên, hàm dưới dấu tích phân là một hàm nội trú. Trường hợp hàm lấy tích phân không phải là hàm nội trú thì người sử dụng cần phải lập hàm trước khi tính gọi hàm tích phân. Bạn cũng cần chú ý cách tính tích phân của hàm phụ thuộc tham số: >> F=inline('x.*cos(x)-5*y.*sin(x)') 141 F = Inline function: F(x,y) = x.*cos(x)-5*y.*sin(x) >> TP= quad( @(x)F(x,3), -pi, 1) % % Lấy tích phân theo x, y=3 TP = 25.4863 >> TP= quad (@(x)F(x,5), -pi, 1) TP = 40.8893 Thí dụ 6. Cài đặt chương trình tính tích phân xác định 1/ max 2 0 0 0 2 1 n o r ave v r V r dr r r          . Giải. - Lập hàm dưới dấu tích phân: % Matlab Code for Evalution of the User-Supplied Function function v=velocity(r) n=8 ; r0=0.5; v = r.*(1-r/r0).^(1/n); - Cài đặt chương trình tính tích phân Tpxd62.m: % Matlab Code for Integration of User-Supplied Function clear; Vmax = 1.5; r0=0.5; Integral= quad('velocity',0,r0,1e-9); Vave=2*Vmax/(r0^2)*Integral - Gọi thực hiện chương trình >> Tpxd62 Vave = 1.25490183114015  Hàm FEVAL Cú pháp: [y 1 ,y 2 , ,y m ] = feval(FUN , x 1 ,x 2 , ,x n ) 142 Giải thích. Hàm FEVAL dùng để tính giá trị của một hàm mà tên hàm được dùng làm tham số của hàm khác. Hàm FEVAL có tác dụng làm linh hoạt tính năng của một hàm được cài đặt trong Malab. Nếu bạn gọi hàm: [y 1 ,y 2 , ,y m ] = feval(FUN , x 1 ,x 2 , ,x n ) thì Matlab sẽ trả lại giá trị cho các tham số ra y 1 ,y 2 , ,y m của hàm FUN (thường là xâu tên của hàm M-file) với các tham số vào x 1 ,x 2 , ,x n . Câu lệnh trên được hiểu là [y 1 ,y 2 , ,y m ] = FUN( x 1 ,x 2 , ,x n ). Chẳng hạn khi bạn viết lệnh y = feval(‘Myfunc’,9.64), Matlab sẽ tính giá trị y=Myfunc(9.64). Thí dụ 7. >> x=[1 pi]; >> y=feval('sin',x) %% y=sin(x) y = 0.8415 0.0000 >>A=hilb(5); >>[V,D] =feval('eigs',A,3); Bây giờ chúng ta hãy cài đặt hàm tính gần đúng tích phân xác định bằng công thức hình thang với số bước chia là N (chưa xác định sai số): file Tpxd.m. % Thi du ve tinh tich phan so bang cong thuc hinh thang voi N buoc function Tp =Tpxd(FUN, a , b, N ) h=(b-a)/N; x = [a+h: h: b-h]; y = feval(FUN,x); Tp =h* ( sum (feval(FUN,[a b]))/2 + sum(y) ); Thí dụ 8. Tính gần đúng tích phân xác định sau bằng công thức hình thang với số bước chia N =100: 20 1 I xdx   . Giải: 143 >> I =Tpxd('sqrt',1,20, 100) I = 58.9606 6.2 CÔNG THỨC NGOẠI SUY RICHARDSON 6.2.1 Cấp chính xác Giả sử  (h) là một hàm của h. Nếu 0 lim ( ) 0 h h    thì  (h) là vô cùng bé đối với h. Ngoài ra nếu tồn tại 2 hằng số C và p không phụ thuộc h thỏa mãn: ( ) p h Ch   với mọi h đủ nhỏ thì gọi là một vô cùng bé bậc p dối với h. Khi đó ta viết:  (h) = 0(h p ) (6.5) Nếu  (h) là công thức sai số của một phương pháp số nào đó thì ta nói phương pháp đó có độ chính xác cấp p. Nói chung, nếu p≥2 ta gọi đó là phương pháp có độ chính xác cao. Trong các phương pháp tích phân số đã nêu ở trên, một điều khá rõ ràng số các đoạn chia càng lớn thì tích phân số càng chính xác. Nói cách khác, độ dài bước chia h càng bé thì sai số càng bé. Có một điều đáng được quan tâm là: tốc độ tiến tới 0 của sai số là bao nhiêu so với độ dài bước chia h ? Xét tích phân số theo công thức hình thang với bước đi h. Khi khai triển theo công thức Taylor hàm f(x) tại x i trong mỗi khoảng con [x i-1 ,x i ] đến đạo hàm bậc nhất ta được công thức sai số:   2 0 1 2 1 ( ) 0( ) 2 b n h n a y y E h I I f x dx h y y y h                   Như vậy sai số của công thức hình thang là vô cùng bé bậc 2 đối với h. Chính vì vậy phương pháp hình thang được gọi là phương pháp có độ chính xác cấp 2; Tương tự phương pháp Simpson có độ chính xác cấp 4. Tuy nhiên nếu sử dụng khai triển hàm f(x) tại x i trong mỗi khoảng con [x i-1 ,x i ] đến đạo hàm cấp 3 ta sẽ thấy:   2 4 0 h I I Ch h    , 144 trong đó hằng số C chỉ phụ thuộc hàm số f(x) mà không phụ thuộc vào h. Nếu thay h bởi h/2 vào công thức ta có:   2 4 h/2 I 0 h 4 h I C   . Vậy ta cũng có thể viết: 3I = 4I h/2 –I h +0(h 4 ) hay     4 h/2 h 1 4I – I 0 h 3 I   . (6.6) Đây cũng chính là công thức ngoại suy Richardson để tính tích phân xác định có độ chính xác cấp 4, được xây dựng bằng tổ hợp của hai công thức hình thang có độ chính xác cấp 2. Bằng phương pháp tương tự, trong giải tích số các nhà toán học còn đưa ra một số công thức ngoại suy khác, bằng cách tổ hợp các công thức có cấp chính xác thấp thành công thức có cấp chính xác cao hơn. 6.2.2 Kinh nghiệm khi cài đặt chương trình Giả sử ta cần tính xấp xỉ tích phân của hàm F(x) trong khoảng [a,b] với sai số  cho trước. Như đã trình bày ở trên, sai số của công thức hình thang là:     2 2 2 0( ) 12 h M E h I I h b a h      Khi cài đặt chương trình tính toán, việc xác định M 2 nhiều khi rất khó, nhất là khi tên hàm lấy tích phân là tham số vào của chương trình. Từ công thức sai số trên có thể viết:  I h - I | = Ch 2 + 0(h 3 ) hay I = I h + Ch 2 + 0(h 3 ). Từ đó lần lượt suy ra các công thức:   2 3 h/2 I I 0 h 4 h C   , 2 2 3 3 h h/2 I – I 3 0( ) 0( ) 4 4 h h C h C h     , 2 3 h/2 h h/2 I – I 0( ) I – I 4 h C h   . [...]... 161 Thí dụ 19 >> A = [ 2 4 6 12 3 -1 5 21 -8 -2 10 -1 4] -4 1 -5 7 >> [px py] =gradient(A) px = 2.0000 -0 .5000 -4 .5000 3.0000 12.0000 6. 0000 -1 .5000 -1 3.5000 9.0000 36. 0000 -4 .0000 1.0000 9.0000 -6 .0000 -2 4.0000 py = 4.0000 8.0000 -3 .0000 -6 .0000 2.0000 -1 0.0000 14.0000 -1 .5000 7.5000 -1 0.5000 -1 0.0000 -2 0.0000 - 5.0000 25.0000 -3 5.0000 >> Hx=0.1; Hy=0.5; >> [Fx,Fy] =gradient(A,Hx,Hy) Fx = 20.0000 -5 .0000... =gradient(A,Hx,Hy) Fx = 20.0000 -5 .0000 -4 5.0000 30.0000 120.0000 60 .0000 -1 5.0000 -1 35.0000 90.0000 360 .0000 -4 0.0000 10.0000 90.0000 -6 0.0000 -2 40.0000 Fy = 8 16 4 -2 0 28 -6 -1 2 -3 -2 0 -4 0 -1 0 15 -2 1 50 -7 0 162 BÀI TẬP A Cài đặt chương trình và lập hàm 1 Cài đặt hàm HThang.m tính tích phân xác định theo công thức hình thang Lệnh gọi hàm có dạng: Tp  HThang  FUN , a, b, Tol  , trong đó: - FUN là một xâu chứa tên... h2  h1  h2  (6. 12) Trong trường hợp lưới nội suy cách đều thì: d 2L y  2 yi  yi 1  i 1 dx 2 x  x h2 i (6. 13) 6. 6 MỘT SỐ HÀM TÍNH VI PHÂN TRÊN MATLAB 6. 6.1 Hàm DIFF Cú pháp: h = diff (x) Giải thích Hàm DIFF tính sai phân (bước nhảy) h của lưới vi phân x Thí dụ 16 >> x=[ 1 2 -4 7 -1 0]; >> diff(x) ans = 1 -6 11 -1 7 >> A=[ x;2*x;3*x]; >> diff(A) ans = 1 -4 7 -1 0 1 6. 6.2 2 2 -4 7 -1 0 Hàm POLYDER... Evalution of the User-Supplied Function function v=velocity(r) n=8 ; r0=0.5; v = r.*(1-r/r0).^(1/n); - Cài đặt chương trình tính tích phân Tpxd63.m: % Matlab Code for Integration of User-Supplied Function clear; Vmax = 1.5; r0=0.5; Integral= ParIntegr('velocity',0,r0, 1e-9); Vave=2*Vmax/(r0^2)*Integral 1 46 - Gọi thực hiện chương trình >>format long g; >> Tpxd63 Vave = 1.25490195 364 465 6. 2.3 Một số hàm... POLYDER tính đạo hàm của đa thức có hệ số là p và trả về vector q là hệ số của đa thức đạo hàm của đa thức có hệ số là p 159 Thí dụ 17 >> p=[ 1 2 -4 7 -1 0]; %% Tính đạo hàm của đa thức có hệ số p >> polyder(p) ans = 4 6 -8 >> q= polyder(polyder(p)) 7 %% Tính đạo hàm bậc 2 của đa thức q= 12 12 -8 Thí dụ 18 Cài đặt chương trình tính đạo hàm của hàm y=sinx và so sánh với hàm y=cosx Giải Cài đặt chương trình. .. bàn phím khi chạy chương trình Đưa kết quả ra màn hình 6 Cài đặt chương trình Matlab tính phần thể tích hình paraboloid-eliptic: 2 x  y  z = 45 -   3     2  2  3  2 nằm phía trên mặt phẳng oxy, bằng phương pháp Monte-Carlo với số các điểm ngẫu nhiên là tham số N được nhập từ bàn phím khi chạy chương trình Đưa kết quả ra màn hình B Sử dụng các hàm nội trú của Matlab 1 Tính các tích phân... RelTol=1 0-3 và sai số tuyệt đối AbslTol=1 0 -6 3 Cài đặt hàm Richard.m tính tích phân xác định theo phương pháp ngoại suy Richardson Lệnh gọi hàm có dạng: Tp  Richard  FUN , a , b, Tol  , trong đó: - FUN là một xâu chứa tên hàm dưới dấu tích phân; - a và b là các cận lấy tích phân; - Tol =[ RelTol AbsTol] là sai số cho trước hoặc mặc định sai số tương đối RelTol=1 0-3 và sai số tuyệt đối AbslTol=1 0 -6 4... tuyệt đối AbslTol=1 0 -6 4 Cài đặt chương trình dùng phương pháp Monte-Carlo tính thể tích của phần hình cầu: (x-3)2 + (y –2)2 +(z+1)2  24 nằm phía trên mặt phẳng xoy Chọn N=100000, cho hiện kết quả ra màn hình 5 Cài đặt chương trình dùng phương pháp Monte-Carlo tính thể tích của phần hình elipxoid: x 2  2   3   y  2   z  42 ≤ 30       2  3    163 nằm trong góc phần tám thứ nhất,... tuyệt đối Tol thay cho sai số mặc định 1 0 -6 150 Thí dụ 12 Tính tích phân:  1 1  dx  dy  ( y.sinx  z.cos y )dz 0 0 1 Giải >> F=inline( ‘y*sin(x)+z*cos(x)’,’x’,’y’,’z’) ; >> TP= triplequad(F, 0, pi, 0, 1, -1 , 2) ans = 3.0000 6. 4 TÍCH PHÂN NGẪU NHIÊN 6. 4.1 Phương pháp Monte-Carlo Việc tính tích phân bội đòi hỏi rất nhiều công sức xây dựng công thức tính toán, do các cận lấy tích phân có thể là... phân; - a và b là các cận lấy tích phân; - Tol =[ RelTol AbsTol] là sai số cho trước hoặc mặc định sai số tương đối RelTol=1 0-3 và sai số tuyệt đối AbslTol=1 0 -6 2 Cài đặt hàm Parabol.m tính gần đúng tích phân xác định theo phương pháp Simpson Lệnh gọi hàm có dạng: Tp  Parabol  FUN , a, b, Tol  , trong đó: - FUN là một xâu chứa tên hàm dưới dấu tích phân; - a và b là các cận lấy tích phân; - Tol . x.*cos(x )-5 *y.*sin(x) >> TP= quad( @(x)F(x,3), -pi, 1) % % Lấy tích phân theo x, y=3 TP = 25.4 863 >> TP= quad (@(x)F(x,5), -pi, 1) TP = 40.8893 Thí dụ 6. Cài đặt chương trình tính. Giải. - Lập hàm dưới dấu tích phân: % Matlab Code for Evalution of the User-Supplied Function function v=velocity(r) n=8 ; r0=0.5; v = r.*(1-r/r0).^(1/n); - Cài đặt chương trình tính tích. cài đặt chương trình tính toán, việc xác định M 2 nhiều khi rất khó, nhất là khi tên hàm lấy tích phân là tham số vào của chương trình. Từ công thức sai số trên có thể viết:  I h - I | =

Ngày đăng: 11/07/2014, 09:20

TỪ KHÓA LIÊN QUAN

w