Pass a function as argument Matlab6.1

2 次查看(过去 30 天)
Hello! I'm studing matlab and I get some problem with a code.
First, I've created f1.m:
function y = f1(x)
y = exp(x) - pi;
end
Then, I built a code to find the roots by bisector method:
function [root, err, n] = bissect(f, a, b, errMax)
m = (a+b)/2;
err = (b-a)/2;
n = 0;
while err > errMax
if f(a)*f(m) > 0
a = m;
else
b = m;
end
m = (a+b)/2;
err = (b-a)/2;
n = n + 1;
end
root = m;
end
But, when i run
>> [r,err,n] = bissect(@f1, 1, 2, 0.1);
it returns:
Warning: Subscript indices must be integer values.
>In C:\matlabR12\work\Codigo\bissect.m at line 12
??? Index exceeds matrix dimensions.
Error in ==> C:\matlabR12\work\Codigo\bissect.m
On line 12 ==> if f(a)*f(m) > 0
What am I doing wrong? I'm using Matlab R12

回答(1 个)

Walter Roberson
Walter Roberson 2019-5-25
Looking at an old document https://web.stanford.edu/class/ee254/software/using_ml.pdf it appears that in R12, function handles existed, but that you needed to use feval() with them, such as
if feval(f,a)*feval(f,m) > 0

类别

Help CenterFile Exchange 中查找有关 Startup and Shutdown 的更多信息

产品


版本

R12.1

Community Treasure Hunt

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

Start Hunting!

Translated by