MATH 4650-001: Numerical Analysis I
Project - The Secant Method

Dmitriy Tserekhman
 
 

Analysis:

Part 1 - Division by Zero Example
                                                                                                                                                               Main Page
Part 2 - Method does not converge

Part 3 - Convergence Graphs



Part 1

A  The following example shows the situation when the secant method fails to produce an approximation because of division by zero:

Files used and generated:     f5.m       run_me5.m       output5.txt
 
 

>> run_me5
*************** Specifications on Given Computing Machine ***********************
Floating point relative accuracy (eps) is: 2.220446e-016 
Smallest positive floating point number is: 2.225074e-308 
Largest positive floating point number is: 1.797693e+308 
*********************************************************************************

 Function Name: f5

************************** Initial Input Values: ********************************
x_0= -2.000000e+000, x_1=2.000000e+000, f(x_0)= -1.000000e+000, f(x_1)= -1.000000e+000 
*********************************************************************************

n= 0 a= -2.000000e+000, f(a)= -1.000000e+000 
n= 1 a= 2.000000e+000, f(a)= -1.000000e+000 

*** ERROR ocurred: Division by Zero - Function values of
*** both points were the same. 
True answer could not be obtained. No values were assigned
to the return constructs.
??? One or more output arguments not assigned during call to 'secant'.

Error in ==> D:\MATLAB6p5\work\run_me5.m
On line 25  ==> [r,sequence_x,sequence_fx]=secant('f5',x_0,x_1,n_max,secant_tolerance);

>>

The above example shows that the implemented secant method detects the division by zero and notifies user about such error condition.



Part 2
 

The next output shows results produced by running the secant method on the same function as in the previous example, only with different initial points. This time, it clearly shows that the method does not converge in 100 iterations.

Files used and generated:      f5.m            run_me6.m              output6.txt
 

 Function Name: f5

************************** Initial Input Values: ********************************
x_0= -1.700000e+000, x_1=-2.000000e+000, f(x_0)= -8.183306e-001, f(x_1)= -1.000000e+000 
*********************************************************************************

n= 0 a= -1.700000e+000, f(a)= -8.183306e-001 
n= 1 a= -2.000000e+000, f(a)= -1.000000e+000 
n= 2, a= -3.486486e-001, f(a)= -5.631617e-001 
n= 3, a= 2.633805e+000, f(a)= -2.423572e+000 
n= 4, a= -1.251462e+000, f(a)= -6.725997e-001 
n= 5, a= 4.297181e+000, f(a)= 5.282194e-001 
n= 6, a= 2.048638e+000, f(a)= -1.040998e+000 
n= 7, a= 3.540292e+000, f(a)= 1.414961e+000 
n= 8, a= 4.748049e+000, f(a)= 3.691680e-001 
n= 9, a= 5.794541e+000, f(a)= 2.034447e-001 
n= 10, a= 7.079232e+000, f(a)= 1.216086e-001 
n= 11, a= 8.988285e+000, f(a)= 6.964830e-002 
n= 12, a= 1.154721e+001, f(a)= 4.021297e-002 
n= 13, a= 1.504307e+001, f(a)= 2.301031e-002 
n= 14, a= 1.971914e+001, f(a)= 1.316328e-002 
n= 15, a= 2.597001e+001, f(a)= 7.513812e-003 
n= 16, a= 3.428368e+001, f(a)= 4.286803e-003 
n= 17, a= 4.532767e+001, f(a)= 2.444274e-003 
n= 18, a= 5.997848e+001, f(a)= 1.393372e-003 
n= 19, a= 7.940372e+001, f(a)= 7.941612e-004 
n= 20, a= 1.051489e+002, f(a)= 4.525998e-004 
n= 21, a= 1.392636e+002, f(a)= 2.579269e-004 
n= 22, a= 1.844629e+002, f(a)= 1.469829e-004 
n= 23, a= 2.443448e+002, f(a)= 8.375860e-005 
n= 24, a= 3.236754e+002, f(a)= 4.772963e-005 
n= 25, a= 4.287691e+002, f(a)= 2.719846e-005 
n= 26, a= 5.679910e+002, f(a)= 1.549884e-005 
n= 27, a= 7.524225e+002, f(a)= 8.831885e-006 
n= 28, a= 9.967435e+002, f(a)= 5.032770e-006 
n= 29, a= 1.320401e+003, f(a)= 2.867878e-006 
n= 30, a= 1.749157e+003, f(a)= 1.634233e-006 
n= 31, a= 2.317137e+003, f(a)= 9.312520e-007 
n= 32, a= 3.069552e+003, f(a)= 5.306650e-007 
n= 33, a= 4.066290e+003, f(a)= 3.023943e-007 
n= 34, a= 5.386686e+003, f(a)= 1.723165e-007 
n= 35, a= 7.135839e+003, f(a)= 9.819287e-008 
n= 36, a= 9.452974e+003, f(a)= 5.595425e-008 
n= 37, a= 1.252252e+004, f(a)= 3.188499e-008 
n= 38, a= 1.658881e+004, f(a)= 1.816935e-008 
n= 39, a= 2.197550e+004, f(a)= 1.035363e-008 
n= 40, a= 2.911134e+004, f(a)= 5.899915e-009 
n= 41, a= 3.856431e+004, f(a)= 3.362009e-009 
n= 42, a= 5.108683e+004, f(a)= 1.915808e-009 
n= 43, a= 6.767565e+004, f(a)= 1.091705e-009 
n= 44, a= 8.965114e+004, f(a)= 6.220973e-010 
n= 45, a= 1.187625e+005, f(a)= 3.544961e-010 
n= 46, a= 1.573268e+005, f(a)= 2.020062e-010 
n= 47, a= 2.084136e+005, f(a)= 1.151113e-010 
n= 48, a= 2.760893e+005, f(a)= 6.559503e-011 
n= 49, a= 3.657404e+005, f(a)= 3.737869e-011 
n= 50, a= 4.845029e+005, f(a)= 2.129988e-011 
n= 51, a= 6.418297e+005, f(a)= 1.213753e-011 
n= 52, a= 8.502433e+005, f(a)= 6.916455e-012 
n= 53, a= 1.126333e+006, f(a)= 3.941275e-012 
n= 54, a= 1.492073e+006, f(a)= 2.245897e-012 
n= 55, a= 1.976576e+006, f(a)= 1.279803e-012 
n= 56, a= 2.618406e+006, f(a)= 7.292831e-013 
n= 57, a= 3.468649e+006, f(a)= 4.155749e-013 
n= 58, a= 4.594981e+006, f(a)= 2.368113e-013 
n= 59, a= 6.087054e+006, f(a)= 1.349446e-013 
n= 60, a= 8.063630e+006, f(a)= 7.689689e-014 
n= 61, a= 1.068204e+007, f(a)= 4.381895e-014 
n= 62, a= 1.415068e+007, f(a)= 2.496980e-014 
n= 63, a= 1.874567e+007, f(a)= 1.422880e-014 
n= 64, a= 2.483272e+007, f(a)= 8.108143e-015 
n= 65, a= 3.289635e+007, f(a)= 4.620347e-015 
n= 66, a= 4.357839e+007, f(a)= 2.632860e-015 
n= 67, a= 5.772907e+007, f(a)= 1.500309e-015 
n= 68, a= 7.647474e+007, f(a)= 8.549368e-016 
n= 69, a= 1.013075e+008, f(a)= 4.871774e-016 
n= 70, a= 1.342038e+008, f(a)= 2.776133e-016 
n= 71, a= 1.777822e+008, f(a)= 1.581953e-016 
n= 72, a= 2.355113e+008, f(a)= 9.014603e-017 
n= 73, a= 3.119860e+008, f(a)= 5.136884e-017 
n= 74, a= 4.132935e+008, f(a)= 2.927204e-017 
n= 75, a= 5.474973e+008, f(a)= 1.668039e-017 
n= 76, a= 7.252795e+008, f(a)= 9.505156e-018 
n= 77, a= 9.607907e+008, f(a)= 5.416421e-018 
n= 78, a= 1.272777e+009, f(a)= 3.086495e-018 
n= 79, a= 1.686070e+009, f(a)= 1.758809e-018 
n= 80, a= 2.233567e+009, f(a)= 1.002240e-018 
n= 81, a= 2.958847e+009, f(a)= 5.711169e-019 
n= 82, a= 3.919638e+009, f(a)= 3.254454e-019 
n= 83, a= 5.192414e+009, f(a)= 1.854519e-019 
n= 84, a= 6.878485e+009, f(a)= 1.056780e-019 
n= 85, a= 9.112052e+009, f(a)= 6.021956e-020 
n= 86, a= 1.207090e+010, f(a)= 3.431553e-020 
n= 87, a= 1.599054e+010, f(a)= 1.955437e-020 
n= 88, a= 2.118295e+010, f(a)= 1.114287e-020 
n= 89, a= 2.806144e+010, f(a)= 6.349656e-021 
n= 90, a= 3.717349e+010, f(a)= 3.618290e-021 
n= 91, a= 4.924439e+010, f(a)= 2.061847e-021 
n= 92, a= 6.523492e+010, f(a)= 1.174924e-021 
n= 93, a= 8.641788e+010, f(a)= 6.695189e-022 
n= 94, a= 1.144793e+011, f(a)= 3.815188e-022 
n= 95, a= 1.516528e+011, f(a)= 2.174048e-022 
n= 96, a= 2.008972e+011, f(a)= 1.238860e-022 
n= 97, a= 2.661321e+011, f(a)= 7.059524e-023 
n= 98, a= 3.525500e+011, f(a)= 4.022801e-023 
n= 99, a= 4.670293e+011, f(a)= 2.292354e-023 



Part 3
 
 
The following convergence graph was generated from function f(x) = e^x - 3x^2 analyzed in Testing Procedures section.
Files used:   f2.m           run_me2_2.m

From the produced graph it can be seen that the slope gets very steep after the 4th iteration, which make the result to converge very fast. 

Therefore, the shown convergence is superlinear.


 
 
This convergence graph was produced from problem 8 on page 132  listed in the testing section under the case when k = 1.

Files used:      f4_1.m        run_me4_1_2.m

Based on the same assertions, the received convergence is also superlinear.


 

From the above convergence examples, it can be concluded that in most cases the secant method converges superlinearly. It can also be concluded that the convergence is superlinear based on the outputs shown in Testing Section. It was seen that no matter how small the error tolerance value was, the result would still converge within about 10 iterations, provided that convergence exists.


                                       Main Page                                       Top                                   Back to ===> Testing Section