Regula Falsi or Method of False Position
The regula falsi method iteratively determines a sequence of root enclosing intervals, (an,bn), and a sequence of approximations, which shall be denoted by pn. Similar to the bisection method, the root should be in ther interval being considered. During each iteration, a single point is selected from (an,bn) to approximate the location of the root and serve as pn. If pn is an accurate enough approximation, the iterative process is terminated. Otherwise, the Intermediate Value Theorem is used to determine whether the root lies on the subinterval (an,pn) or the subinterval (pn,bn). The entire process is then repeated on that subinterval. It was developed because the Bisection method converges at a fairly slow rate.
Let f be a continuous function on the interval [a,b] s.t. f(a)⋅f(b)<0, locate the point (p1,0) where the line joining the points (a,f(a)) and (b,f(b)) crosses the x-axis. Hence,
p1=b−f(b)(b−a)f(b)−f(a)=af(b)−bf(a)f(b)−f(a)
Algorithm
To find a solution to f(x)=0 given the continuous function f on the interval [a,b], where f(a) and f(b) have opposite signs:
INPUT endpoints a, b; tolerance TOL; maximum number of iterations N0.
STEP 1 Set i=1
FA=f(a).
STEP 2 While i≤N0 do Steps 3-6.
STEP 3 Set p=af(b)−bf(a)f(b)−f(a)
FP=f(p)
STEP 4 If FP=0 or |f(p)| < TOL then
STOP
else OUTPUT(P)
STEP 5 Set i=i+1
STEP 6 If FA×FP>0 then set a=p;
FA=FP
else set b=p.
STEP 7 OUTPUT("Method failed after N0")
Sample Problem:
Use Regula Falsi method to approximate the solution of f(x)=x3+2x2−3x−1=0 within [1,2] that is accurate to at least within 10−4.
For the approximation, see the outpout below:
n an bn pn f(pn)
1 1 2 1.1 -0.549
2 1.1 2 1.1517436 -0.27440072
3 1.1517436 2 1.1768409 -0.13074253
4 1.1768409 2 1.1886277 -0.060875863
5 1.1886277 2 1.1940789 -0.028040938
6 1.1940789 2 1.1965821 -0.01285224
7 1.1965821 2 1.1977278 -0.0058772415
8 1.1977278 2 1.1982513 -0.0026848163
9 1.1982513 2 1.1984904 -0.001225881
10 1.1984904 2 1.1985996 -0.0005596125
11 1.1985996 2 1.1986494 -0.00025543669
12 1.1986494 2 1.1986721 -0.0001165895
Scilab Code:
clear clc function f = f(x) f = x^3 + 2*x^2 - 3*x -1 endfunction disp("Sample input: regulaFalsi(1,2,10^-4, 100)") function regulaFalsi(a,b,TOL,N) i = 1 FA = f(a) finalOutput = [i, a, b, a + (b-a)/2, f(a + (b-a)/2)] printf("%-20s %-20s %-20s %-20s %-20s \n","n","a_n","b_n","p_n","f(p_n)") while(i <= N), p = (a*f(b)-b*f(a))/(f(b) - f(a)) FP = f(p) if(FP == 0 | abs(f(p)) < TOL) then break else printf("%-20.8g %-20.8g %-20.8g %-20.8g %-20.8g\n", i, a, b, p, f(p)) end i = i + 1 if(FA*FP > 0) then a = p else b = p end end //disp(finalOutput) endfunction
Wer can i got convergence of false position
ReplyDelete