Store structure output into an array that you can index
6 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hayao
el 2 de Feb. de 2023
Comentada: Hayao
el 3 de Feb. de 2023
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 comentarios
Respuesta aceptada
Luca Ferro
el 2 de Feb. de 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 comentarios
Luca Ferro
el 2 de Feb. de 2023
Editada: Luca Ferro
el 2 de Feb. de 2023
thank you for expanding on the differences, i missed that for sure
Más respuestas (0)
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!