CÁC PHÉP TÍNH TRÊN ĐA THỨC



http://phet.colorado.edu/sims/curve-fitting/curve-fitting-screenshot.png
CÁC PHÉP TÍNH TRÊN ĐA THỨC
1. Phép cộng hai đa thức: Giả sử chúng ta có hai đa thức A(x) bậc n và B(x) bậc m với n > m. Khi cộng hai đa thức này, chúng ta cộng lần lượt các hệ số cùng bậc của chúng với nhau. Ta có chương trình sau :

Chương trình 1-3


#include <conio.h>
#include <stdio.h>
#define t 10
void main(void)
  {
    int k,n,m;
    float a[t],b[t],c[t];
    clrscr();
    printf("Cho bac cua da thuc A 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 bac cua da thuc B m = ");
    scanf("%d",&m);
            printf("Vao cac he so b\n");
    for (k=1;k<=m+1;k++)
      {
                        printf("b[%d] = ",k-1);
                        scanf("%f",&b[k]);
      }
    printf("\n");
    for (k=1;k<=n+1;k++)
    if (k<=n-m)
      c[k] = a[k];
    else
      c[k] = a[k] + b[k-n+m];
    printf("Cac he so cua da thuc tong C la :\n");
    for (k=1;k<=n+1;k++)
              printf("%.4f\t",c[k]);
            getch();
  }

2. Phép nhân hai đa thức: Để thấy rõ thuật toán  xác định các hệ số của đa thức C(x) là kết quả của phép nhân hai đa thức A(x) và B(x) ta cho một ví dụ cụ thể :
            A(x) = aox5 + a1x4 + a2x3 + a3x2+ a4x  + a5
            B(x) = box3 + b1x2 + b2x + b3
            C(x) = A(x).B(x)
                     = aobox8  + (aob1 + a1bo)x7 +( aob2 + a1b1 + a2bo)x6
                   + (aob3 + a1b2 + a2b1+ a3bo )x5 + (a1b3 + a2b2 + a3b1 + a4bo)x4
                   + (a2b3 + a3b2 + a4b1 + a5b+)x3 + ( a3b3 + a4b2 + a5b1)x2 + a5b2x + a5b3
Các hệ số của đa thức kết quả là :
            Co = aobo
            C1 = aob1 + a1bo
            C2 = aob2 + a1b1 + a2bo
            C3 = aob3 + a1b2 + a2b1+ a3bo
            C4 = a1b3 + a2b2 + a3b1 + a4bo
            C5 = a2b3 + a3b2 + a4b1 + a5bo
            C6 = a3b3 + a4b2 + a5b1
          C7 = a5b2
            C8 = a5b3
 Ta nhận thấy là hệ số Ck của  C(x) là tổng các tích các hệ số của đơn thức bậc i của A(x) và bậc (k-i) của B(x). Chỉ số i = 0 khi k <= m + 1 và i = k + m khi k > m+1. Chỉ số j = k khi k <= n + 1 và j = n +1 khi k > n + 1. Chương trình tính tích hai đa thức :

 

Chương trình 1-4


#include <conio.h>
#include <stdio.h>
#define t  10
void main()
  {
            int k,n,m,l,i,j,p;
            float a[t],b[t],c[2*t];
            clrscr();
            printf("Cho bac cua da thuc A 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 bac cua da thuc B m = ");
            scanf("%d",&m);
            printf("Vao cac he so b\n");
            for (k=1;k<=m+1;k++)
              {
                        printf("b[%d] = ",k-1);
                        scanf("%f",&b[k]);
              }
            printf("\n");
            l=n+m;
            for (k=1;k<=l+1;k++)
              {
                        if (k<=(n+1))
                          j=k;
                        else
                          j=n+1;
                        if (k<=(m+1))
                          p=1;
                        else
                          p= k-m;
                        c[k]=0;
                        for (i=p;i<=j;i++)
                          c[k] = c[k] + a[i]*b[k-i+1];
              }
            printf("Cac he so cua da thuc tich C voi bac %d la :\n",l);
            for (k=1;k<=l+1;k++)
              printf("%.4f\t",c[k]);
            getch();
  }

3. Chia hai đa thức: Giả sử ta có hai đa thức là An(x) và Bm(x) với n³m. Thương hai đa thức này là :
                                   
Chương trình sau thực hiện việc chia 2 đa thức :

 Chương trình 1-5

#include <stdio.h>
#include <conio.h>
#include <math.h>
#define t 10
void main()
  {
            int k,n,m,l,i,j,jp;
            float a[t],b[t],q[t],r[t],epsi;
            clrscr();
            printf("Cho bac cua da thuc A 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("\n");
            printf("Cho bac cua da thuc B m = ");
            scanf("%d",&m);
            printf("Vao cac he so b\n");
            for (k=1;k<=m+1;k++)
              {
                        printf("b[%d] = ",k-1);
                        scanf("%f",&b[k]);
              }
            printf("\n");
            printf("Cho gia tri sai so epsilon epsi = ");
            scanf("%f",&epsi);
            if ((m+1)>1)
              {
                        l=n-m+1;
                        for (i=0;i<=t;i++)
                          r[i]=a[i];
                        j=n;
                        for (k=1;k<=l;k++)
                          {
                                    q[k]=r[1]/b[1];
                                    for (i=1;i<=j;i++)
                                      if ((i<m+1))
                                                r[i]=r[i+1]-q[k]*b[i+1];
                                      else
                                                r[i]=r[i+1];
                                      j=j-1;
                          }
                        while ((abs(r[i])<epsi)&&(j>0))
                          {
                                    for (i=1;i<=j;i++)
                                      r[i]=r[i+1];
                                    j=j-1;
                          }
                        if (abs(r[1])<epsi)
                          r[1]=0.0;
                        jp=j+1;
              }
    else
              {
                        l=n+1;
                        for (k=1;k<=l;k++)
                          q[k]=a[k]/b[1];
                        jp=1;
                        r[1]=0.0;
              }
            printf("\n");
            printf("Cac he so cua thuong Q(x) bac %d la : ",l);
            for (k=1;k<=l;k++)
              printf("%.3f\t",q[k]);
            printf("\n");
            printf("Cac he so cua phan du R(x) bac %d la : ",jp-1);
            for (k=1;k<=jp;k++)
              printf("%.3f",r[k]);
            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