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.
Trang 1CH NG 6: TÍNH G N ĐÚNG Đ O HÀM VÀ TÍCH
Đ 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):
⋅
⋅ + +
′′′
+
′′
+
′ +
=
! 4
h ) x ( f
! 3
h ) x ( f 2
h ) x ( f h ) x ( ) h x
4 3
2
(1)
⋅
⋅
− +
′′′
−
′′
+
′
−
=
! 4
h ) x ( f
! 3
h ) x ( f 2
h ) x ( f h ) x ( ) h x
4 3
2
(2)
Tr (1) cho (2) ta có:
⋅⋅
⋅ + +
′′′
+
′
=
−
−
! 5
h 2 ) x ( f
! 3
h 2 ) x ( f h 2 ) h x ( ) h x
5 3
(3)
Nh v y rút ra:
⋅
⋅
−
−
′′′
−
−
− +
=
! 5
h ) x ( f
! 3
h h
2
) h x ( ) h x ( )
x
(
4 2
(4) hay ta có th vi t l i:
=
6
4 4
2
2h a h a h a
) h x ( ) h x ( h 2
1 )
x
(
Ta đ t:
[ (x h) (x h) h
2
1 )
h
Nh v y t (5) và (6) ta có:
⋅⋅
⋅
−
−
−
−
′
= ϕ
6
4 4
2
2h a h a h a
) x ( f ) h ( ) 1
,
1
(
⋅
⋅
−
−
−
−
′
=
⎟
⎠
⎞
⎜
⎝
⎛ ϕ
=
64
h a 16
h a 4
h a ) x ( f 2
h )
1
,
2
(
D
6 6
4 4
2
và t ng quát v i hi= h/2i 1 ta có :
⋅
⋅
−
−
−
−
′
= ϕ
i 6
4 i 4
2 i 2
i) f(x) a h a h a h h
( ) 1
,
i
(
Ta t o ra sai phân D(1,1) 4D(2,1) và có:
⋅
⋅
−
−
−
′
−
=
⎟
⎠
⎞
⎜
⎝
⎛ ϕ
−
6
4
4 a h 16
15 h
a 4
3 ) x ( f 3 2
h 4 )
h
Chia hai v c a (10) cho 3 ta nh n đ c:
⋅⋅
⋅ + +
+
′
=
−
6
4
4 a h 16
5 h a 4
1 ) x ( f 4
) 1 , 1 ( D ) 1 , 2 ( D 4 ) 2
,
2
(
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
Trang 2⋅ +
⎟
⎠
⎞
⎜
⎝
⎛ +
⎟
⎠
⎞
⎜
⎝
⎛ +
′
2
h a 16
5 2
h a 4
1 ) x ( f ) 2
,
3
(
và kh s h ng có h4 b ng cách t o ra:
6
6h a 64
15 )
x ( f 15 )
2 , 3 ( D 16 ) 3
,
2
(
Chia hai v c a (13) cho 15 ta có:
⋅⋅
⋅
−
−
′
=
−
6h a 64
1 ) x ( f 15
) 2 , 2 ( D ) 2 , 3 ( D 16 ) 3
,
3
(
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)
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ó:
1 4
) 1 j 1 i ( D ) 1 j i ( D 4 ) j
i
(
1 j
−
−
−
−
−
và giá tr kh iđ u là:
[ (x h ) (x h )]
h 2
1 ) h ( ) j
i
(
i
i = + − − ϕ
=
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
201843569
4 )]
75 1 ( ) 25 2 ( [ 25 0 2
1 )
1
,
2
(
D
207496266
4 )]
5 1 ( ) 5 2 ( [ 5 0 2
1 )
1
,
1
(
D
=
−
×
=
=
−
×
=
200458976
4 )]
875 1 ( ) 125 2 ( [ 125 0 2
1 )
1
,
3
(
×
=
19995935
4 1
4
) 1 , 1 ( D ) 1 , 2 ( D 4 ) 2
,
2
(
−
−
=
200458976
4 1
4
) 1 , 2 ( D ) 1 , 3 ( D 4 ) 2
,
3
(
−
−
=
Trang 3200492284
4 1
4
) 2 , 2 ( D ) 2 , 3 ( D 4 ) 3
,
3
(
2
=
−
−
=
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 ) {
Trang 4d[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
a
dx ) x ( J
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 xithì J là gi i
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à:
y
B A
x b a
) x x
)(
x ( lim
J
n 0
i i i 1 i
n ∑
∞
=
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
0 i i
n h f
S
Trang 5Khi 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
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 đó tilà 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ó:
n f 2f 2f f
n
a b
S = − + +⋅ ⋅⋅+ − +
⎠
⎞
⎜
⎝
−
=
1 n 1 i i n
0
n f f 2 f
n
a b S
M t cách khác ta có th vi t:
} 2 / h ) 1 k ( a [ 2 / kh a ( hf { dx ) x ( dx
)
x
(
1 n
0 k
1 n
1 k
h ) 1 k ( a
kh a
b
a
+ + + +
≈
=
−
=
+ +
+
hay:
} 2 / b ( ] h ) 1 n ( a [ )
h a ( 2 / ) a ( { h dx )
x
(
b
a
+
− + +
⋅
⋅ + + +
=
∫
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)
{
Trang 6};
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();
}
trong kho ng [0 , 1] v i 20 đi m chia ta có J = 0.261084
§4 CÔNG TH C SIMPSON
đ 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ó:
Trang 7∫
−
+ + +
x
x
x
b
a
x
x
n 2
2 n 2
4
2
2
0
fdx
fdx fdx
dx ) x (
Đ 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:
0
2 0
0
! 2
) 1 t t y t y
và v i tích phân th nh t ta có :
∫
0
2
0
x
x 2 x
x
dx ) x ( P dx )
x
(
Đ i bi n x = x0+ th thì dx = hdt, v i x0 thì t = 0 và v i x2thì t = 2 nên:
0
2 0
0
2 t
0 t 0 2 2 3 0
2 0
2 0
0
2 0
0 x
x
2
y y 4 y 3 h
y 2
4 3
8 2
1 y 2 y 2 h
y 2
t 3
t 2
1 y 2
t t y h
dt y
! 2
) 1 t t y t y h dx ) x
(
P
2
0
+ +
=
⎥⎦
⎤
⎢⎣
⎟
⎠
⎞
⎜
⎝
⎛ − +
∆ +
=
⎥
⎦
⎤
⎢
⎣
⎡
∆
⎟
⎠
⎞
⎜
⎝
+
∆ +
=
⎥⎦
⎤
⎢⎣
=
=
=
∫
∫
Đ i v i các tích phân sau ta cũng có k t qu t ng t :
[ 2i 2i 1 2i 2]
x
x
y y
4 y 3
h dx ) x
(
2
i
2
i
2
+ + + +
=
∫+
C ng các tích phân trên ta có:
b
a
y y
y y 2 y
y y 4 y 3
h dx )
x
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)
{
Trang 8}
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