matlab怎么储存每一个fval
时间: 2023-11-21 19:04:12 浏览: 99
在 MATLAB 中,可以使用一个向量来存储每个迭代步骤的函数值。在使用优化算法进行优化时,可以通过将输出函数设置为一个函数句柄来捕获每个迭代步骤的函数值。
例如,下面的代码使用 fminsearch 函数对给定的 Rosenbrock 函数进行最小化,并将每个迭代步骤的函数值存储在一个向量中:
```
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; % Rosenbrock函数
x0 = [-1.2,1]; % 初始点
options = optimset('OutputFcn',@storevalues); % 设置输出函数
[x,fval,exitflag,output] = fminsearch(fun,x0,options); % 进行优化
function stop = storevalues(x,optimValues,state)
persistent fvals % 定义一个持久化变量,用于存储函数值
switch state
case 'init'
fvals = []; % 初始化函数值向量
case 'iter'
fvals = [fvals, optimValues.fval]; % 将当前迭代步骤的函数值存储在向量中
case 'done'
% 结束时不需要进行任何操作
end
stop = false;
end
```
在上面的代码中,storevalues 函数被设置为输出函数。该函数使用一个持久化变量 fvals 来存储每个迭代步骤的函数值。在每个迭代步骤中,storevalues 函数将当前的函数值存储在 fvals 向量中。在优化结束时,向量 fvals 包含了每个迭代步骤的函数值。
请注意,为了能够在 storevalues 函数中使用持久化变量,该函数必须定义在主函数之外。
阅读全文