summaryrefslogtreecommitdiff
path: root/845/CH2/EX2.2/Ex2_2.sce
diff options
context:
space:
mode:
Diffstat (limited to '845/CH2/EX2.2/Ex2_2.sce')
-rwxr-xr-x845/CH2/EX2.2/Ex2_2.sce59
1 files changed, 59 insertions, 0 deletions
diff --git a/845/CH2/EX2.2/Ex2_2.sce b/845/CH2/EX2.2/Ex2_2.sce
new file mode 100755
index 000000000..b22ce56bd
--- /dev/null
+++ b/845/CH2/EX2.2/Ex2_2.sce
@@ -0,0 +1,59 @@
+//Example 2.2
+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 = fun1(x)
+ f = x.^3 -9*x + 1;
+endfunction
+
+x = [2 4; 2 3];
+tol = 1e-4;
+maxit = 3;
+for i = 1:2
+ root = FalsePosition(fun1,x(i,:),tol,maxit);
+ root = round(root*10^5)/10^5;
+ disp(strcat(["root(",string(i),") = ",string(root)]))
+end