# how can i convert my matlab conde into mathematica or atleast convert the bisection program? [duplicate]

(Convert matlab code into mathematica code)

(I'm fairly new to mathematica)

(bisect function matlab code:)

 function [root,fx,ea,iter]=bisect(func,xl,xu,es,maxit,varargin)


(% bisect: root location zeroes)

(% [root,fx,ea,iter]=bisect(func,xl,xu,es,maxit,p1,p2,...):)

(% uses bisection method to find the root of func)

(% input:)

(func = name of function)

(% xl, xu = lower and upper guesses)

(% es = desired relative error (default = 0.0001%))

(% maxit = maximum allowable iterations (default = 50))

(% p1,p2,... = additional parameters used by func)

(% output:)

(% root = real root)

(% fx = function value at root)

(% ea = approximate relative error (%))

(% iter = number of iterations)

 if nargin<3,error('at least 3 input arguments required'),end

test = func(xl,varargin{:})*func(xu,varargin{:});

if test>0,error('no sign change'),end

if nargin<4|isempty(es), es=0.0001;end

if nargin<5|isempty(maxit), maxit=50;end

iter = 0; xr = xl; ea = 100;

while (1)

xrold = xr;

xr = (xl + xu)/2;

iter = iter + 1;

if xr ~= 0,ea = abs((xr - xrold)/xr) * 100;end

test = func(xl,varargin{:})*func(xr,varargin{:});

if test < 0

xu = xr;

elseif test > 0

xl = xr;

else

ea = 0;

end

if ea <= es | iter >= maxit,break,end

end

root = xr; fx = func(xr, varargin{:});


(Problem code)

 clc

clear all

close all

r1 = 0.5;

r2 = 1;

h = 1;

pf= 200;

pw = 1000;

fh1 = @(h1)pf*pi*h/(3)*(r1^2 + r2^2 + r1*r2)-...

pw *pi*(h - h1)/(3).*((r1 + (r2 - r1)/h*h1).^2 + r2^2 + (r1 + (r2 -
r1)/h*h1)*r2);

h1 = (0:h/20:h);

fhh =fh1(h1);

plot (h1, fhh),grid

[height f ea iter]= bisect(fh1, 0, 1);


(here's the picture of the exact problem and equations used to tackle the matlab problem.)

(I'm struggling with root function and bisection portion in mathematica)

https://imgur.com/a/LWaHEuM

(*mathematica code i attempted *)

func[root, fx, ea, iter] = Bisection[a0_, b0_, m_] :=
Module[{}, a = N[a0]; b = N[b0]; c = (a + b)/2; k = 0; output = {{k,
a, c, b, f[c]}}; While[k < m, If[Sign[f[b]] == Sign[f[c]],
b = c, a = c;]; c = a + b/2; i = i + 1;
output = Append[output, {i, a, c, b, f[c]}];];
Print[NumberForm[TableForm[output,
TableHeadings \[RightArrow] {None, {"k", "ak", "ck", "bk",
"f[ck]"}}], 16]];
Print[" c = ", NumberForm[c, 16]];
Print[" \[Laplacian]c = \[PlusMinus]", b \[Minus] a/2 ];
Print["f[c] = ", NumberForm[f[c], 16] ];]

r1 = 0.5;
r2 = 1;
h = 1;
pf = 200;
pw = 1000;
fh1 = function[(h1)] pf*\[Pi]*h/(3)*(r1^2 + r2^2 + r1*r2) -
pw *\[Pi]*(h - h1)/(3)*((r1 + (r2 - r1)/h*h1)^2 =
r2^2 + (r1 + (r2 - r1)/h*h1)*r2)
Plot[OutageProb, {h1, 0, h/20, h}, PlotRange -> {h1, fhh}, ,
grid {h1, fhh}, Frame -> True]
fhh = fh1 (h1)
[height f ea iter] = bisection (fh1, 0, 1)


In case it is helpful, I provide a corrected version of your code

Bisection[a0_, b0_, m_, f_] := Module[{a, b, c, k, output, i},
a = N[a0];
b = N[b0];
c = (a + b)/2;
k = 0;
output = {{k, a, c, b, f[c]}};
While[k < m, If[Sign[f[b]] == Sign[f[c]], b = c, a = c];
c = (a + b)/2;
k = k + 1;
output = Append[output, {k, a, c, b, f[c]}];];
Print[NumberForm[
TableForm[output,
TableHeadings -> {None, {"k", "ak", "ck", "bk", "f[ck]"}}],
16]];
Print[" c = ", NumberForm[c, 16]];
Print[" δc = ±", (b - a)/2];
Print["f[c] = ", NumberForm[f[c], 16]];
output]