TÍNH GIÁ TRỊ CỦA ĐA THỨC(1)



TÍNH GIÁ TRỊ CỦA ĐA THỨC
< 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:
    https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUF_BdClRBarE_r6-W53yMhQF5IOaGKC2WyqgrY2YhovGf0ZdTCyLijDQfb_RSqt0p6qHVN5tiVn3u9VO8ziT1vj8PcKQEQP0Za8T8E-Il_ngBA7uCgR_-kr4wE4wuRzzAcG68fuITW08/s200/horner.png
        P(x) = a0x­­n  + a1x­­n - 1 + a2x­­n - 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();
  }
Ntech Developers

Programs must be written for people to read, and only incidentally for machines to execute.

Post a Comment

Previous Post Next Post