Matlab is not recognizing variables in function handle
4 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Mehmed Saad
2020-8-31
编辑:Mehmed Saad
2020-9-10
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 个评论
Steven Lord
2020-8-31
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
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Whos 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!