2017-01-09 1 views
1

В показанном коде я хочу сохранить один параметр (fval) за итерацию одной переменной, но не знаю, как это сделать. Может ли кто-нибудь посоветовать?Нужна помощь в сохранении параметра для переменной каждая итерация

clear; 
close all; 
clc; 

for i = 0 : 100 
    ii = i * 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); 

end; 
+0

do вы хотите сохранить возвращаемое значение 'fval' в отдельной переменной на каждой итерации? Итак, после цикла вы получите 100 переменных? – bushmills

+0

Как насчет использования массива, например. определите 'fval = [];' перед циклом, а затем в конце каждой итерации сделайте 'fval = [fval; faval]; 'для хранения новых значений. Обратите внимание: это будет работать только тогда, когда 'faval' имеет одинаковые размеры для всех итераций. – hmofrad

+0

@hmofrad Это не рекомендуется. Читайте почему: https://www.mathworks.com/help/matlab/matlab_prog/preallocating-arrays.html –

ответ

0

Если вы хотите создать 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

Смежные вопросы