





Implementing Müller's method in Matlab is not that difficult:
eps_step = 1e-5; eps_abs = 1e-5; p = [1 2 3 4 2]; x = [0 -0.1 -0.2]'; y = polyval( p, x ); while ( true ) V = vander( x - x(2) ); c = V \ y; disc = sqrt( c(2)^2 - 4*c(1)*c(3) ); % if ( real(c(2))*real(disc) + imag(c(2))*imag(disc) > 0 ) if abs( c(2) + disc ) > abs( c(2) - disc ) denom = c(2) + disc; else denom = c(2) - disc; end [roots(c)', -2*c(3)/denom, x']; x = [x(2), x(3), x(2) - 2*c(3)/denom]'; y = [y(2), y(3), polyval( p, x(3) )]'; if ( abs( x(2) - x(3) ) < eps_step && abs( y(3) ) < eps_abs ) break; end end x(3)
Copyright ©2005 by Douglas Wilhelm Harder. All rights reserved.