matlab函数输出,优化求解器输出函数
嵌套輸出函數(shù)的示例
創(chuàng)建和使用輸出函數(shù)中的示例不需要輸出函數(shù)在每次迭代后保留數(shù)據(jù)。如果不需要保存各次迭代之間的數(shù)據(jù),可以將輸出函數(shù)編寫為函數(shù)文件,并從命令行直接調(diào)用優(yōu)化函數(shù)。但是,要使輸出函數(shù)在每次迭代后記錄數(shù)據(jù),請編寫一個用于實現(xiàn)以下目的的文件:
以嵌套函數(shù)的形式包括輸出函數(shù) - 有關詳細信息,請參閱 MATLAB 編程基礎中的嵌套函數(shù)。
調(diào)用優(yōu)化函數(shù)。
在以下示例中,函數(shù)文件還包含目標函數(shù)作為局部函數(shù)。您也可以將目標函數(shù)編寫為單獨的文件或匿名函數(shù)。
嵌套函數(shù)可以訪問其所在的文件中的變量。因此,此方法使輸出函數(shù)能夠在每次迭代后保留變量。
以下示例使用輸出函數(shù)記錄以下求解中的 fminsearch 迭代:
minxf(x)=minxex1(4x12+2x22+x1x2+2x2).
輸出函數(shù)以矩陣(稱為 history)的形式返回點序列。
要運行此示例,請執(zhí)行下列步驟:
使用 MATLAB 編輯器打開一個新文件。
將以下代碼復制并粘貼到此文件。
function [x fval history] = myproblem(x0)
history = [];
options = optimset('OutputFcn', @myoutput);
[x fval] = fminsearch(@objfun, x0,options);
function stop = myoutput(x,optimvalues,state);
stop = false;
if isequal(state,'iter')
history = [history; x];
end
end
function z = objfun(x)
z = exp(x(1))*(4*x(1)^2+2*x(2)^2+x(1)*x(2)+2*x(2));
end
end
將文件作為 myproblem.m 保存到 MATLAB 路徑上的某個文件夾中。
在 MATLAB 提示符下,輸入
[x fval history] = myproblem([-1 1]);
函數(shù) fminsearch 返回最佳點 x 及 x 處的目標函數(shù)值 fval。
x,fval
x =
0.1290 -0.5323
fval =
-0.5689
此外,輸出函數(shù) myoutput 向 MATLAB 工作區(qū)返回矩陣 history,該矩陣包含算法在每次迭代中生成的點。history 的前四行為
history(1:4,:)
ans =
-1.0000 1.0000
-1.0000 1.0000
-1.0750 0.9000
-1.0125 0.8500
history 最后一行的點與最佳點 x 相同。
history(end,:)
ans =
0.1290 -0.5323
objfun(history(end,:))
ans =
-0.5689
總結(jié)
以上是生活随笔為你收集整理的matlab函数输出,优化求解器输出函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中table表结构_pyth
- 下一篇: 如何在matlab里输入复杂公式_在MA