Pass a function as argument Matlab6.1

1 回表示 (過去 30 日間)
David Daminelli
David Daminelli 2019 年 5 月 25 日
回答済み: Walter Roberson 2019 年 5 月 25 日
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 Center および File ExchangeProgramming についてさらに検索

製品


リリース

R12.1

Community Treasure Hunt

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

Start Hunting!

Translated by