diff options
Diffstat (limited to '845/CH2/EX2.3/Ex2_3.sce')
-rwxr-xr-x | 845/CH2/EX2.3/Ex2_3.sce | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/845/CH2/EX2.3/Ex2_3.sce b/845/CH2/EX2.3/Ex2_3.sce new file mode 100755 index 000000000..3dd1168db --- /dev/null +++ b/845/CH2/EX2.3/Ex2_3.sce @@ -0,0 +1,56 @@ +//Example 2.3
+clc
+clear
+
+function [root] = FalsePosition(fun,x,tol,maxit)
+// FalsePosition: Computes roots of the function in the given range using False Position Method
+//// Input: FalsePosition(fun,x,tol,maxit)
+// fun = function handle
+// x = range in between sign change is evident
+// tol = Maximum error between iterations that can be tolerated
+// maxit = Maximum number of iterations
+//// Output: [root]
+// Root: Root of the given function in defined range
+
+if fun(x(1)) > 0 then
+ xu = x(1); xl = x(2);
+else
+ xu = x(2); xl = x(1);
+end
+
+Ea = 1;
+iter = 1;
+
+while(1)
+ xr(iter) = xl(iter) - ((xu(iter)-xl(iter)) / (fun(xu(iter))-fun(xl(iter))) * fun(xl(iter)));
+ if fun(xr(iter)) > 0 then
+ xu(iter+1) = xr(iter);
+ xl(iter+1) = xl(iter);
+ elseif fun(xr(iter)) < 0 then
+ xl(iter+1) = xr(iter);
+ xu(iter+1) = xu(iter);
+ else
+ break
+ end
+
+ if iter>1 then
+ Ea(iter) = 100 * abs((xr(iter) - xr(iter-1)) / xr(iter));
+ end
+
+ if Ea(iter) < tol | iter == maxit then
+ break
+ end
+ iter = iter + 1;
+end
+root = xr(iter);
+endfunction
+
+function f = fun3(x)
+ f = log(x) - cos(x);
+endfunction
+
+x = [1 2];
+tol = 1e-4;
+maxit = 5;
+root = FalsePosition(fun3,x,tol,maxit);
+disp(round(root*10^4)/10^4,"root = ")
|