TÍNH
GIÁ TRỊ CỦA ĐA THỨC
< P2>
Sơ đồ Horner tổng quát: Giả
sử chúng ta có đa thức :
Pn(x)
= a0xn + a1xn
- 1 + a2xn - 2 +....+ an (1)
Mặt khác chúng ta có thể biến đổi
đa thức về dạng :
Pn(x)
= (x - xo)Pn-1(x) + Pn(xo) (3)
Trong đó Pn-1(x) là đa thức bậc n - 1 và có
dạng :
Pn-1
(x) = boxn-1 + bo-1xn
- 2 + b2xn - 3 +....+ bn-1 (4)
Thuật toán để tìm các hệ số nhận được
bằng cách so sánh (1) và (3) :
bo
= ao
bi
= ai + bi-1xo
bn
= Pn(xo)
So sánh (2) và (3) ta có :
hay :
và khi chia hai vế cho (x - x0)
ta nhận được :
So sánh (4) và (5) ta nhận được
kết quả :
Trong đó
Pn-1(x) lại có thể phân tích giống như Pn(x) dạng (3) để
tìm ra Pn-1(xo). Quá trình này được tiếp tục cho đến khi
ta tìm hết các hệ số của chuỗi Taylor của Pn(x)
Tổng quát thuật toán thể hiện ở
bảng sau:
Pn(x) ao a1 a2 a3 ... an-1 an
x = xo 0 boxo b1xo b2xo bn-2xo bn-1xo
P+-1(x) bo b1 b2 b3 ... bn-1 bn = Pn(xo)
Để hiểu rõ hơn chúng ta lấy một
ví dụ cụ thể sau: Khai triển đa thức sau tại x0 = 2
P(x)
= x5 - 2x4 + x3 -5x + 4
Ta lập bảng tính sau
:
2 1 -2 1 0 -5 4
0 2 0 2
4 2
2 1 0 1 2 -1 2 = P(2)/0!
0 2 4 10 24
2 1 2 5 12 23 = P'(2)/1!
0 2 8 26
2 1 4 13 38 = P"(2)/2!
0 2 12
2 1
6 25 = P"'(2)/3!
0 2
2 1
8 = P""(2)/4!
0
1 = P""'(2)/4!
Như vậy
:
Pn(x)
= (x - 2)5 + 8(x - 2)4 +
25(x - 2)3 + 38(x - 2)2
+ 23(x - 2) + 2
Chương
trình sau dùng để xác định các hệ số của chuỗi Taylor của đa thức P(x) tại x0
= 2.
Chương trình 1-2
#include
<conio.h>
#include
<stdio.h>
#define m 10
void
main(void)
{
float a[m],b[m],c[m];
int n,i,j,k;
float x;
clrscr();
printf("Cho bac cua da thuc n =
");
scanf("%d",&n);
printf("Cho gia tri x = ");
scanf("%f",&x);
printf("Vao cac he so a\n");
for (k=n;k>=0;k--)
{
printf("a[%d] = ",n-k);
scanf("%f",&a[k]);
}
printf("\n");
b[n] = a[n];
c[n] = a[n];
for (k=0;k<=n-1;k++)
{
for (i=n-1;i>=k;i--)
b[i] = b[i+1]*x + a[i];
c[k] = b[k];
for (j=n;j>=k+1;j--)
a[j] = b[j];
}
printf("\nSo do Horner tong
quat");
printf("\nKhai trien tai x =
%.4f\n",x);
for (k=n;k>=0;k--)
printf("%10.4f\t",c[k]);
getch();
}
Tags:
Phương Pháp Tính