< P1>
1. Sơ đồ Horner: Giả sử chúng ta cần tìm giá trị
của một đa thức tổng quát dạng:
P(x)
= a0xn + a1xn
- 1 + a2xn - 2 +....+ an (1)
tại một trị số x nào đó. Trong
(1) các hệ số ai là các số thực đã cho. Chúng ta viết lại (1) theo
thuật toán Horner dưới dạng:
P(xo)
= (...((a0x + a1)x+ a2x)+...+ an -1 )x
+ an (2)
Từ
(2) ta nhận thấy :
P0
= a0
P1
= P0x + a1
P2
= P1x + a2
P3
= P2x + a3
..................
P(x)
= Pn = Pn-1x + an
Tổng quát ta có :
Pk
= Pk-1x + ak với k = 1, 2...n ; P0 = a0
Do chúng ta chỉ quan tâm đến trị
số của Pn nên trong các công thức truy hồi về sau chúng ta sẽ bỏ qua
chỉ số k của P và viết gọn P := Px + ak với k = 0...n.Khi ta tính
tới k = n thì P chính là giá trị cần tìm của đa thức khi đã cho x. Chúng ta thử
các bước tính như sau :
Ban
đầu P = 0
Bước
0 k = 0 P = ao
Bước
1 k = 1 P = aox + a1
Bước
2 k = 2 P = (aox + a1)x + a2
.................................
Bước
n-1 k = n - 1 P = P(xo) = (...((aox
+ a1)x+a2x)+...+an-1)x
Bước
n k = n P = P(xo) = (...((aox + a1)x+a2x)+...+an-1)x
+ an
Sau đây là chương trình thực hiên
thuật toán trên
Chương trình
#include
<conio.h>
#include
<stdio.h>
#define
m 10
void
main(void)
{
int
k,n;
float p,x;
float a[m];
clrscr();
printf("\nCho bac cua da thuc n =
");
scanf("\%d",&n);
printf("Vao cac he so a:\n");
for (k=1;k<=n+1;k++)
{
printf("a[%d] = ",k-1);
scanf("%f",&a[k]);
};
printf("Cho gia tri x = ");
scanf("%f",&x);
p=0.0;
for (k=1;k<=n+1;k++)
p=p*x+a[k];
printf("Tri so cua da thuc P tai x =%.2f la :%.5f",x,p);
getch();
}
Tags:
Phương Pháp Tính