Store structure output into an array that you can index
6 views (last 30 days)
Show older comments
I used a [X,fval,exitflag,output] = fmincon(fun,...) for global optimization that is in a parfor loop.
In each loop, I get an "output" that show something like:
output =
struct with fields:
iterations: 24
funcCount: 84
constrviolation: 0
stepsize: 6.9162e-06
algorithm: 'interior-point'
firstorderopt: 2.4373e-08
cgiterations: 4
message: 'Local minimum found that satisfies the constraints....'
bestfeasible: [1x1 struct]
The information here is important so I want to store them in each loop. After the loop is done, I am going to use indexing to call for the output of a particular calculation that finished with an exitflag = 1.
X, fval, exitflag are easy to store for recalling them later since they are scalar numbers (using normal array). However, the output is a structure. I saw that the structure array could be used, but it seems to me that creating empty TotalNumberOfIteration-by-1 structure array is impossible without directly naming each of the elements.
I want to know of a way to store in a similar way to normal array to recall them later. Is there such way?
0 Comments
Accepted Answer
Luca Ferro
on 2 Feb 2023
i would either store it in a 1xn struct (n is the number of outputs you want to store):
for (your current loop condition, i'll call the index it idx)
[..,output(idx)] = fmincon(fun,..) %this stores your your outout in a 1xn struct
end
%to access the struct (let's say the first one)
output(1)
..
output(idx)
%to access the values
output(1).iterations
..
output(idx).iterations
%to access the struct within the values
output(1).bestfeasible.fieldnameinsidethestruct
or i would go for a cell array
for (your current loop condition, i'll call the index it idx)
[..,output{1}] = fmincon(fun,..) %this stores your your outout in a 1xn cell array
end
%to access the cell array (let's say the first one)
output{1}
..
output{idx}
%to access the values
output{1}.iterations
..
output{idx}.iterations
%to access the struct within the values
output{1}.bestfeasible.fieldnameinsidethestruct
The main difference is that the first method allows only structs with the same dimensions, the latter one is a bit more flexible.
5 Comments
Luca Ferro
on 2 Feb 2023
Edited: Luca Ferro
on 2 Feb 2023
thank you for expanding on the differences, i missed that for sure
More Answers (0)
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!