Azzera filtri
Azzera filtri

release structure

3 visualizzazioni (ultimi 30 giorni)
Ben Wang
Ben Wang il 1 Ago 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

Risposta accettata

Jan
Jan il 1 Ago 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.

Più risposte (1)

Oleg Komarov
Oleg Komarov il 1 Ago 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 Commenti
Ben Wang
Ben Wang il 1 Ago 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 il 1 Ago 2011
Why can't you keep the structure. It's there for this reason and allows you to dynamically index the fields.

Accedi per commentare.

Categorie

Scopri di più su Structures in Help Center e File Exchange

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by