Matlab is not recognizing variables in function handle
12 views (last 30 days)
Show older comments
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.
0 Comments
Accepted Answer
Mehmed Saad
on 31 Aug 2020
Edited: Mehmed Saad
on 10 Sep 2020
Run following two codes and learn the difference
clear
fw = {@(x) x+SS;@(x) x+SS+1};
P = table(fw);
%%%%%%%%%%%%%
SS = 1;
%%%%%%%%%%%%%
P.fw{1}(1)
clear
%%%%%%%%%%%%%
SS = 1;
%%%%%%%%%%%%%
fw = {@(x) x+SS;@(x) x+SS+1};
P = table(fw);
P.fw{1}(1)
2 Comments
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;
f(3)
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
More Answers (0)
See Also
Categories
Find more on Whos 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!