Defining function handles in MATLAB

Richard

Richard (view profile)

님이 질문을 제출함. 8 Jan 2012
최근 활동 MathWorks Support Team

MathWorks Support Team (view profile)

님이 편집함. 22 May 2019
Chandra Kurniawan

Chandra Kurniawan (view profile)

님이 답변을 채택함.
How might I define a function handle?
For example, I want to define a function f(x)=2*x^3+7*x^2+x
I want MATLAB to evaluate f(x) at random values x. I have heard of feval and fhandles, but I don't know how to do it.
Thanks.

댓글 수: 2

Leia Sofia Mendez

Leia Sofia Mendez (view profile)

on 26 Jul 2017
This was the code I was trying to write:
a= 0.0009
a= convtime(,'samples','seconds')
This code gave an error saying that my function (convtime) was undefined. How you define a function in MATLAB?
Walter Roberson

Walter Roberson (view profile)

on 26 Jul 2017
Leia Sofia Mendez:
You should go to that link, and click the download button, and download the .zip file. You should unzip to a directory that is not under your MATLAB installation directory. You would then use pathtool in MATLAB to add that directory to your MATLAB path.

로그인 to comment.

답변 수: 6

Answer by Chandra Kurniawan

Chandra Kurniawan (view profile)

on 8 Jan 2012
Edited by MathWorks Support Team

MathWorks Support Team (view profile)

on 22 May 2019

Hi, Richard.
To evaluate f(x) at different values of x, you can create an .m file and write this code:
function y = f(x)
y = 2 * (x^3) + 7 * (x^2) + x;
If you save the file under the name 'f.m', you can run the function by typing this code in the Command Window or a separate .m file.
x = randi(7);
y = f(x)
The randi function above generates a 1-by-5 row vector of random integers between 1 and 10. The values returned by f are stored in a 1-by-5 row vector y.
You can create a handle to the function f with an @ sign. For example, create a handle named myHandle as follows:
myHandle = @f;
Now you can run f indirectly by using its handle.
y = myHandle(x)

댓글 수: 3

Chandra Kurniawan

Chandra Kurniawan (view profile)

on 8 Jan 2012
to evaluate this function just type :
y = feval(@f,x)
Richard

Richard (view profile)

on 8 Jan 2012
Thanks, Chandra! :)

Salaheddin Hosseinzadeh (view profile)

on 13 Mar 2014
The problem or lets say the dificulty of this code is that this couple of lines should be saved as a function and I personally don't wanna do that for a simple function like this! or even complicated ones!
Not my favorite way of defining a function

로그인 to comment.

Answer by Walter Roberson

Walter Roberson (view profile)

on 8 Jan 2012

Function handle version:
f = @(x) 2*x^3+7*x^2+x;
Then f is already the function handle, and you can call f(3.7) (for example)
There is no need to use feval() for this, but you could.

Salaheddin Hosseinzadeh (view profile)

on 13 Mar 2014
I rather this anonymous way of defining a function! It's way easier. I also know another way of doing this, surprisingly nobudy mentioned that so far! lol I'm gonna put it in the answers.

로그인 to comment.

Junaid (view profile)

on 8 Jan 2012

Dear Richard,
To define a function in matlab you can do following syntax of given function:
function n = F(x)
n= 2*x^3+7*x^2+x;
that is it. You can put end at the end of function. But it is also acceptable not to put to various matlab versions. If you put end for one function then you have to put for all function in single m file.
then you can generate random numbers, either integer or double, and can get the values of this function.

Richard

Richard (view profile)

on 8 Jan 2012
Thanks, Junaid! :)

로그인 to comment.

on 21 Mar 2014
Edited by cyril

cyril (view profile)

on 21 Mar 2014

> f = @(x) 2*x^3+7*x^2+x;
> f(0)
0
surprising no one mentioned anonymous functions...

Salaheddin Hosseinzadeh (view profile)

on 21 Mar 2014
@ Cyril
Walter did, just make sure you checked the other answers and comments!

로그인 to comment.

Answer by samy youssef

samy youssef (view profile)

on 11 Mar 2015
Edited by Walter Roberson

Walter Roberson (view profile)

on 26 Sep 2016

here is a function i developed to calculate the log of any number with different base:
function d =log_for_diff_base(myNumber,myBase)
x=log(myNumber);
y=log(myBase);
d=x/y;
end

Walter Roberson

Walter Roberson (view profile)

on 26 Sep 2016
Okay... but irrelevant to the original question.

로그인 to comment.

Answer by Nikitha Challa

Nikitha Challa (view profile)

on 26 Sep 2016

x = x + a/x 2 in matlab code

John D'Errico

John D'Errico (view profile)

on 26 Sep 2016
Not a function at all. This is not even valid MATLAB code as written.
Walter Roberson

Walter Roberson (view profile)

on 26 Sep 2016
That does not appear to be a question, and it is not an Answer to what was asked here?
If the question is to solve the equation
x == x + a/(x^2)
then for finite a values, the solutions are -inf and +inf as a/(x^2) would be 0 for those values, leading to the equality -inf == -inf and +inf == +inf

로그인 to comment.