MATLAB Answers

How to use str2func with a function handle in the string

3 views (last 30 days)
dario
dario on 29 May 2020
Commented: dario on 29 May 2020
Hi,
I want to insert a function handle in the input string of str2func but I get an error.
string1 = '@(x)sin(x)';
A = str2func(string1);
string2 = '@(x,y)(A(x) + sin(y))'
B = str2func(string2);
B(pi/2,pi/2)
It says: Undefined function or variable 'A'.
How can I fix it?
Thanks

  0 Comments

Sign in to comment.

Accepted Answer

Tommy
Tommy on 29 May 2020
"Workspace variables are not available to the str2func function."
See this answer. You could do something like this:
string1 = '@(x)sin(x)';
A = str2func(string1);
string2 = ['@(y)(' num2str(feval(A,pi/2)) ' + sin(y))'];
B = str2func(string2);
B(pi/2)

  6 Comments

Show 3 older comments
dario
dario on 29 May 2020
Thanks.
I mean that I'd prefer to work directly on the handle instead of retreiving the original function.
I'll leave it as not answered for now in case someone has a better idea.
Tommy
Tommy on 29 May 2020
Gotcha. There's always eval...
string1 = '@(x)sin(x)';
A = str2func(string1);
string2 = '@(x,y)(A(x) + sin(y))';
B = eval(string2);
B(pi/2,pi/2)
I guess I ignore eval by default, but it definitely works here. I would still recommend either of the previous answers.
Or here's a somewhat interesting possibility:
string1 = '@(x)sin(x)';
A = str2func(string1);
string2 = @(x) (['@(y)(' num2str(feval(A,x)) ' + sin(y))']);
B = @(x,y) feval(str2func(string2(x)), y);
B(pi/2, pi/2)
Maybe it can be simplified.
Good idea, I'm curious!

Sign in to comment.

More Answers (0)

Tags

Products


Release

R2019a

Translated by