12-29-2016, 04:56 PM

Encircling-Variant of Bisection

This algorithm is inspired by the Bisection method. It requires, in general, fewer iterations than the Bisection. The basic idea is to start with x=A, such that A<Xroot, and march towards the root. As the value of A passes over the root, we change the sign of the marching step and also reduce it. This change makes the value of A move around the root and closes in on it.

Given a function f(x)=0 and x=A, such that A<Xroot, and the root bracketing interval [A,Z], and the tolerance Toler. The value of Z is needed only to calculate the initial search step. You can eliminate Z if you provide the value for the initial search step.

Removing the nested IF statement causes the algorithm to slow down and require significantly more iterations than the Bisection method.

Enjoy!

Namir

This algorithm is inspired by the Bisection method. It requires, in general, fewer iterations than the Bisection. The basic idea is to start with x=A, such that A<Xroot, and march towards the root. As the value of A passes over the root, we change the sign of the marching step and also reduce it. This change makes the value of A move around the root and closes in on it.

Given a function f(x)=0 and x=A, such that A<Xroot, and the root bracketing interval [A,Z], and the tolerance Toler. The value of Z is needed only to calculate the initial search step. You can eliminate Z if you provide the value for the initial search step.

Removing the nested IF statement causes the algorithm to slow down and require significantly more iterations than the Bisection method.

Code:

`Delta = (Z-A)/2`

Fa = f(A)

Do

B = A

Fb = Fa

A = A + Delta

Fa = f(A)

If Fa*Fb<0 then

Delta = -Delta/4

C = (A + B) / 2

Fc = f(C)

If Fa * Fc > 0 Then

A = C

Fa = Fc

End If

End If

Loop Until Abs(Delta)<=Toler

Return A as the refined root

Enjoy!

Namir