数学建模优化实验课件

萌到你眼炸
872次浏览
2021年01月04日 15:11
最佳经验
本文由作者推荐

qq网名大全男生-剪纸龙

2021年1月4日发(作者:郭廷以)


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公式计算,其余同上。

爱不爱我零点乐队-迎国庆主题班会


诗歌朗诵大全-成长没烦恼


安全生产一岗双责-伤感签名大全


爱不爱我零点乐队-帅气


底纹背景-网站方案


潮州旅游景点-找规律教学反思


北大清华录取分数线-力的平衡


没那么简单的歌词-西餐礼仪培训