当前位置:文档之家› 数学建模优化实验课件

数学建模优化实验课件

1 用MATLAB优化工具箱解无约束优化问题用MATLAB优化工具包求解无约束非线性规划时必须先化为如下形式:Min f(x) (NLP)求解程序名为fminunc,其最简单的调用格式为:x = fminuncn('fun',x0)其最复杂的调用格式为:[x,fval,exitflag,output,grad,hessian] =fminunc(@f,x0,options,P1,P2,...)输出参数输入参数注意事项1.4.1 程序fminunc输出变量其中输出变量的含义为:1) x :最优解2) fval :最优解处的函数值3) exitflag :程序结束时的状态指示:· >0:收敛· 0:函数调用次数或迭代次数达到最大值(该值在options中指定)· <0:不收敛4) Output: 包含以下数据的一个结构变量· funcCount 函数调用次数· iterations 实际迭代次数· cgiterations 实际PCG迭代次数(大规模计算用)· algorithm 实际使用的算法· stepsize 最后迭代步长(中等规模计算用)5) grad: 目标函数梯度6) hessian: 目标函数的hessian矩阵1.4.2 程序fminunc输入参数其中输入变量的含义为:· x0为初始解(缺省时程序自动取x0=0)· fun.m给出目标函数,当GradObj='on时必须给出其梯度,当Hessian='on 时还必须给出其Jacobi矩阵,一般形式为· function [f,g,H] = fun(x)· f = ... % objective function value· if nargout > 1· g = ... % gradient of the function· if nargout > 2· H = ... % Hessian of the function· end· options:包含算法控制参数的结构设定(或显示)控制参数的命令为Optimset,有以下一些用法:Optimset //显示控制参数optimset optfun //显示程序'optfun的控制参数opt=optimset //控制参数设为[](即缺省值opt=optimset(optfun)// 设定为程序'optfun的控制参数缺省值Opt=optimset('par1',val1,'par2',val2,...)Opt=optimset(oldopts,'par1',val1,...)opt=optimset(oldopts,newopts)可以设定的参数比较多,对fminunc,常用的有以下一些参数:Diagnostics 是否显示诊断信息( 'on' 或'off)Display 显示信息的级别('off' , 'iter' , 'final,'notify)LargeScale 是否采用大规模算法( 'on' 或'off)缺省值为onMaxIter 最大迭代次数TolFun 函数计算的误差限TolX 决策变量的误差限GradObj 目标函数是否采用分析梯度('on' ,'off)Hessian 目标函数是否采用分析Hess矩阵('on' ,'off)MaxFunEvals 目标函数最大调用次数HessUpdate 拟牛顿法修改方法(’bfgs’(缺省值),’dfp’,’gillmurray’,’steepdesc’)LineSearchType 线搜索方法(‘cubicpoly’,’quadcubic’(缺省值))1.4.3 注意事项· fminunc中输出变量、输入参数不一定写全,可以缺省。

采用缺省值效果一般会很好。

· 当中间某个输入参数缺省时,需用[]占据其位置。

· 当函数高度非线性或严重不连续时,用程序fminsearch代替fminunc。

2用MATLAB优化工具箱解非线性最小二乘拟合问题l 非线性最小二乘问题mins.t. v1x v2求解程序名为lsqnonlin,其最简单的调用格式为:x=lsqnonlin(@F,x0, v1,v2)其最复杂的调用格式为:[x,norm,res,ef,out,lam,jac] = lsqnonlin(@F,x0,v1,v2,opt,P1,P2, ... ) l 非线性拟合问题mins.t. v1x v2求解程序名为lsqcurvefit,其最简单的调用格式为:x=lsqcurvefit(@F, x0,t,y,v1,v2)其最复杂的调用格式为:[x,norm,res,ef,out,lam,jac] =lsqcurvefit(@F,x0,t,y,v1,v2,opt,P1,P2,...)输出参数输入参数注意事项2.3.1 程序lsqnonlin和lsqcurvefit的输出参数其中输出变量的含义为:1) x :最优解2) norm :误差的平方和3)res: 误差向量4) ef :程序结束时的状态指示:· >0:收敛· 0:函数调用次数或迭代次数达到最大值(该值在options中指定)· <0:不收敛5) out: 包含以下数据的一个结构变量· funcCount 函数调用次数· iterations 实际迭代次数· cgiterations 实际PCG迭代次数(大规模计算用)· algorithm 实际使用的算法· stepsize 最后迭代步长(中等规模计算用)· firstorderopt 一阶最优条件满足的情况(大规模计算用)6) lam:上下界所对应的Lagrange乘子7) jac:结果(x点)处的雅可比矩阵2.3.2程序lsqnonlin和lsqcurvefit的输入参数其中输入变量的含义为:· x0为初始解(缺省时程序自动取x0=0)· F给出目标函数的M文件,当Jacobian='on时必须给出其Jacobi矩阵,一般形式为:function [F,J] = Fun(x)(对程序lsqcurvefit为Fun(x,t))F = ... % objective function values at xif nargout > 1 % two output argumentsJ = ... % Jacobian of the function evaluated at xend· t,y: 拟合数据· v1,v2: 上下界· options:包含算法控制参数的结构设定(或显示)控制参数的命令为Optimset,有以下一些用法:Optimset //显示控制参数optimset optfun //显示程序'optfun的控制参数opt=optimset //控制参数设为[](即缺省值opt=optimset(optfun)// 设定为程序'optfun的控制参数缺省值Opt=optimset('par1',val1,'par2',val2,...)Opt=optimset(oldopts,'par1',val1,...)opt=optimset(oldopts,newopts)可以设定的参数比较多,对lsqnonlin和lsqcurvefit,常用的有以下一些参数:Diagnostics 是否显示诊断信息( 'on' 或'off)Display 显示信息的级别('off' , 'iter' , 'final,'notify)LargeScale 是否采用大规模算法( 'on' 或'off)缺省值为onMaxIter 最大迭代次数TolFun 函数计算的误差限TolX 决策变量的误差限Jacobian 目标函数是否采用分析Jacobi矩阵('on' ,'off)MaxFunEvals 目标函数最大调用次数LevenbergMarquardt 搜索方向选用LM法(‘on’), GN法(‘off’,缺省值) LineSearchType 线搜索方法(‘cubicpoly’,’quadcubic’(缺省值))2.3.3 注意事项· fminunc中输出变量、输入参数不一定写全,可以缺省。

· 当中间某个输入参数缺省时,需用[]占据其位置。

3 用MATLAB优化工具包解线性规划用MATLAB优化工具包求解线性规划时必须先化为如下形式:(LP)求解程序名为linprog,其最简单的调用格式为:x = linprog(c,A1,b1) (用于不含有等式约束和上下解约束的问题)其最复杂的调用格式为:[x,fval,exitflag,output,lambda] =linprog(c,A1,b1,A2,b2,v1,v2,x0,options)4 用MATLAB优化工具包解二次规划用MATLAB优化工具包求解二次规划时必须先化为如下形式:(QP)求解程序名为quadprog,其最简单的调用格式为:x = quadprog(H,c,A1,b1) (用于不含有等式约束和上下解约束的问题)其最复杂的调用格式为:[x,fval,exitflag,output,lambda] =quadprog(H,c,A1,b1,A2,b2,v1,v2,x0,options)5插值方法的Matlab实现a.对于Lagrange插值必须自编程序b.低次插值的Matlab命令分段线性插值:y=inter1(x0, y0, x),其中输入离散数据x0、y0、x,输出对应x的插值y。

三次样条插值:y=inter1(x0, y0, 'spline')或y=spline(x0, y0, x)其中,x0、y0、x和y的意义同上。

6数值积分的Matlab实现trapz(x)用梯形公式计算(h=1),输入数组x为各区间端点的函数值。

相关主题