define variable inside functions
50 次查看(过去 30 天)
显示 更早的评论
Dear all:
I parse a structure into a function, which build the system matrix for a model. The code looks something like this:
function [m] = test(param)
%%SETUP GLOBAL PARAMETERS
F = fieldnames(param);
for i = 1:length(F)
field = F{i};
assignin('caller', field, param.(field));
end
%%SET UP MATRICES FOR SOLVING THE MODEL
m = [kappa, alpha];
end
The structure param looks like the following:
param.kappa = 0.8;
param.alpha = 1;
but when I run the function test, matlab returns the following complain:
??? Undefined function or variable 'kappa'.
I would imagine 'assignin' assigns the value into the kappa, so kappa should be automatically defined, but this is not the case. If I take away kappa and just leave alpha in the matrix, matlab complains about alpha is not defined. Any ideas why this happens?
PS: The reason I do this is not obvious in this simplified function. My model is very complex and involves changing parameters in simulations, so I want to remain the variable name as their name rather than some vector/matrix index to minimise errors.
Thanks alot in advance!
Cheers Ben
1 个评论
Oleg Komarov
2011-8-2
As mentioned in your previous post I don't see the need for what you're doing since you're hardcoding m.
m = [param.kappa param.alpha];
And btw you already have an error...
采纳的回答
Jan
2011-8-2
The documentation of ASSIGNIN reveals, that the variable is created in the caller. Therefore the program would run as:
function m = MainProgram(param)
test(param); % Call the subfunction to create the variables
% SET UP MATRICES FOR SOLVING THE MODEL
m = [kappa, alpha];
end
function test(param) % The subfunction
F = fieldnames(param);
for i = 1:length(F)
field = F{i};
assignin('caller', field, param.(field));
end
As you can see, the confusion level of automagically created variables is very high. I strongly recommend to avoid such tricks, if you are not an advanced programmer and know exactly what you are doing. If you are a beginner, such Voodoo techniques will waste your time. Faster, nicer, easier and stable:
function m = MainProgram(param)
% SET UP MATRICES FOR SOLVING THE MODEL
m = [param.kappa, param.alpha];
end
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Introduction to Installation and Licensing 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!