Home arrow Studies arrow Algorithms arrow Finding Root of a Polinomial
Finding Root of a Polinomial PDF Print

By traditional way finding root of a polynomial function is always time consuming. There are a couple of solutions to this problem. One is Newton-Raphson method. Another is division by two methods. Below you will find implementation of these methods.

The Algorithm






Pascal Source Code (Newton-Raphson Method)

 

 

{    This program finds root of  F(x)=x^2-e^x-1=0 function for x0=1 and
   eps=0.0001 using  Newton-Raphson method.
}
uses crt;
var x1,x0,eps:real;i:integer;
Function f(x:real):real;
 begin
  f:=sqr(x)-exp(x)-1;
 end;
Function ft(x:real):real;
 begin
  ft:=2*x-exp(x);
 end;
Begin
  clrscr;
  writeln('F(x) = x^2-e^x-1=0');
  writeln('x0  de?eri : 1.0000');x0:=1.0000;
  eps:=0.0001; i:=1; x1:=x0;
  repeat
   x0:=x1;
   x1:=x0-f(x0)/ft(x0);
   writeln('x',i,' value : ',x1:7:4);
   i:=i+1;
  until abs((x1-x0)) < eps;
  readln;
End.

 

Sample Execution for Newton-Raphson Method

 

F(x) = x^2-e^x-1=0

x0 value : 1.0000

x1 value : -2.7844

x2 value : -1.5961

x3 value : -1.2000

x4 value : -1.1486

x5 value : -1.1478

x6 value : -1.1478


 

 

Pascal Source Code Pascal (Division by Two)

 
 

{   This program finds the root of F(x)=x^2+3x-28=0 function ranging from 3 to 5 and from 0 to 7
  using Division by Two method.
}
uses crt;
var eps:real; i:integer; ch:char;
Function f(x:real):real;
 begin
  f:=(x*x)+(3*x)-28;
 end;
Procedure Division_by_Two(Xs,Xe:real;x,y:integer);
 var Xm,k:real;
 begin
  i:=0;
  repeat
   Xm:=(Xs+Xe)/2;
   if (F(Xm)*F(Xs)) > 0 then Xs:=Xm
       else if (F(Xm)*F(Xs)) < 0 then Xe:=Xm;
   gotoxy(x,y+i);write(i+1:2,'. Xm=',Xm:5:3,' F(Xm)=',F(Xm):6:3);
   i:=i+1;
   k:=1000*F(Xm);
  until abs(round(k)) <= 1 ;
 end;
BEGIN
  clrscr;   eps:=0.001;
  writeln('                   ------ F(x)=x^2+3x-28=0 -----');
  writeln('               For interval (3,5) eps:0.001');
  writeln('  ---- Division by Two method ----      ');
  Division_by_Two(3,5,5,4);
  repeat ch:=readkey until ch<>#27;  clrscr;
  writeln('                   ------ F(x)=x^2+3x-28=0 -----');
  writeln('                For interval (0,7)  eps:0.001');
  writeln('  ---- Division by Two method ----      ');
  Division_by_Two (0,7,5,4);
  repeat ch:=readkey until ch=#27;
END.

 

Sample Execution for Division by Two Method

------ F(x)=x^2+3x-28=0 -----
For interval (3,5)  eps:0.001
---- Division by Two method ----
1. Xm=4.000 F(Xm)= 0.000



------ F(x)=x^2+3x-28=0 -----
For interval (0,7) eps:0.001
---- Division by Two method ----
1. Xm=3.500 F(Xm)=-5.250
2. Xm=5.250 F(Xm)=15.313
3. Xm=4.375 F(Xm)= 4.266
4. Xm=3.938 F(Xm)=-0.684
5. Xm=4.156 F(Xm)= 1.743

6. Xm=4.047 F(Xm)= 0.518

7. Xm=3.992 F(Xm)=-0.086
8. Xm=4.020 F(Xm)= 0.215
9. Xm=4.006 F(Xm)= 0.064
10. Xm=3.999 F(Xm)=-0.011
11. Xm=4.002 F(Xm)= 0.027
12. Xm=4.001 F(Xm)= 0.008
13. Xm=4.000 F(Xm)=-0.001

 

Copyright 2003-2007 by Chasan Chouse.

Locations of visitors to this page