Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!


Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

Regula Falsi Method; Question I'm stuck on.

zukiaszukias Posts: 2Member
If you already know what the regula falsi method is, you can skip the first section. Function is to be written in MATLAB.

[B]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

[COLOR="Navy"][B]The Weighted regula falsi method[/B]

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[/COLOR]


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.[/COLOR]


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


Sign In or Register to comment.