拟合方法

来源:互联网 发布:网络集成公司 编辑:程序博客网 时间:2024/04/30 08:28

Matlab优化工具箱简介

1.MATLAB求解优化问题的主要函数

  2.优化函数的输入变量

使用优化函数或优化工具箱中其它优化函数时, 输入变量见下表:

  3. 优化函数的输出变量下表:

  4.控制参数options的设置

 Options中常用的几个参数的名称、含义、取值如下:

(1)   Display: 显示水平.取值为’off’时,不显示输出; 取值为’iter’时,显示每次迭代的信息;取值为’final’时,显示最终结果.默认值为’final’.

(2)   MaxFuns: 允许进行函数评价的最大次数,取值为正整数.

(3)  MaxIter: 允许进行迭代的最大次数,取值为正整数

控制参数options可以通过函数optimset创建或修改。命令的格式如下:

(1) options=optimset(‘optimfun’)

   创建一个含有所有参数名,并与优化函数optimfun相关的默认值的选项结构options.

(2)options=optimset(‘param1’,value1,’param2’,value2,...)

   创建一个名称为options的优化选项参数,其中指定的参数具有指定值,所有未指定的参数取默认值.

(3)options=optimset(oldops,‘param1’,value1,’param2’,value2,...)

   创建名称为oldops的参数的拷贝,用指定的参数值修改oldops中相应的参数.

例:opts=optimset(‘Display’,’iter’,’TolFun’,1e-8)

  该语句创建一个称为opts的优化选项结构,其中显示参数设为’iter’, TolFun参数设为1e-8.

 用Matlab解无约束优化问题

1.         一元函数无约束优化问题

常用格式如下:

(1)x= fminbnd (fun,x1,x2)

(2)x= fminbnd (fun,x1,x2 ,options)

(3)[x,fval]= fminbnd(...)

(4)[x,fval,exitflag]= fminbnd(...)

(5)[x,fval,exitflag,output]= fminbnd(...)

其中(3)、(4)、(5)的等式右边可选用(1)或(2)的等式右边。

   函数fminbnd的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只给出局部最优解。

 

2、多元函数无约束优化问题

标准型为:min F(X)

命令格式为:

(1)x= fminunc(fun,X0 );或x=fminsearch(fun,X0 )

(2)x= fminunc(fun,X0 ,options);

     或x=fminsearch(fun,X0 ,options)

(3)[x,fval]= fminunc(...);

     或[x,fval]= fminsearch(...)

(4)[x,fval,exitflag]= fminunc(...);

     或[x,fval,exitflag]= fminsearch

(5)[x,fval,exitflag,output]= fminunc(...);

     或[x,fval,exitflag,output]= fminsearch(...)

说明:

   fminsearch是用单纯形法寻优.

    fminunc的算法见以下几点说明:

[1] fminunc为无约束优化提供了大型优化和中型优化算法。由options中的参数LargeScale控制:

LargeScale=’on’(默认值),使用大型算法

LargeScale=’off’(默认值),使用中型算法

[2] fminunc为中型优化算法的搜索方向提供了4种算法,由options中的参数HessUpdate控制:

HessUpdate=’bfgs’(默认值),拟牛顿法的BFGS公式;

HessUpdate=’dfp’,拟牛顿法的DFP公式;

HessUpdate=’steepdesc’,最速下降法

[3] fminunc为中型优化算法的步长一维搜索提供了两种算法,由options中参数LineSearchType控制:

LineSearchType=’quadcubic’(缺省值),混合的二次和三                                    次多项式插值;

LineSearchType=’cubicpoly’,三次多项式插

   使用fminunc和 fminsearch可能会得到局部最优解.

求解某一最小值问题用不同方法得到的结果:

 

非线性规划

1、 线性规划:

标准型:

 

命令:[1] x=linprog(c,A,b,Aeq,beq, VLB,VUB)

      [2] x=linprog(c,A,b,Aeq,beq, VLB,VUB, X0)

注意:[1] 若没有等式约束, 则令Aeq=[ ], beq=[ ].

[2] 其中X0表示初始点

[3]命令:[x,fval]=linprog(…)返回最优解x及x处的目标函数值fval.

 

2、 二次规划

 

  用MATLAB软件求解,其输入格式如下:

   1.      x=quadprog(H,C,A,b);

   2.      x=quadprog(H,C,A,b,Aeq,beq);

   3.      x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB);

   4.      x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X0);

   5.      x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X0,options);

   6.      [x,fval]=quaprog(...);

   7.      [x,fval,exitflag]=quaprog(...);

   8.      [x,fval,exitflag,output]=quaprog(...);

 

3、 一般非线性规划

标准型为:

   min F(X)

            s.t AX<=b       G(X)

            Ceq(X)=0    VLB X VUB

其中X为n维变元向量,G(X)与Ceq(X)均为非线性函数组成的向量,其它变量的含义与线性规划、二次规划中相同.用Matlab求解上述问题,基本步骤分三步:

1. 首先建立M文件fun.m,定义目标函数F(X):

function f=fun(X);

f=F(X);

2.若约束条件中有非线性约束:G(X) 或Ceq(X)=0,则建立M文件nonlcon.m定义函数G(X)与Ceq(X):

function [G,Ceq]=nonlcon(X)

G=...

Ceq=...

3. 建立主程序.非线性规划求解的函数是fmincon,命令的基本格式如下:

 (1) x=fmincon(‘fun’,X0,A,b)

 (2) x=fmincon(‘fun’,X0,A,b,Aeq,beq)

 (3) x=fmincon(‘fun’,X0,A,b, Aeq,beq,VLB,VUB)

 (4) x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’)

(5) x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’,options)  

 (6) [x,fval]= fmincon(...)

 (7) [x,fval,exitflag]= fmincon(...)

 (8) [x,fval,exitflag,output]= fmincon(...)

注意:

[1] fmincon函数提供了大型优化算法和中型优化算法。默认时,若在fun函数中提供了梯度(options参数的GradObj设置为’on’),并且只有上下界存在或只有等式约束,fmincon函数将选择大型算法。当既有等式约束又有梯度约束时,使用中型算法。

[2] fmincon函数的中型算法使用的是序列二次规划法。在每一步迭代中求解二次规划子问题,并用BFGS法更新拉格朗日Hessian矩阵。

[3] fmincon函数可能会给出局部最优解,这与初值X0的选取有关。


原创粉丝点击