数学建模优化实验课件
qq网名大全男生-剪纸龙
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)缺省值为on
MaxIter 最大迭代次数
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 非线性最小二乘问题
min
s.t.
v
1
xv
2
求解程序名为lsqnonlin,其最简单的调用格式为:
x=lsqnonlin(@F,x0, v1,v2)
其最复杂的调用格式为:
[x,norm,res,ef,out,lam,jac] =
lsqnonlin(@F,x0,v1,v2,opt,P1,P2, ... )
l
非线性拟合问题
min
s.t.
v
1
xv
2
求解程序名为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 x
if nargout > 1
% two output arguments
J = ... % Jacobian of
the function evaluated at x
end
· 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)缺省值为on
MaxIter 最大迭代次数
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为各区间端点的函数值。
trapz(x,y)
用梯形公式计算,输入x,y为同长度的数组,输出y对x的积分(步长可不
相等)。
quad('fun',a,b,tol)
用自适应辛普森公式计算,输入被积函数
fun可以自定义如exp(-x.^2),
也可以是fun.m命名的函数M文件,积分区间(a,b
),绝对误差tol,输出积分
值。
quadl('fun',a,b,tol)
用自适应的Gauss-Lobatto公式计算,其余同上。