Asked by B
on 5 May 2015

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

if nargin <3,

disp('error')

end

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

if test>0,

disp('error')

end

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 = 10;

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;

I need to create another function file to calculate f(xl), f(xr), f(xu) how can i do that? the function is:

sqrt((9.81*x)/0.25)*tanh(sqrt((9.81*0.25)/x)*4)

thanks for your help!

Answer by Michael Haderlein
on 5 May 2015

Accepted Answer

You can use anonymous functions:

f=@(x) sqrt((9.81*x)/0.25).*tanh(sqrt((9.81*0.25)./x)*4);

Then, f(xr) will return the respective value and f([xl xr xu]) will return all 3 values.

B
on 5 May 2015

Michael Haderlein
on 6 May 2015

Ah, you want an extra file for that. Then the syntax is just

function res=myfunctionname(x)

res=sqrt((9.81*x)/0.25).*tanh(sqrt((9.81*0.25)./x)*4);

Put this in a file named myfunctionname.m, that's all.

Sign in to comment.

Answer by Walter Roberson
on 6 May 2015

f=@(x) sqrt((9.81*x)/0.25).*tanh(sqrt((9.81*0.25)./x)*4);

[A,B,C] = bisectt(f, -10, 10);

to do the calculation over -10 to +10

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.