simple question function file syntax

2 visualizzazioni (ultimi 30 giorni)
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!

Risposta accettata

Michael Haderlein
Michael Haderlein il 5 Mag 2015
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.
  2 Commenti
B
B il 5 Mag 2015
I'm still getting an erro. the syntax I'm using is wrong. can you provide me with the correct function file for sqrt((9.81*x)/0.25).*tanh(sqrt((9.81*0.25)./x)*4) that will evaluate the three variables xl,xu,xr
Michael Haderlein
Michael Haderlein il 6 Mag 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.

Accedi per commentare.

Più risposte (1)

Walter Roberson
Walter Roberson il 6 Mag 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

Categorie

Scopri di più su Performance and Memory in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by