MATLAB Answers

Matlab is not recognizing variables in function handle

17 ビュー (過去 30 日間)
Ahmad Gad
Ahmad Gad 2020 年 8 月 31 日
編集済み: Mehmed Saad 2020 年 9 月 10 日
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.

採用された回答

Mehmed Saad
Mehmed Saad 2020 年 8 月 31 日
編集済み: Mehmed Saad 2020 年 9 月 10 日
Run following two codes and learn the difference

Code-1 (error will be generated)

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

Code-2 (Works fine)

clear
%%%%%%%%%%%%%
SS = 1;
%%%%%%%%%%%%%
fw = {@(x) x+SS;@(x) x+SS+1};
P = table(fw);
P.fw{1}(1)
Also read this comment
  2 件のコメント
Steven Lord
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 件)

製品


リリース

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by