Construct function handle from character vector
fh = str2func(c)
fh = str2func( constructs
a function handle,
fh, from a function name or
a character vector that defines an anonymous function.
Function handles created using
not have access to variables outside of their local workspace or to
nested functions. If your function handle contains these variables
or functions, MATLAB® throws an error when you invoke the handle.
Also, if you use a character vector representation of an anonymous
function, the resulting function handle does not have access to private
or local functions.
Convert the character vector
'ones' to a function handle, and call the
ones function using the handle.
c = 'ones'; fh = str2func(c) fh(1,5)
fh = function_handle with value: @ones ans = 1 1 1 1 1
Convert a character vector that represents
an anonymous function to a function handle. Workspace variables are
not available to the
str2func function. Therefore,
include values in the character vector that are necessary to evaluate
the expression and that are not defined as function inputs.
Define a character vector that represents the anonymous function 7x – 13. Convert the character vector to a function handle.
str = '@(x)7*x-13'; fh = str2func(str)
fh = @(x)7*x-13
Call the anonymous function using the handle.
ans = 8
If you include workspace variables in your character vector,
the function handle, but MATLAB throws an error when you invoke
the function handle.
a = 13; str = '@(x)7*x-a'; fh = str2func(str); fh(3)
Undefined function or variable 'a'. Error in @(x)7*x-a
Create a function that returns two function handles used to simulate the roll of dice. The first die (
d1) returns a number from 1 through 6, but the second die (
d2) always returns the number 1.
Create the following function in a folder on your MATLAB path. When
str2func is used with a character vector representing an anonymous function, it does not have access to the local function. Therefore, MATLAB calls the built-in
randi function, and returns a number from 1 through 6. The
eval function does have access to the local function, so
d2 uses the overloaded
randi and always returns 1.
function [d1,d2] = diceRoll str = '@()randi([1 6],1)'; d1 = str2func(str); d2 = eval(str); end function r = randi(~,~) r = 1; end
At the command prompt, call the
[p1,p2] = diceRoll
p1 = function_handle with value: @()randi([1,6],1) p2 = function_handle with value: @()randi([1,6],1)
p2 appear to be associated with the same anonymous function.
Invoke the function handles. The result from
p1 varies from 1 through 6. The result from
p2 is always 1.
ans = 5 ans = 1
c— Character vector to convert to function handle
Character vector to convert to a function handle, specified as a function name or anonymous function character vector.
str = 'cos'
str = '@(x) x.^2'