How Does feval Work in MATLAB for Function Inputs?

  • Context: MATLAB 
  • Thread starter Thread starter shimo1989
  • Start date Start date
  • Tags Tags
    Matlab Work
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
4 replies · 37K views
shimo1989
Messages
3
Reaction score
0
I'm completely new at MATLAB, having just started using it about a week ago. In an assignment of mine, I have to make a function that does bisection. So I pass a function, along with a set of bounds, to the function I wrote.

The thing is, I can't figure out how to make my function accept the function I'm trying to input into it. I was told I could use

feval ( function-name , x-value )

to find the value of a function at a particular x value, but I could not, for the life of me, figure out how I can make feval recognize functions. I tried passing strings, names of other simple functions I made, and just about everything I could think of. Nothing works.

Then I tried looking online, and websites and MATLAB's built-in help confused me even more by telling me stuff about "function handles" and "@" signs.

So could someone please explain to me, in the simplest language possible, how feval works? I would be very, very grateful.
 
Physics news on Phys.org
But I have something like this

function returnvalue = bisectionfunc ( function_name , upper_bound, lower_bound )

blah blah blah

then

feval ( function_name , value_of_variable );

What do I pass into bisectionfunc as "function_name"? I'd like that to be the function on which I'm performing the bisection method.
 
The simple answer: Pass @function_name to bisectionfunc. feval wants a function handle, not a function name.
Code:
function bisectionfunc(fhandle,upper_bound,lower_bound)
  ...
  feval (fhandle, value);
  ...

That said, you could make your function take the name of a function as an argument as well as a function handle:
Code:
function bisectionfunc(fhandle,upper_bound,lower_bound)
  if ischar(fhandle)
    fhandle = str2func(fhandle);
  end
  ...
  feval (fhandle, value);
  ...
 
Ahh, I think I got it. I passed the name of the mathematical function as a string to the function I wrote, and somehow it works.

Still not sure why it works, but thanks everyone for your help.