Phương pháp tiếp tuyến

- Dữ liệu đầu vào: Cho phương trình f(x)=0 và [a,b] là khoảng phân ly nghiệm với sai số gần đúng cho trước Epxilon.
- Ý tưởng cài đặt:
o Xác định điểm x0 thuộc [a,b] (x0=(a+b)/2).
o Phương trình tiếp tuyến qua điểm (x0,f(x0)) có dạng y-f(x0)=f’(x0)(x-x0).
Tại (x1,0) ta có x1=x0-f(x0)/f’(x0) (hay xn+1=xn-f(xn)/f’(xn)).
o Lặp lại quá trình tính xn+1=xn-f(xn)/f’(xn) cho đến khi E=|xn+1-xn| - Lưu đồ giải thuật:
Phương pháp tiếp tuyến Phuong10

CHƯƠNG TRÌNH MẪU

Code:

#include "math.h"
#include "conio.h"
#include "iostream.h"

/*Nhap vao mot da thuc luu he so trong A[] va co Bac*/
double*NhapDaThuc(int Bac) {
   double *A = new double [Bac+1];
   for(int i= 0; i<=Bac; i++) {
      cout<<"a"<<i<<" = ";
      cin>>A[i];
   }
   return A;
}

/*Xuat da thuc co he so A[] va Bac*/
void XuatDaThuc( double*A,int Bac, char*s) {
   cout<<"Da Thuc Vua Nhap la:\n";
   cout<<s<<" = "<<A[0];
   for(int i=1; i<=Bac; i++){
      if(A[i]>0) {
         cout<<" + "<<A[i]<<"x^"<<i;
      }
      if(A[i]<0) {
         cout<<A[i]<<"x^"<<i;
      }
   }
}

/*Tinh gia tri cua da thuc tai diem x*/
/*Su dung luoc do hoocner*/
double f(double*A, int Bac, double x) {
    double KetQua = A[Bac];
   for(int i=Bac-1; i>=0; i--)
      KetQua=KetQua*x + A[i];
   return KetQua;
}

/*Tinh dao ham cua ham so y =f(x)*/
double*DaoHam(double*A, int Bac){
   double* temp = new double[Bac];
   for(int i=1; i<=Bac; i++)
      temp[i-1]=i*A[i];
   return temp;
}

/*Phuong Phap Newton (tiep tuyen)*/
double PPTiepTuyen(double*A, int Bac, double a, double b, double Epxilon){
   double x0=(a+b)/2,x1,E;
   double* fx = DaoHam(A,Bac);
   do{
     x1 = x0 - f(A,Bac,x0)/f(fx,Bac-1,x0);
     E = fabs(x1-x0);
     x0 = x1;
   } while(E > Epxilon);
   return x1;
}

/*Chuong Trinh Chinh*/
void main(){
   clrscr();
   double*Fx,a,b,Epxilon;
   int n;
   cout<<"Nhap Vao Bat Cua Phuong Trinh:";
   cin>>n;
   Fx = NhapDaThuc(n);
   XuatDaThuc(Fx,n,"f(x)");
   cout<<"\nNhap Khoang Cach Ly Nghiem [a,b]:\n";
   cout<<"a = ";
   cin>>a;
   cout<<"b = ";
   cin>>b;
   cout<<"Nhap Sai So Gan Dung Epxilon: ";
   cin>>Epxilon;
   cout<<"Nghiem x = "<<PPTiepTuyen(Fx,n,a,b,Epxilon);
   getch();
   delete Fx;
}