MATLAB How Does feval Work in MATLAB for Function Inputs?

  • Thread starter Thread starter shimo1989
  • Start date Start date
  • Tags Tags
    Matlab Work
AI Thread Summary
The discussion centers around a user new to MATLAB seeking help with implementing a bisection method function. The user struggles with passing a function to their custom function and understanding how to use `feval` to evaluate it. They initially attempt to pass function names as strings but find no success. The solution provided clarifies that `feval` requires a function handle, which can be created using the "@" symbol before the function name. It is also explained that the user can pass a function name as a string and convert it to a function handle using `str2func`. Ultimately, the user successfully implements the solution by passing the function name as a string, although they express confusion about why it works. The discussion highlights the importance of understanding function handles in MATLAB for evaluating functions dynamically.
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
If the function you want to call is 'compute' you'd enter '@compute' as the argument
 
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.
 

Similar threads

Replies
4
Views
1K
Replies
2
Views
3K
Replies
2
Views
2K
Replies
6
Views
2K
Replies
1
Views
2K
Back
Top