Matlab is not recognizing variables in function handle

14 views (last 30 days)
Hello all.
I am defining a table of cells that contains function handles.
Why MATLAB cannot recognize them? He cannot access them. I am getting error that MATLAB is not recognizing the variable SS although it is defined. I get error when I type this.
a = P.fw{4}(1:10)
On the other side, when I type this,
a = @(x) 2*SS(4)*x.^0/(BI.L(4))^2
I get answer without error. Any idea why this is happening?
Thanks all.

Accepted Answer

Mehmed Saad
Mehmed Saad on 31 Aug 2020
Edited: Mehmed Saad on 10 Sep 2020
Run following two codes and learn the difference

Code-1 (error will be generated)

fw = {@(x) x+SS;@(x) x+SS+1};
P = table(fw);
SS = 1;

Code-2 (Works fine)

SS = 1;
fw = {@(x) x+SS;@(x) x+SS+1};
P = table(fw);
Also read this comment
Steven Lord
Steven Lord on 31 Aug 2020
The following will error because varToRemember didn't exist when f was defined and isn't a function that f can call when it is called.
clear varToRemember
f = @(x) x.^varToRemember;
f(3) % will error
Even if we define varToRemember after f was defined, since it didn't exist when f was defined f can't use it.
varToRemember = 2;
If the variable exists when the anonymous function is defined, that value will be remembered and used even if the variable changes or is cleared after the anonymous function is defined.
g = @(x) x.^varToRemember;
g(3) % 9, since g "remembers" the value of varToRemember
varToRemember = 3;
g(3) % still 9 not 27
clear varToRemember
g(4) % 16, g remembers
If you want to define an anonymous function that doesn't remember a variable but obtains its value when the anonymous function is evaluated, make that variable an input. Later on you could define a second anonymous function that fixes a value for that input like k fixes varToRemember = 2 when it calls h.
h = @(x, varToRemember) x.^varToRemember;
v = 2;
h(5, v) % 25
k = @(x) h(x, v);
k(6) % 36

Sign in to comment.

More Answers (0)


Find more on Matrices and Arrays in Help Center and File Exchange




Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by