How can I save the matlab workspace in a structure?
99 次查看(过去 30 天)
显示 更早的评论
I have a program that modifies a lot of variables in the workspace in every iteration. At the end of every iteration I need to check the old as well as the updated values of some of the variables in the workspace. Is there a way for me to do this by saving the current workspace in a structure and then comparing the current workspace with the structure?
0 个评论
采纳的回答
Matt J
2015-2-1
编辑:Matt J
2015-2-1
If a struct is really what you want, you can automatically generate statements to build the struct, using STRUCTVARS ( Download ).
>> a=1, b=2, c=3
a =
1
b =
2
c =
3
>> z=[who,who].'; myStruct=struct(z{:}); structvars(myStruct,0)
ans =
myStruct.a = a;
myStruct.b = b;
myStruct.c = c;
The idea is just to copy/paste the assignment commands into your mfile and update them as needed.
9 个评论
Matt J
2015-2-27
I don't use Simulink, but I have a hard time seeing why, if you are able to execute,
myStruct.(names{j}) = eval(names{j});
you cannot just as easily, and at the same place in your code, execute
myStruct.a=a;
The two are absolutely equivalent when names{j}='a'. Obviously, you can do the same with all of your other variables.
Stephen23
2015-2-27
编辑:Stephen23
2015-2-27
@Dani Tormo: you really should avoid using eval for such a trivial thing as allocating values to a variable. Structures are perfectly capable of storing your values in a loop, and Matt J has shown you exactly how to do this. If you want robust code, learn to avoid eval:
更多回答(3 个)
Matt J
2015-2-1
编辑:Matt J
2015-2-1
Well, the cheesy and simple way to do it is,
S=load(save(dummyFilename));
However, I am somewhat skeptical that you're going down the right path with this. If all your variables are scalars, you should really be storing them concatenated in a vector and using vectorized functions to do all the comparisons.
2 个评论
Image Analyst
2015-2-1
You accepted an answer, so are you still having trouble or not? I'm guessing not.
By the way, I do this all the time. I put the status of all my GUI widgets into a structure called UserSettings, and then save that when the app exits. Then when the user runs the app again, I retrieve that and set up the GUI just the way it was the last time they ran it - all the same settings.
Image Analyst
2015-2-1
编辑:Image Analyst
2015-2-1
You can save the variables in a structure
s.var1 = var1;
s.var2 = var2;
% Save to disk if you want
save(fullFileName, 's');
You can retrieve from disk, if you need to
s = load(fullFileName);
var1prior = s.var1;
var2prior = s.var2;
You can then compare variable by variable. I don't believe there is a way to compare a whole structure at once because each field can be vastly different data types.
if var1prior ~= var1
warndlg('var1 changed!');
end
if var2prior ~= var2
warndlg('var2 changed!');
end
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!