9
CHƯƠNG III TÍNH GIÁ TRỊ HÀM
3.1. Tính giá trị đa thức. Sơ đồ Hoocner
3.1.1. Đặt vấn đề
Cho đa thức bậc n có dạng tổng quát :
p(x) = a
0
x
n
+ a
1
x
n-1
+ ... + a
n-1
x+ a
n
(a#0)
Tính giá trị đa thức p(x) khi x = c (c: giá trị cho trước)
3.1.2. Phương pháp
Áp dụng sơ đồ Hoocner nhằm làm giảm đi số phép tính nhân (chỉ thực
hiện n phép nhân), phương pháp này được phân tích như sau:
p(x) = (...((a
0
x + a
1
)x +a
2
)x+ ... +a
n-1
)x + a
n
Ö
p(c) =
(...((a
0
c + a
1
)c +a
2
)c+ ... +a
n-1
)c + a
n
Ö
Đặt p
0
= a
0
p
1
= a
0
c + a
1
= p
0
c + a
1
p
2
= p
1
c
+ a
2
. . . . . . . .
p
n
= p
n-1
c + a
n
= p(c)
Sơ đồ Hoocner
a
0
a
1
a
2
.... a
n-1
a
n
p
0*
c p
1*
c .... p
n-2*
c p
n-1*
c
p
0
p
1
p
2
... p
n-1
p
n
= p(c)
Vd: Cho p(x) = x
6
+ 5x
4
+ x
3
- x - 1 Tính p(-2)
Áp dụng sơ đồ Hoocner:
1 0 -5 2 0 -1 -1
-2 4 2 -8 16 -30
1 -2 -1 4 -8 15 -31
Vậy p(-2) = -31
3.1.3. Thuật toán
+ Nhập vào: n, c, các hệ số a
i
(
n,0i = )
10
+ Xử lý: Đặt p = a
0
Lặp i = 1 → n : p = p * c + a
i
+ Xuất kết quả: p
3.1.4. Chương trình
#include <stdio.h>
#include <conio.h>
main ( )
{ int i, n; float c, p, a [10];
clrsr ();
printf (“Nhap gia tri can tinh : ”); scanf (“%f”,&c);
printf (“Nhap bac da thuc : ”); scanf (“%d”,&n);
printf (“Nhap các hệ số: \n”);
for (i = 0, i<=n; i++) {
printf (“a[%d] = ”, i); scanf (“%f”, &a[i]);
}
p = a[0];
for (i=1, i<=n; i++) p = p*c + a[i];
printf (“Gia tri cua da thuc : %.3f”, p);
getch ( );
}
3.2. Sơ đồ Hoocner tổng quát
3.2.1. Đặt vấn đề
Cho đa thức bậc n có dạng tổng quát :
p(x) = a
0
x
n
+ a
1
x
n-1
+ ... + a
n-1
x
+
a
n
(a
0
# 0) (1)
Xác định các hệ số của p(y + c), trong đó y: biến mới, c: giá trị cho trước
3.2.2. Phương pháp
Giả sử: p(y+c) = b
0
y
n
+ b
1
y
n-1
+ ..... + b
n-1
y + b
n
(2)
Như vậy ta phải xác định các hệ số b
i
)n,0i( =
11
Xác định b
n
Xét y=0, từ (2) => p(c) = b
n
Xác định b
n-1
p(x) = (x-c) p
1
(x) + p(c) (1
’
)
Trong đó p
1
(x) : đa thức bậc n-1
n1n2n
2n
1
1n
0
b)byb...ybyb(y)cy(p +++++=+
−−
−−
Đặt x=y+c ta có:
n1n2n
2n
1
1n
0
b)byb...ybyb)(cx()x(p +++++−=
−−
−−
(2’)
Đồng nhất (1’) & (2’) suy ra:
p
1
(x) = b
0
y
n-1
+ b
1
y
n-2
+ ...+ b
n-2
y + b
n - 1
Xét y = 0, p
1
(c) = b
n-1
Tương tự ta có: b
n-2
= p
2
(c), …, b
1
= p
n-1
(c)
Vậy b
n-i
= p
i
(c) (i = 0-->n) , b
0
=a
0
Với p
i
(c) là giá trị đa thức bậc n-i tại c
Sơ đồ Hoocner tổng quát:
a
0
a
1
a
2
.... a
n-1
a
n
p
0*
c p
1*
c .... p
n-2*
c p
n-1*
c
p
0
p
1
p
2
... p
n-1
p
n
= p(c)=b
n
p
0
’
*
c p
1
’
*
c .... p
n-2
’
*
c
p
0
p
1
’
p
2
’
... p
n-1
’
= p
1
(c)=b
n-1
… ...
Ví dụ: Cho p(x) = 2x
6
+ 4x
5
- x
2
+ x + 2. Xác định p(y-1)
12
Áp dụng sơ đồ Hoocner tổng quát :
\
p(x) 2 4 0 0 -1 1 2
-2 -2 2 -2 3 -4
p
1
(x) 2 2 -2 2 -3 4 -2
-2 0 2 -4 7
p
2
(x) 2 0 -2 4 -7 11
-2 2 0 -4
p
3
(x) 2 -2 0 4 -11
-2 4 -4
p
4
(x) 2 -4 4 0
-2 6
p
5
(x) 2 -6 10
-2
2
-8
Vậy p(y-1) = 2y
6
- 8y
5
+ 10y
4
- 11y
2
+11y- 2
3.2.3. Thuật toán
- Nhập n, c, a [i] (i =
n,0
)
- Lặp k = n → 1
Lặp i = 1 → k : a
i
= a
i-1
* c + a
i
- Xuất a
i
(i =
n,0
)
3.3. Khai triển hàm qua chuỗi Taylo
Hàm f(x) liên tục, khả tích tại x
0
nếu ta có thể khai triển được hàm f(x) qua
chuỗi Taylor như sau:
( )
!n
)xx)(x(f
...
!2
)xx)(x(f
!1
)xx)(x(f
)x(f)x(f
n
00
n2
0000
0
−
++
−
′′
+
−
′
+≈
khi x
0
= 0, ta có khai triển Macloranh:
!n
x)0(f
...
!2
x)0(f
...
!1
x)0(f
)0(f)x(f
n)n(2
++
′′
++
′
++≈
Ví dụ:
...
!6
x
!4
x
!2
x
1Cosx
642
+−+−≈
13
BÀI TẬP
1.
Cho đa thức p(x) = 3x
5
+ 8x
4
–2x
2
+ x – 5
a.
Tính p(3)
b.
Xác định đa thức p(y-2)
2.
Khai báo (định nghĩa) hàm trong C để tính giá trị đa thức p(x) bậc n
tổng quát theo sơ đồ Hoocner
3.
Viết chương trình (có sử dụng hàm ở câu 1) nhập vào 2 giá trị a, b.
Tính p(a) + p(b)
4.
Viết chương trình nhập vào 2 đa thức p
n
(x) bậc n, p
m
(x) bậc m và giá trị
c. Tính p
n
(c) + p
m
(c)
5.
Viết chương trình xác định các hệ số của đa thức p(y+c) theo sơ đồ
Hoocner tổng quát
6.
Khai báo hàm trong C để tính giá trị các hàm e
x
, sinx, cosx theo khai
triển Macloranh.