matlab优化工具箱的使用.docx
- 文档编号:25283641
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:22
- 大小:45.74KB
matlab优化工具箱的使用.docx
《matlab优化工具箱的使用.docx》由会员分享,可在线阅读,更多相关《matlab优化工具箱的使用.docx(22页珍藏版)》请在冰豆网上搜索。
matlab优化工具箱的使用
优化工具箱的使用
MATLAB的优化工具箱提供了各种优化函数,这些优化函数可以通过在命令行输入相应的函数名加以调用;此外为了使用方便,MATLAB还提供了图形界面的优化工具(GUIOptimizationtool)。
1GUI优化工具
GUI优化工具的启动
有两种启动方法:
(1)在命令行输入optimtool;
(2)在MATLAB主界面单击左下角的“Start”按钮,然后依次选择“Toolboxes→Optimization→Optimizationtool”
GUI优化工具的界面
界面分为三大块:
左边(ProblemSetupandResults)为优化问题的描述及计算结果显示;
中间(Options)为优化选项的设置;
右边(QuickReference)为帮助。
为了界面的简洁,可以单击右上角“<<”、“>>”的按钮将帮助隐藏或显示。
1、优化问题的描述及计算结果显示
此板块主要包括选择求解器、目标函数描述、约束条件描述等部分。
选择合适的求解器以及恰当的优化算法,是进行优化问题求解的首要工作。
✧Solver:
选择优化问题的种类,每类优化问题对应不同的求解函数。
✧Algorithm:
选择算法,对于不同的求解函数,可用的算法也不同。
Problem框组用于描述优化问题,包括以下内容:
✧Objectivefunction:
输入目标函数。
✧Derivatives:
选择目标函数微分(或梯度)的计算方式。
✧Startpoint:
初始点。
Constraints框组用于描述约束条件,包括以下内容:
✧Linearinequalities:
线性不等式约束,其中A为约束系数矩阵,b代表约束向量。
✧Linearequalities:
线性等式约束,其中Aeq为约束系数矩阵,beq代表约束向量。
✧Bounds:
自变量上下界约束。
✧NonlinearConstraintsfunction;非线性约束函数。
✧Derivatives:
非线性约束函数的微分(或梯度)的计算方式。
Runsolverandviewresults框组用于显示求解过程和结果。
(对于不同的优化问题类型,此板块可能会不同,这是因为各个求解函数需要的参数个数不一样,如Fminunc函数就没有Constraints框组。
)
2、优化选项(Options)
✧Stoppingcriteria:
停止准则。
✧Functionvaluecheck:
函数值检查。
✧User-suppliedderivatives:
用户自定义微分(或梯度)。
✧Approximatedderivatives:
自适应微分(或梯度)。
✧Algorithmsettings:
算法设置。
✧Inneriterationstoppingcriteria:
内迭代停止准则。
✧Plotfunction:
用户自定义绘图函数。
✧Outputfunction:
用户自定义输出函数。
✧Displaytocommandwindow:
输出到命令行窗口。
对于不同的优化问题类型,此板块也会不同,
3、帮助(QuickReference)
每选择一个函数求解器,帮助部分都有对这个函数的功能说明,同时还会给出相应的各个输入项说明。
GUI优化工具的使用步骤
(1)选择求解器Solver和优化算法。
(2)选定目标函数。
(3)设定目标函数的相关参数。
(4)设置优化选项。
(5)单击“Start”按钮,运行求解。
(6)查看求解器的状态和求解结果。
(7)将目标函数、选项和结果导入/导出。
(在菜单文件中寻找)
GUI优化工具的应用实例
1、无约束优化(fminunc求解器)
fminunc求解器可用的算法有两种:
ØLargescale(大规模算法)
ØMediumscale(中等规模算法)
对于一般问题,采用中等规模算法即可。
例1:
用优化工具求
的极小值,初始点取x=0。
解:
首先在当前MATLAB的工作目录下建立目标函数文件文件:
functiony=FunUnc1(x)%function必须为小写,如果F为大写则不行
y=x^2+4*x-6;%平方符号输入时用键盘上数字6上的符合,否则错误
然后启动优化工具:
✧在Solver下拉选框中选择fminunc;
✧Algorithm下拉选框中选择Mediumscale;
✧目标函数栏输入@FunUnc1;%运算时输入函数不知什么原因老有错误,直接输入目标函数却没有错误
✧初始点输入0,其余参数默认;
✧单击“Start”按钮运行。
从求解结果可以看出,函数的极小值为-10,且在x=-2时取到,而且从Currentiteration框可以看出迭代的步数。
对于函数形式比较简单的情况,可以直接输入目标函数,而不用建立目标函数文件,在目标函数栏中直接输入@(x)x^2+4*x-6,也可求出结果。
此题能否用进退法和黄金分割法(或二次插值法)求解吗?
不能,要用进退法或黄金分割法得自己先编程序,然后才能调用这样的函数。
2、无约束优化(fminsearch求解器)
fminsearch求解器也可用来求解无约束优化问题,它有时候能求解fminunc不能解决的问题。
例2:
用优化工具求
的极小值,初始点取x=-7,比较fminunc和fminsearch求出的结果。
解:
通过数学计算,可以得到本例中的极小点有两个x1=1,x2=2。
启动优化工具:
✧在Solver下拉选框中选择fminunc;
✧Algorithm下拉选框中选择Mediumscale;
✧目标函数栏输入@(x)abs(x^2-3*x+2);
✧初始点输入-7,其余参数默认;
✧单击“Start”按钮运行。
Fminunc求得的结果为x=,显然数值不对,它是未加绝对值时函数
的极小值。
✧然后在Solver下拉选框中选择fminsearch;
✧Algorithm下拉选框中选择Mediumscale;
✧目标函数栏输入@(x)abs(x^2-3*x+2);
✧初始点输入-7,其余参数默认;
✧单击“Start”按钮运行。
fminsearch求得的结果为x=2,显然数值是对的。
可为什么不能求出数值x=1呢,因为此时的函数值也是最小的。
由此可得结论:
对于非光滑优化问题Fminunc可能求不到正确的结果,而fminsearch却能很好地胜任这类问题的求解。
2MATLAB优化工具箱在一维优化问题中的应用
应用fminbnd函数
在MATLAB中,fminbnd函数可用来求解一维优化问题,其调用格式为:
(1)x=fminbnd(fun,x1,x2);%求函数fun在区间(x1,x2)上的极小值对应的自变量值。
(2)x=fminbnd(fun,x1,x2,options);%按options结构指定的优化参数求函数fun在区间(x1,x2)上的极小值对应的自变量值,而options结构的参数可以通过函数optimset来设置,其中options结构中的字段如下:
Display——设置结果的显示方式:
off——不显示任何结果;iter——显示每步迭代后的结果;final——只显示最后的结果;notify——只有当求解不收敛的时候才显示结果。
FunValCheck——检查目标函数值是否可接受:
On——当目标函数值为复数或NaN时显示出错信息;
Off——不显示任何错误信息。
MaxFunEvals——最大的目标函数检查步数。
MaxIter——最大的迭代步数。
OutputFcn——用户自定义的输出函数,它将在每个迭代步调用。
PlotFcns——用户自定义的绘图函数。
TolX——自变量的精度。
(3)[x,fval]=fminbnd(...);%此格式中的输出参数fval返回目标函数的极小值。
(4)[x,fval,exitflag]=fminbnd(...);%此格式中的输出参数exitflag返回函数fminbnd的求解状态(成功或失败),说明如下:
exitflag=1——fminbnd成功求得最优解,且解的精度为TolX;
exitflag=0——由于目标函数检查步数达到最大或迭代步数达到最大值而推出。
exitflag=-1——用户自定义函数引起的退出。
exitflag=-2——边界条件不协调(x1>x2)。
(5)[x,fval,exitflag,output]=fminbnd(...);%此格式中的输出参数output返回函数fminbnd的求解信息(迭代次数、所用算法等),说明如下:
output结构中的字段:
:
优化算法
:
优化迭代步数
:
目标函数检查步数
:
退出信息
例1:
用fminbnd求函数
在区间[-2,1]上的极小值。
解:
在MATLAB命令窗口输入
>>[x,fval,exitflag,output]=fminbnd(‘x^4-x^2+x-1’,-2,1)
所得结果为
x=
fval=
exitflag=1
output=iterations:
11%迭代次数为11次
funcCount:
12%函数计算了12次
algorithm:
'goldensectionsearch,parabolicinterpolation'%fminbnd用了黄金分割法和抛物线算法求本例函数的极小值
message:
[1x112char]
要查看结果的精度,可以接着在MATLAB命令窗口中输入
>>
可得如下信息
ans=Optimizationterminated:
thecurrentxsatisfiestheterminationcriteriausingof
说明求得结果的精度为,如果想提高精度,可以通过option结构来指定,在MATLAB命令窗口输入
>>opt=optimset(‘TolX’,;
>>formatlong;
>>[x,fval,exitflag,output]=fminbnd(‘x^4-x^2+x-1’,-2,1,opt)
所得结果为
x=
fval=
exitflag=1
output=iterations:
11
funcCount:
12
algorithm:
'goldensectionsearch,parabolicinterpolation'
message:
[1x112char]
这样求得的结果x就有了的精度。
为了理解fminbnd的求解原理,将每一步的迭代过程打印出来,在MATLAB命令窗口中输入
>>opt=optimset(‘display’,’iter’);
>>[x,fval,exitflag,output]=fminbnd(‘x^4-x^2+x-1’,-2,1,opt)
所得结果为
Func-countxf(x)Procedure
1initial
2golden
3golden
4parabolic
5parabolic
6parabolic
7golden
8parabolic
9parabolic
10parabolic
11parabolic
12parabolic
Optimizationterminated:
thecurrentxsatisfiestheterminationcriteriausingof
x=
fval=
exitflag=1
output=iterations:
11
funcCount:
12
algorithm:
'goldensectionsearch,parabolicinterpolation'
message:
[1x112char]
分析迭代过程可发现,fminbnd首先产生一个迭代的初始点,经过简单的计算可以发现,这个初始点是区间的黄金分割点(=-2+()*(1+2)),接着再用黄金分割法迭代,直到相连两步迭代得到的f(x)相差不大时,此时用二次插值法迭代一步,如果用二次插值法得到的估计点可以接受的话(和前次黄金分割法得到的f(x)相差不大),则再用二次插值法迭代,如果相连两次二次插值法迭代得到的f(x)相差不大,且自变量的差别很小,则继续直到满足精度要求,否则换用黄金分割法。
例2:
用fminbnd求函数
在区间[-10,10]上的极小值。
解:
在MATLAB命令窗口中输入
>>[x,fval,exitflag]=fminbnd(‘exp(-x^2)*(x+sin(x))’,-10,10)
所得结果为
x=
fval=
exitflag=1
函数
在区间[-10,10]上的图形如图所示,在此区间上函数有两个极值点,一个极大值,一个极小值,函数fminbnd成功求得极小值点。
例3:
用fminbnd求函数
在区间[-4,4]上的极小值。
解:
在MATLAB命令窗口中输入
>>[x,fval]=fminbnd(‘sin(2*x+1)+3*sin(4*x+3)+5*sin(6*x+5)’,-4,4)
所得结果为
x=
fval=
若在MATLAB命令窗口中输入
>>[x,fval,exitflag]=fminbnd(‘sin(2*x+1)+3*sin(4*x+3)+5*sin(6*x+5)’,-4,4)
x=
fval=
exitflag=1
例4:
用fminbnd求函数
在区间[-8,8]上的极小值。
解:
在MATLAB命令窗口中输入
>>[x,fval]=fminbnd(‘-1/((x-2)^2+3)-1/(3*(x-5)^2+4)-1/(2*(x-1)^2+1)’,-8,8)
所得结果为
x=
fval=
例5:
用fminbnd求函数
在区间[-2,2]上的极小值。
解:
在MATLAB命令窗口中输入
>>[x,fval]=fminbnd(‘abs(x+1)+x^2+x-2’,-2,2)
所得结果为
x=
fval=
应用fminsearch函数
fminsearch函数的主要功能是求多变量的极值问题,当然也就可以求单变量极值问题。
例:
用fminsearch函数求函数
的极小值。
解:
在MATLAB命令窗口中输入
>>[x,fval,exitflag,output]=fminsearch(‘x^4-x^2+x-1’,0)
所得结果为
x=
fval=
exitflag=1
output=iterations:
24
funcCount:
48
algorithm:
'Nelder-Meadsimplexdirectsearch'
message:
[1x196char]
3MATLAB优化工具箱在无约束优化问题中的应用
应用fminsearch函数
在MATLAB中,fminsearch函数可用来求解无约束多维极值问题,其调用格式为
(1)x=fminsearch(fun,x0):
从起始点x0出发,求出fun的一个局部极小点;
(2)x=fminsearch(fun,x0,options):
按options结构指定的优化参数求函数fun的极小点,而options结构的参数可以通过函数optimset来设置,options结构中的各个字段及其含义如表所示;
字段
说明
Display
设置结果的显示方式:
off——不显示任何结果;iter——显示每步迭代后的结果;final——只显示最后的结果;notify——只有当求解不收敛的时候才显示结果。
FunValCheck
检查目标函数值是否可接受:
On——当目标函数值为复数或NaN时显示出错信息;
Off——不显示任何错误信息。
MaxFunEvals
最大的目标函数检查步数
MaxIter
最大的迭代步数
OutputFcn
用户自定义的输出函数,它将在每个迭代步调用
PlotFcns
用户自定义的绘图函数,它将在每个迭代步调用
TolFun
目标函数值的精度
TolX
自变量的精度。
(3)[x,fval]=fminsearch(…):
此格式中的输出参数fval返回目标函数的极小值。
(4)[x,fval,exitflag]=fminsearch(…):
此格式中的输出参数exitflag返回函数fminsearch的求解状态(成功或失败),其取值如表所示。
exitflag
说明
1
fminbnd成功求得最优解,且解的精度为TolX
0
由于目标函数检查步数达到最大或迭代步数达到最大值而退出。
-1
用户自定义函数引起的退出
(5)[x,fval,exitflag,output]=fminsearch(…):
此格式中的输出参数output返回函数fminsearch的求解信息(迭代次数、所用算法等),其字段及其含义如表所示:
Output结构中的字段
说明
优化算法
优化迭代步数
目标函数检查步数
退出信息
例1:
用fminsearch函数求解无约束多维函数
的极小值。
解:
在MATLAB命令窗口中输入
>>fx=@(x)sin(x
(1))+sin(x
(2));%建立函数
>>[xv,fv]=fminsearch(fx,[0,0])
所得结果为
xv=
fv=
例2:
用fminsearch函数求解无约束多维函数
的极小值。
解:
显然,上式的极值点为(2,-1),最小值为-2/15。
在MATLAB命令窗口中输入
>>fx=@(x)-1/((x
(1)-2)^2+3)-1/(2*(x
(2)+1)^2-5);
>>[xv,fv]=fminsearch(fx,[0,0])
所得结果为
xv=
fv=
为了看清楚fminsearch函数的单纯型搜索过程,采用optimset函数设置options结构,将display字段设为iter,以显示每次迭代的信息。
在MATLAB命令窗口中输入
>>opt=optimset(‘display’,’iter’);
>>[xv,fv]=fminsearch(fx,[0,0],opt)
所得结果为
IterationFunc-countminf(x)Procedure
01
13initialsimplex%初始单纯型
25expand%扩展
37expand
49expand
511expand
613expand
715expand
817expand
919expand
1021expand
1123expand
1225expand
1327expand
1429expand
1531expand
1633expand
1735reflect%反射
1836reflect
1938contractinside%压缩
2040contractinside
2141reflect
2243contractinside
2345contractoutside
2447contractinside
2549contractinside
2651reflect
2753contractinside
2855expand
2957expand
3059expand
3161expand
3263expand
3365expand
3466reflect
3568expand
3669reflect
3771expand
3873expand
3975expand
4077expand
4179expand
4281reflect
4382reflect
4484contractinside
4586contractinside
4688contractinside
4790reflect
4892contractinside
4994contractinside
5096contractinside
5198contractinside
52100contractoutside
53102contractinside
54104contractoutside
55106contractinside
56108contractinside
57110contractoutside
58112contractinside
59114contractinside
60116contractinside
61118contractinside
62120contractinside
63121reflect
64123contractinside
65125contractoutside
66127contractinside
67129contractinside
68131contractinside
69133reflect
70135contractinside
Optimizationterminated:
thecurrentxsatisfiestheterminationcriteriausingof
andF(X)satisfiestheconvergencecriteriausingof
xv=
fv=
从迭代过程可看出,经过多次扩展、反射、压缩过程,才求得极小值。
为了得到每一步优化得到的x值,通过建立相应的m文件可实现。
例3:
用fminsearch函数求解无约束多维函数
的极小值。
解:
显然,上式的最小值为4,极值点为(1,1)。
在MATLAB命令窗口中输入
>>fx=@(x)x
(1)+1/x
(1)+x
(2)+1/x
(2);%建立函数
>>[xv,fv]=fminsearch(fx,[2,3])
所得结果为
xv=
fv=
fminsearch用的算法是单纯形搜索法,由于不需要计算梯度,因此fminsearch函数的运算速度很快,常见的函数都能立即求出极小值。
应用fminunc函数
fminunc函数也能求无约束极值问题。
常用的调用格式为:
(1)x=fminunc(fun,x0):
表示从起始点x0出发,求出fun的一个局部极小点。
(2)x=fminunc(fun,x0,options):
按options结构指定的优化参数求函数的极小点,而options
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 优化 工具箱 使用