Undefined function 'abs' for input arguments of type 'function_handle'

5 views (last 30 days)
function [root,rootHistory, iter,errorValue]=myNewton(fh,dfh,initialGuess, tol , maxIter )
numLoop = 0;
rootHistory = [];
x = initialGuess;
a = @(x)fh;
while abs(a) >= tol
x1 = initialGuess - fh/dfh;
initialGuess = x1;
numLoop = numLoop + 1;
rootHistory = [rootHistory x1];
if numLoop == maxIter
break
end
end
root = x1;
iter = numLoop;
errorValue = abs(fh(root));
end
I don't know why it is giving me this error statement. There are also other syntax error in my code as well. Can someone help please? The instructions are in the PDF
  1 Comment
bdlawr
bdlawr on 9 Nov 2017
when i take out the "abs" it gives me this ==>
Undefined operator '>=' for input arguments of type 'function_handle'.
perhaps there is something wrong with my function handle? Sorry new to matlab...

Sign in to comment.

Answers (1)

Walter Roberson
Walter Roberson on 9 Nov 2017
You need to change
a = @(x)fh;
to
a = fh(x);
You need to change
to
x1 = initialGuess - fh(SOMEINPUT)/dfh(SOMEINPUT);
You will need to figure out what is appropriate for SOMEINPUT.
You will also need to change a somewhere in the loop.
  6 Comments
bdlawr
bdlawr on 9 Nov 2017
Edited: Walter Roberson on 15 Nov 2017
function [root,rootHistory, iter,errorValue]=myNewton(fh,dfh,initialGuess, tol , maxIter )
numLoop = 0;
rootHistory = [];
x = initialGuess;
a = fh(x);
while a >= tol
x1 = initialGuess - fh(x)/dfh(x);
initialGuess = x1;
numLoop = numLoop + 1;
rootHistory = [rootHistory x1];
if numLoop == maxIter
break
end
end
root = x1;
iter = numLoop;
errorValue = abs(fh(root));
end
Walter Roberson
Walter Roberson on 15 Nov 2017
In the first position, are you passing in
x.^3 + 2*x.^2 - 10*x
or are you passing in
@(x) x.^3 + 2*x.^2 - 10*x
?

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!