Calling a function within another function

7 次查看(过去 30 天)
So I'm writing a bisection method. The beginning of the method looks like this.
function root = Bisect ( xl , xu , eps , imax, f )
i = 1;
fl = f(xl);
So I pass in xl (note that l is the letter L and not a one) when I call this function and it then calls the function f. Here's my function f:
function y = f(x)
y = (pi*x^2)*((3*4.1 - x)/3);
end
The problem is that I called the bisection function with the input "Bisect(0, 4.1, 0.0001, 20, f)" and I keep getting this error:
>> Bisect(0, 4.1, 0.0001, 20, f)
Not enough input arguments.
Error in f (line 3)
y = (pi*x^2)*((3*4.1 - x)/3);
So what am I doing wrong?

采纳的回答

Steven Lord
Steven Lord 2018-2-7
That tries to call the function f with 0 inputs and pass the value returned by that call into the Bisect function as the fifth input. You instead want to pass a function handle to f into the Bisect function as the fifth input, so that later on Bisect can call f using that function handle.
Bisect(0, 4.1, 0.0001, 20, @f)
You'd see the same behavior if you did something like:
fzero(sin, 1) % will error because sin needs 1 input
instead of:
fzero(@sin, 1)
or:
fzero(@(x) sin(x), 1)

更多回答(1 个)

Matt J
Matt J 2018-2-7
编辑:Matt J 2018-2-7
Use '@' to specify a handle to f(),
Bisect(0, 4.1, 0.0001, 20, @f)

类别

Help CenterFile Exchange 中查找有关 Environment and Settings 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by