Tải bản đầy đủ (.pdf) (7 trang)

Hướng dẫn cách tính đúng dành cho sinh viên phần 9 doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (235.27 KB, 7 trang )


57
CHƯƠNG VIII TÍNH GẦN ĐÚNG TÍCH PHÂN XÁC ĐỊNH

8.1. Giới thiệu
Xét hàm số f(x) liên tục trên [a,b], nếu xác định được nguyên hàm F(x) ta
có công thức tính tích phân:

−=
b
a
)a(F)b(Fdx)x(f

Nhưng trong đa số các trường hợp ta không xác định được nguyên hàm của,
hoặc không xác định được biểu thức của f(x) mà chỉ nhận được các giá trị
của nó tạI nhưng điểm rời rạc. Trong trường hợp như vậy ta có thể sử dụng
các công thức gần đúng sau để tính tích phân:
- Công thức hình thang.
- Công thức Parabol
- Công thức Newton _Cotet
8.2. Công thức hình thang
Chia [a, b] thành n đoạn bằng nhau với khoảng cách h = (b - a)/n theo các
điểm chia: x
0
=a, x
1
=a+h, , x
n
= b
∫∫∫∫
=+++=



=
b
a
2x
x
x
x
x
ax
1
n
1n
1
0
Sdx)x(f dx)x(fdx)x(fdx)x(f

S là diện tích giới hạn bởi đường cong f(x), x=a, x=b, và trục x







Xét trên [x
0
, x
1
], ta xem đường cong f(x) là đường thẳng

S
f(x)
x
0
=a
S
1

S
n
x
1
x
n-1
x
n
= b

58
)yy(h
2
1
SS
10hthang1
+=≈

Tương tự:
)yy(h
2
1

S
212
+≈

… …
)yy(h
2
1
S
n1nn
+≈


Vậy:

+++++≈

b
a
n1n210
)yy2 y2y2y(
2
h
dx)x(f

8.3. Công thức Parabol
Chia [a, b] thành 2n đoạn bằng nhau với khoảng cách h = (b - a)/2n theo các
điểm chia: x
0
=a, x

1
=a+h, , x
2n
= b
∫∫∫∫

+++=
b
a
x
x
x
x
x
x
n2
2n2
4
2
2
0
dx)x(f dx)x(fdx)x(fdx)x(f

Xét trên [x
0
, x
2
] xem đường cong f(x) là Parabol (nội suy bậc 2 của 3 điểm
x
0

, x
1,
x
2
)
)xx)(xx(
)xx)(xx(
y
)xx)(xx(
)xx)(xx(
y
)xx)(xx(
)xx)(xx(
y)x(L)x(f
1202
10
2
2101
20
1
2010
21
02
−−
−−
+
+
−−



+
−−


=≈

∫∫

2
0
2
0
x
x
x
x
2
dx)x(Ldx)x(f

Thay x
0
= a, x
1
= a + h , x
2
= a+2h vào, ta có:

++≈
2
0

x
x
210
)yy4y(
3
h
dx)x(f

Tương tự:

59

++≈
4
2
x
x
432
)yy4y(
3
h
dx)x(f



++≈
−−
n2
2n2
x

x
21n22n2
)yy4y(
3
h
dx)x(f

Vậy:

++++++≈
−−
b
a
n21n22n2210
)yy4y2 y2y4y(
3
h
dx)x(f

Ví dụ. Tính J =

+
5
1
2
x1
dx
theo 3 cách
Giải


Cách 1:
4/5arctgarctgxJ
5
1
Π−== ≈ 0.588
Cách 2: chia [1, 5] thành 4 đoạn bằng nhau (h=1) với các điểm chia
x
i
1 2 3 4 5
y
i
1/2 1/5 1/10 1/17 1/26
Công thức hình thang:
J ≈ (1/2 + 2/5 +2/10 +2/17 + 1/26) /2 ≈ 0.628
Cách 3: Công thức Parabol:
J ≈ (1/2 + 4/5 +2/10 +4/17 + 1/26) /3 ≈ 0.591
8.4. Công thức Newton-Cotet
Chia [a, b] thành n đoạn bằng nhau với khoảng cách h = (b - a)/n với x
0
=a;
x
1
= a + h , , x
n
= b.
Đặt x = a + (b - a)t => dx = (b - a) dt
x
i
a a+h a + 2h b
t

i
0 1/n 2/n 1
Khi đó:
∫∫ ∫
Φ−=−+−=
b
a
1
0
1
0
dt)t()ab(dt)t)ab(a(f)ab(dx)x(f


Với φ(t)= f(a + (b - a)t
Xem φ(t) là hàm nội suy Lagrange của n + 1 điểm: t
0
, t
1
, , t
n


60
)
n
1n
1) (
n
1

1)(01(
)
n
1n
t) (
n
1
t)(0t(
y

)1
n
1
) (
n
2
n
1
)(0
n
1
(
)1t) (
n
2
t)(0t(
y
)1) (
n
2

)(
n
1
(
)1t) (
n
2
t)(
n
1
t(
y)t(L)t(
n
10n

−−−

−−−
+
+
−−−
−−−
+
−−−
−−−
=≈Φ

Khi đó:
∫∫
≈Φ

1
0
1
0
n
dt)t(Ldt)t(

Đặt


+


−−−

+


−−−
=
1
0
i
n
dt
)1
n
i
( )
n

1i
n
i
)(
n
1i
n
i
( )
n
1
n
i
)(0
n
i
(
)1t ()
n
1i
t)(
n
1i
t( )
n
1
t)(0t(
P

Vậy:



=
−≈
b
a
n
0i
i
ni
py)ab(dx)x(f

Xét n = 1 ( h = b-a )

−=


=
1
0
0
1
2
1
dt
10
1t
P
;


=


=
1
0
1
1
2
1
dt
01
0t
P


+=+−=
b
a
10
1
0
)yy(
2
h
)
2
y
2
y

)(ab(dx)x(f
→ Công thức hình thang
Lưu ý: Giá trị của
i
n
P có thể tra trong bảng sau:

n
i
n
P

1 1/2 1/2
2 1/6 4/6 1/6
3 1/8 3/8 3/8 1/8
4 9/71 16/45 2/15 16/45 9/70
5 19/288 25/95 25/144 25/144 25/95 19/288
… … … … … … …


61
BÀI TẬP


1.
Khai báo (định nghĩa) hàm trong C để tính gần đúng tích phân xác định
của f(x) tr ên [a, b] (đối kiểu con trỏ hàm)
a.
Dùng công thức hình thang
b.

Dùng công thức Parabol
c.
Dùng công thức Newton-cotet
2. Viết chương trình tính gần đúng tích phân xác định trên [a, b] của 1 hàm
f(x) cụ thể (sử dụng các hàm đã khai báo trong câu 1). So sánh kết quả,
nhận xét.


62
MỘT SỐ CHƯƠNG TRÌNH THAM KHẢO


1. Tính gần đúng tích phân xác định

# include <stdio.h>
# include "conio.h"
# include "math.h"
# define PI 3.14159
float d[10];int n;
double g(double x)
{
return 1/(1+x*x);
}
double tp(double (*f)(double),float a,float b)
{
int n=100,i;
float s,h=(b-a)/n;
s=(f(a)+f(b))/2;
for (i=1; i<n;i++) s+=f(a+i*h);
return s*h;

}

void nhap(float *a, int *n)
{ int i;
printf("\n Nhap bac da thuc: ");scanf("%d",n);
printf("\n Nhap he so cua ham da thuc:\n");

for (i=0;i<=*n; ++i) {
printf(" a[%d]=",i);
scanf("%f",a+i);
}
}

double f(double x)
{
float p=d[0]; int i;
for(i=1;i<=n;i++) p=p*x+d[i];
return p;

}

main()
{ float a,b; char tt;

63
while (1) {
printf("\n Nhap can de tinh tich phan: "); scanf("%f%f",&a,&b);

/*printf("a= "); scanf("%f",&a);
printf("b= "); scanf("%f",&b);*/

printf("\nS1=%.3f",tp(sin,0,PI));
printf("\nS2=%.3f",tp(cos,0,PI/2));
printf("\nS3=%.3f",tp(g,a,b));
nhap(d,&n);
printf("\nS4=%.3f",tp(f,a,b));

printf("\n\n Ban tiep tuc ko(c/k)?");
tt=getch();
if (tt!='c') break;
}
}



2. Tim nghiem gan dung cua phtrinh da thuc bac n bang PP chia doi

# include <stdio.h>
# include "conio.h"
# include "math.h"
# define eps 1e-3
float f(float);
void nhap(float *, int );
float d[10]; int n;

void main()
{ float a,b,c; char tt;
while (1) {
printf("\n Nhap bac phuong trinh: ");scanf("%d",&n);
nhap(d,n);
printf("\n Nhap khoang nghiem: "); scanf("%f%f",&a,&b);

/* printf("a= "); scanf("%f",&a);
printf("b= "); scanf("%f",&b);*/
if (f(a)*f(b)<0) {
c=(a+b)/2;
while (fabs(a-b) >= 1e-3 && f(c)!=0) {
printf("\n%.3f %.3f %.3f",a,b,f(c));
if (f(b)*f(c)>0)
b=c;
else a=c;
c=(a+b)/2;

×