|
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
|