Undefined variable when running appdesigner code
1 回表示 (過去 30 日間)
古いコメントを表示
I have some code that works in normal matlab:
if app.Maint_Select.Value == "Seal Coat"
mat = xlsread('Maint.xlsx','B3:Q6');
elseif app.Maint_Select.Value == "Slurry Seal"
mat = xlsread('Maint.xlsx','B9:Q12');
elseif app.Maint_Select.Value == "Overlay"
mat = xlsread('Maint.xlsx','B15:Q18');
end
for k = 1:size(mat,1)
vec = mat(k,:);
A = reshape(vec,[4,4]);
assignin('base',strcat('MAT',num2str(k)),A);
end
%===Defines identity matrix===
I = eye(4);
%===Uses Kronecker Tensor Product to generate all combinations rate matrix for maintenance===
maint_mat=full(KronProd({MAT1,I,I,I})) + full(KronProd({I,MAT2,I,I})) + ...
full(KronProd({I,I,MAT3,I})) + full(KronProd({I,I,I,MAT4})) ;
After pasting this into the code for appdesigner and running it for my app, it comes up with the error saying:
" Undefined function or variable 'MAT1'. " on line 16 of code.
However, 'MAT1' has been defined on line 11 of the code.
Does anyone know why this is happening and how to fix it?
Thank you
0 件のコメント
採用された回答
Image Analyst
2020 年 4 月 5 日
Variables only can be seen within a certain scope. You pasted that code snippet into some function, but line 11 (where you say MAT1 was defined) is not in the scope of the function where you pasted the snippet.
If you put this
whos MAT1
after your assignin() for loop but before the "maint_mat=" line, what does it show in the command window?
Also, you should never have to use functions like assignin(), evalin(), eval(), etc. if you do your programming correctly.
3 件のコメント
Image Analyst
2020 年 4 月 5 日
whos was never intended to "fix" the situation. It was just a diagnostic to see if MAT1 ever got pulled in to your function's workspace.
See, this PROVES that your call to assignin(), to yank that variable in from the base workspace, didn't work. MAT1 does not exist in your base workspace. Anyway, poofing variables into your local workspace by using assignin, rather than passing them in via the argument list is bad practice. Why do you think MAT1 should have been in the base workspace, even though it's not? Another option is to just read in the MAT1 variable using load() or however you (think) you got it into the base workspace.
You do know what MATLAB and all programming languages have different workspaces / scopes, right? So a workspace that you have while in a script ( a simple m-file with no functions) is the base workspace, while a function, or different functions, will have it's own internal workspace just internal to it. And the different workspaces are all separate from each other. One function's workspace can't see variables in another functions workspace, or the base workspace, or the global workspace (yet another one I haven't talked about), unless you do something special to let those variables be seen outside the workspace that they live in. See the FAQ.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Startup and Shutdown についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!