Filter löschen
Filter löschen

release structure

3 Ansichten (letzte 30 Tage)
Ben Wang
Ben Wang am 1 Aug. 2011
Dear all:
I try to set a separate file for parameters in a model, and I want to retain their name so later on I can do sensitivity analysis using string comparison to identify the parameter name. So I define my parameters into structures, such as:
param.eps = 6;
param.beta = 0.99;
param.theta = 0.7532;
param.gamma = 0.5;
I want to release the structures into into variables as the following:
eps = 6;
beta = 0.99;
theta = 0.7532;
gamma = 0.5;
Is there an automatic way for doing this? I suspect I can setup the structure contains the name and value separately, and I probably can run a loop to equate the name with the value. But I think there must be a quicker and better way of doing this...
Any comments will be appreciated.
Cheers
Ben

Akzeptierte Antwort

Jan
Jan am 1 Aug. 2011
Staying at the structs has some benefits if you use dynamic field names:
param.eps = 6;
param.beta = 0.99;
param.theta = 0.7532;
param.gamma = 0.5;
fields = fieldnames(param);
for i = 1:length(fields)
aField = fields{i};
fprintf('%s = %g\n', aField, param.(aField));
end
If you assign the variable "eps" dynamically, you will overwrite the built-in function with the same name. Such tricks will impede the debugging dramatically!
But if you really have a really good reason to need this really:
function FieldToVar(S)
F = fieldnames(S)
for i = 1:length(F)
aF = F{i};
assignin('caller', aF, S.(aF));
end
This is faster than an equivalent EVAL approach and less dangerous. Nevertheless, I think, this method is worse than using the dynamic field names directly.

Weitere Antworten (1)

Oleg Komarov
Oleg Komarov am 1 Aug. 2011
Why would you like to do such a thing?
% A method that avoids eval:
fnames = fieldnames(param);
save('param.mat','-struct','param')
load('param.mat')
delete('param.mat') % Or save it in the temp folder
  2 Kommentare
Ben Wang
Ben Wang am 1 Aug. 2011
Hi Oleg:
I want the parameters to be identified by their names rather than matrix(or vector) index. This would help me alot later on when I do complex sensitivity analysis, so that I can change the value of the parameters by matching the names. (I guess the only benefit is a more intuitive code and less matching errors)
Thanks for replying
Ben
Oleg Komarov
Oleg Komarov am 1 Aug. 2011
Why can't you keep the structure. It's there for this reason and allows you to dynamically index the fields.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Structures finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by