Если вы хотите создать 101 separate variables для хранения каждого значения, что не рекомендуется. Pre-allocate массив для fval
для хранения значений faval
в каждой итерации, как показано ниже:
fval = zeros(101,1); %Pre-allocating memory for fval
for k = 0 : 100
ii = k * 0.01;
options = optimset('Display','iter-detailed', ...
'Algorithm','interior point', ...
'Diagnostics','on');
options.TolCon = 0;
options.TolFun = 0;
[X,faval,exitfag,output,lambda,grad,hessian]=fmincon(@myfun9,0,[],[],[],[],ii,1, ...
@mycon,options);
%Storing value of faval in fval(k+1). Note that indexing starts from 1 in MATLAB
fval(k+1) = faval;
end
Кстати, это, кажется, из вашего кода, что вы не заинтересованы в значениях всех остальных параметров т.е. X
, exitfag
, output
, lambda
, grad
, hessi
, поскольку эти параметры будут перезаписаны на каждой итерации. Если вас это не интересуют. Вы можете пропустить их хранение, используя tilde (~
). Таким образом, вы также можете использовать вместо следующих:
[~,faval]=fmincon(@myfun9,0,[],[],[],[],ii,1, @mycon,options);
% exitfag, output, lambda, grad, hessi are skipped automatically as per fmincon doc
Рекомендуемая литература:
1. Dynamic Variables
2. Preallocation
3. Why does MATLAB have 1 based indexing?
4. Tilde as an Argument Placeholder
do вы хотите сохранить возвращаемое значение 'fval' в отдельной переменной на каждой итерации? Итак, после цикла вы получите 100 переменных? – bushmills
Как насчет использования массива, например. определите 'fval = [];' перед циклом, а затем в конце каждой итерации сделайте 'fval = [fval; faval]; 'для хранения новых значений. Обратите внимание: это будет работать только тогда, когда 'faval' имеет одинаковые размеры для всех итераций. – hmofrad
@hmofrad Это не рекомендуется. Читайте почему: https://www.mathworks.com/help/matlab/matlab_prog/preallocating-arrays.html –