If you already know what the regula falsi method is, you can skip the first section. Function is to be written in MATLAB.
Regula Falsi method
The standard Regula Falsi is a method to find roots of a function in an interval [a, b] similar to the bisection method. Assume that f(a)*f(b) < 0. Regula Falsi determines a new point xm as the intersection of the straight line connecting (a, f (a)) and (b, f (b)) with the x-axis:
xm = (f(a)*b - f(b)*a) / (f(a) - f(b) ) (1)
If f(xm) has the same sign as f(a) then the new lower bound a is xm and b stays the same. (Case a)
If f(xm) has the same sign as f(b) then the new upper bound b is xm while a stays the same. (Case b)
If f(xm) = 0 then xm is a root => stop with a=b=xm
----------------------------------------------------------------------
The Weighted regula falsi method
The weighted regula falsi follows the same procedure as the regula falsi method but it modifies the equation (1) for xm slightly:
xm =
( wa*b*f(a) - wb*a*f (b) ) / ( wa*f(a) - wb*f(b) )
where the weights wa and wb are set initially equal to 1. In later stages they are set as the following:
if the previous k>=2 iterations all were of (Case a) then wb = 2^(1-k) and wa = 1
If the previous k>=2 iterations all were of (Case b) then wa = 2^(1-k) and wb = 1
otherwise wa = wb = 1
----------------------------------------------------------------
Question:
(a)
Write a function WeightRF that finds the root of a function f using the above weighted regula falsi method. The first line of the file WeightRF.m should look like:
function [a,b]=WeightRF(f,aini,bini,maxit,tol)
The meaning of the inputs has to be:
f: a function of a single variable that you can call inside WeightRF. The procedure is supposed to find a root of f;
aini: initial lower bound for the root of f;
bini: intial upper bound for the root of f; the root of f is to be found between aini and bini;
maxit (positive integer): the iteration should stop as soon as the number of iterations exceeds maxit
tol (small positive real number): tolerance; the iteration should stop if the difference between the current bounds is less than tol.
The meaning of the outputs has to be:
a: a column vector of all lower bounds generated by the iteration;
b: a column vector of all upper bounds generated by the iteration.
This means that the return values a and b are vectors with at most maxit elements, a(1) should be aini, and b(1) should be bini. If the iteration stops after i<maxit iterations are reached then a and b should contain i elements.
----------------------------------------------------------------------
Well, I don't even really know how to do simple loops yet, this unit has gone far too fast and we have been expected to do too much too soon :/ I also don't really understand the concept of the weighted regula falsi method much, so any help would be appreciated :)