Bài giảng Phương pháp tính - Chương 6: Tính gần đúng đạo hàm và tích phân xác định

CHƯƠNG 6: TÍNH GẦN ĐÚNG ĐẠO HÀM VÀ TÍCH  
PHÂN XÁC ĐỊNH  
§1. ĐẠO HÀM ROMBERG  
Đạo hàm theo phương pháp Romberg là một phương pháp ngoại suy để  
xác định đạo hàm với một độ chính xác cao. Ta xét khai triển Taylor của hàm  
f(x) tại (x + h) và (x - h):  
h2  
h3  
h4  
f(x h) f(x) hf (x) f (x) f (x) f(4)(x)   
(1)  
  
  
2
3!  
4!  
h2  
h3  
h4  
f(x h) f(x) hf (x) f (x) f (x) f(4)(x)   
(2)  
  
  
2
3!  
4!  
Trừ (1) cho (2) ta có:  
2h3  
3!  
2h5  
5!  
f(5) (x)   
(3)  
(4)  
(5)  
  
f(x h) f(x h) 2hf (x)   
f (x)   
Như vậy rút ra:  
f(x h) f(x h) h2  
h4  
5!  
  
f (x)   
f (x) f(5)(x)   
2h  
3!  
hay ta có thể viết lại:  
1
2h  
f(x h) f(x h)  
   
a2h2 a4h4 a6h6   
f (x)   
trong đó các hệ số ai phụ thuộc f và x.  
Ta đặt:  
1
2h  
(h)   
f(x h) f(x h)  
(6)  
Như vậy từ (5) và (6) ta có:  
2
4
6
D(1,1)  (h) f (x) a2h a4h a6h   
(7)  
(8)  
h
2
h2  
4
h4  
h6  
   
D(2,1)    
f (x) a  
a  
a  
  
   
2
4 16  
6 64  
   
và tổng quát với hi = h/2i-1 ta có :  
2
4
6
D(i,1)  (hi ) f (x) a2hi a4hi a6hi   
(9)  
Ta tạo ra sai phân D(1,1) - 4D(2,1) và có:  
h
2
   
3
4
15  
16  
   
4
 3f (x) a h a6h6   
(10)  
(h) 4  
   
4
Chia hai vế của (10) cho -3 ta nhận được:  
4D(2,1) D(1,1)  
1
5
16  
4
f (x) a4h a6h6   
(11)  
D(2,2)   
4
4
Trong khi D(1, 1) và D(2, 1) sai khác f(x) phụ thuộc vào h2 thì D(2, 2) sai khác  
f(x) phụ thuộc vào h4 . Bây giờ ta lại chia đôi bước h và nhận được:  
158  
4
6
1
4
h
2
   
5
16  
h
   
2
   
   
D(3,2) f (x) a  
a
  
6    
(12)  
(13)  
(14)  
4    
và khử số hạng có h4 bằng cách tạo ra:  
15  
64  
D(2,3) 16D(3,2)  15f (x)  a6h6  
Chia hai vế của (13) cho -15 ta có:  
16D(3,2) D(2,2)  
1
f (x) a6 h6   
D(3,3)   
15  
64  
Với lần tính này sai số của đạo hàm chỉ còn phụ thuộc vào h6. Lại tiếp tục chia  
đôi bước h và tính D(4, 4) thì sai số phụ thuộc h8. Sơ đồ tính đạo hàm theo  
phương pháp Romberg là :  
D(1, 1)  
D(2, 1)  
D(3, 1)  
D(4, 1)  
D(2, 2)  
D(3, 2)  
D(4, 2)  
D(3, 3)  
D(4, 3)  
D(4, 4)  
. . . . . . . . . . . .  
trong đó mỗi giá trị sau là giá trị ngoại suy của giá trị trước đó ở hàng trên .  
Với 2 j i n ta có:  
4j1 D(i, j1) D(i 1, j1)  
D(i, j)   
4j1 1  
và giá trị khởi đầu là:  
1
2hi  
D(i, j)  (hi )   
f(x hi ) f(x hi )  
với hi = h/2i-1 .  
Chúng ta ngừng lại khi hiệu giữa hai lần ngoại suy đạt độ chính xác yêu  
cầu.  
Ví dụ: Tìm đạo hàm của hàm f(x) = x2 + 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  
20.5  
1
D(2,1)   
D(3,1)   
D(2,2)   
D(3,2)   
[f(2.25) f(1.75)]4.201843569  
20.25  
1
[f(2.125) f(1.875)]4.200458976  
20.125  
4D(2,1) D(1,1)  
4.19995935  
4.200458976  
4 1  
4D(3,1) D(2,1)  
4 1  
159  
42 D(3,2) D(2,2)  
42 1  
D(3,3)   
4.200492284  
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 xo = 0 ta nhận được giá  
trị đạo hàm là 1.000000001.  
Chương trình 6-1  
//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;  
160  
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);  
}
float dy(float x)  
{
float b=(y(x+h)-y(x-h))/(2*h);  
return(b);  
}
§2. KHÁI NIỆM VỀ TÍCH PHÂN SỐ  
Mục đích của tính tích phân xác định là đánh giá định lượng biểu thức:  
b
J f(x)dx  
y
a
B
trong đó f(x) là hàm liên tục trong khoảng [a,b]  
và có thể biểu diễn bởi đường cong y=f(x). Như  
vậy tích phân xác định J là diện tích SABba, giới  
hạn bởi đường cong f(x), trục hoành, các đường  
thẳng x = a và x = b. Nếu ta chia đoạn [a, b]  
thành n phần bởi các điểm xi thì J là giới  
A
b
a
x
hạn của tổng diện tích các hình chữ nhật f(xi).(xi+1 - xi) khi số điểm chia tiến tới  
, nghĩa là:  
n
J lim f(x )(x x )  
i
i1  
i
n  
i0  
Nếu các điểm chia xi cách đều, thì ( xi+1- xi ) = h. Khi đặt f(xo) = fo, f(x1)=f1  
,... ta có tổng:  
n
S h f  
n
i
i0  
161  
Khi n rất lớn, Sn tiến tới J. Tuy nhiên sai số làm tròn lại được tích luỹ. Do  
vậy cần phải tìm phương pháp tính chính xác hơn. Do đó người ta ít khi dùng  
phương pháp hình chữ nhật như vừa nêu.  
§3. PHƯƠNG PHÁP HÌNH THANG  
Trong phương pháp hình thang, thay vì chia diện tích SABba thành các  
hình chữ nhật, ta lại dùng hình thang. Ví dụ nếu chia thành 3 đoạn như hình  
vẽ thì:  
S3 = t1 + t2 + t3  
trong đó ti là các diện tích nguyên tố. Mỗi diện tích này là một hình thang:  
ti = [f(xi) + f(xi-1)]/ (2h)  
= h(fi - fi-1) / 2  
Như vậy:  
S3 = h[(fo + f1) + (f1 + f2) + (f2 + f3)] / 2  
= h[fo + 2f1 + 2f2 + f3] / 2  
Một cách tổng quát chúng ta có:  
b a  
n
b a  
Sn   
f0 2f2  2fn1 fn  
n1  
i   
hay: Sn   
f f 2 f  
0
n
n
i1  
Một cách khác ta có thể viết:  
a(k1)h  
b f(x)dx n1  
f(x)dx n1{hf(a kh)/ 2 f[a (k 1)h]/ 2}  
akh  
k1  
k0  
a
hay:  
b f(x)dx h{f(a)/ 2 f(a h)   f[a (n 1)h]f(b)/ 2}  
a
Chương trình tính tích phân theo phương pháp hình thang như sau:  
Chương trình 6-2  
//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);  
162  
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();  
}
Dùng chương trình này tính tích phân của hàm cho trong function  
trong khoảng [0 , 1] với 20 điểm chia ta có J = 0.261084.  
§4. CÔNG THƯC SIMPSON  
Khác với phương pháp hình thang, ta chia đoạn [a, b] thành 2n phần  
đều nhau bởi các điểm chia xi:  
a = xo < x1 < x2 < ....< x2n = b  
xi = a + ih ; h = (b - a)/ 2n với i = 0 , . . , 2n  
Do yi = f(xi) nên ta có:  
163  
b
x2  
x4  
x2n  
fdx  
   
f(x)dx fdx fdx ...  
a
x0  
x2  
x2n2  
Để tính tích phân này ta thay hàm f(x) ở vế phải bằng đa thức nội suy  
Newton tiến bậc 2:  
t(t 1)  
P2 y0 ty0   
2 y0  
2!  
và với tích phân thứ nhất ta có :  
x
x
2
2f(x)dx P2 (x)dx  
0
x
x
0
Đổi biến x = x0 + th thì dx = hdt, với x0 thì t = 0 và với x2 thì t = 2 nên:  
x
2   
0   
2
t(t 1)  
P2 (x)dx h y0 ty0   
2 y dt  
0   
  
2!  
x
0
t2  
2
1 t3 t2   
t2  
h y0t  y0   
2 y  
0
2 3  
2
t0  
1 8 4  
2 3 2  
h 2y0 2y0   
2 y  
0
h
3
y0 4y1 y2  
Đối với các tích phân sau ta cũng có kết quả tương tự:  
x
2i2  
h
3
f(x)dx   
y2i 4y2i1 y2i2  
x
2i  
Cộng các tích phân trên ta có:  
b
h
3
f(x)dx   
y0 4  
y1 y3  y2n1  
2  
y2 y4  y2n2  
y2n  
a
Chương trình dùng thuật toán Simpson như sau:  
Chương trình 6-3  
//Phuong phap Simpson;  
#include <conio.h>  
#include <stdio.h>  
#include <math.h>  
float y(float x)  
{
float a=4/(1+x*x);  
164  
return(a);  
}
void main()  
{
int i,n;  
float a,b,e,x,h,x2,y2,x4,y4,tp;  
clrscr();  
printf("Tinh tich phan theo phuong phap Simpson\n");  
printf("Cho can duoi a = ");  
scanf("%f",&a);  
printf("Cho can tren b = ");  
scanf("%f",&b);  
printf("Cho so diem tinh n = ");  
scanf("%d",&n);  
h=(b-a)/n;  
x2=a+h;  
x4=a+h/2;  
y4=y(x4);  
y2=y(x2);  
for (i=1;i<=n-2;i++)  
{
x2+=h;  
x4+=h;  
y4+=y(x4);  
y2+=y(x2);  
}
y2=2*y2;  
y4=4*(y4+y(x4+h));  
tp=h*(y4+y2+y(a)+y(b))/6;  
printf("Gia tri cua tich phan la : %10.8f\n",tp);  
getch();  
}
Dùng chương trình này tính tích phân của hàm trong function trong  
đoạn [0, 1] với 20 khoảng chia cho ta kết quả J = 3.14159265.  
165  
doc 8 trang baolam 15340 Free
Bạn đang xem tài liệu "Bài giảng Phương pháp tính - Chương 6: Tính gần đúng đạo hàm và tích phân xác định", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • docbai_giang_phuong_phap_tinh_chuong_6_tinh_gan_dung_dao_ham_va.doc