MATLAB_第五节(优化工具箱)-大规模算法
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0.0128163 1.32542
4
5
21
26
1.73538e-008 0.0397925
0.000196
1
1.13169e-018 4.55544e-005 2.76e-009 1
Opt来自百度文库mization terminated successfully: Relative function value changing by less than OPTIONS.TolFun
J = C + D + E; End
步骤2:调用求解程序
xstart = -ones(1000,1);
fun = @nlsf1;
options =optimset('Display','iter','LargeScale','on','Jacobian','on'); [x,fval,exitflag,output] = fsolve(fun,xstart,options);
if nargout > 1 %如果 nargout > 1计算Jacobian矩阵 d = -4*x + 3*ones(n,1); D = sparse(1:n,1:n,d,n,n); c = -2*ones(n-1,1); C = sparse(1:n-1,2:n,c,n,n);
e = -ones(n-1,1); E = sparse(2:n,1:n-1,e,n,n);
问题2:同问题1
Matlab工具箱求解过程: 步骤1:同问题1 步骤2:
使用三对角线的预处理矩阵,设置PrecondBandWidth为1。
xstart = -ones(1000,1); fun = @nlsf1; options=optimset('Display','iter','Jacobian','on', 'LargeScale','on','PrecondBandWidth',1);
2 1
F(i ) 3x i 2x i2 x i 1 2x i 1 1
2 F( n ) 3 x n 2 x n x n 1 1
Matlab工具箱求解过程:
使用fsolve中的大规模算法求解F(x) = 0。 步骤1:写一个目标函数和雅可比矩阵的M文件nlsf1.m。
[x,fval,exitflag,output] = fsolve(fun,xstart,options);
Norm of First-order CGIteration Func-count 1 2 3 6 11 16 f(x) 1011 15.9018 step optimality Iterations 1 7.92421 19 1.89 0.0746 0 1 1
总 结
函数nlsf1计算了稀疏雅可比矩阵J和函数F(设置
Jacobian选项为 'on')。如果没有雅可比矩阵,
fsolve, lsqnonlin, lsqcurvefit函数的缺省方法为使用
有限差分方法近似计算雅可比矩阵。为使有限差
分方法尽量有效,应该提供雅可比矩阵的稀疏类 型(设置JacobPattern为'on')。
问题1'JacobPattern'设为Jstr, 调用雅可比矩阵的
稀疏类型Jstr。
问题2无问题1设置,使用缺省方法有限差分方法 近似计算雅可比矩阵。 问题3设置PrecondBandWidth为 Inf,使用sparse direct linear solver代替preconditioned conjugate gradient iteration。
输出结果:
Norm of Iteration Func-count f(x) step First-order optimality CG-iterations
0
1 2
1
2 3
1011
16.1942 0.0228027
19
7.91898 1.33142 2.35 0.291 3 3
3
4 5
4
5 6
统。选项中PrecondBandWidth的缺省值为0, PrecondBandWidth定义了预处理矩阵的带宽, 带宽为0意味着使用对角矩阵。 由first-order optimality值可见,已发生快速的 线性搜索。 每次迭代所需的共轭梯度迭代数(CG)很低,至多 为5, 意味着本线性系统不是很难解决。
步骤2:调用方程组求解程序
xstart = -ones(1000,1);
fun = @nlsf1a; load nlsdat1 %得到雅可比稀疏矩阵类型Jstr
options=optimset('Display','iter','JacobPattern',Js tr, 'LargeScale','on','PrecondBandWidth',1); [x,fval,exitflag,output] = fsolve(fun,xstart,options);
function [F,J] = nlsf1(x);
n = length(x); % 计算向量函数的长度
F = zeros(n,1);
i = 2:(n-1); F(i) = (3-2*x(i)).*x(i)-x(i-1)-2*x(i+1)1+ 1; F(n) = (3-2*x(n)).*x(n)-x(n-1) + 1; F(1) = (3-2*x(1)).*x(1)-2*x(2) + 1;
输出结果分析:
Fsolve的缺省方法是中等规模算法,必须设置 ‘LargeScale’为‘on’。 Display 选项设为 ‘iter’ 使每次迭代显示输出结果。 设置Jacobian 为 'on', 使fsolve使用 nlsf1.m中的雅
可比矩阵。
每次迭代使用预处理的共轭梯度方法解决线性系
0.000103359
0.0433329
0.0201
0.000946
4
4 5
7.3792e-007 0.0022606
4.02299e-010 0.000268381 4.12e-005
Optimization terminated: relative function value changing by less than OPTIONS.TolFun.
最优化工具箱大规模算法介绍
使用大规模算法有一些条件。如,函数 fmincon,当可行性 区域受非线性等式或不等式约 束或同时受上下界约束和等式约束时,不能使用大 规模算法。
带有雅可比矩阵的非线性方程组
问题1: 求雅可比矩阵为稀疏矩阵的非线性方程组的解,
n为1000。
F(1) 3x 1 2x 2x 2 1
[x,fval,exitflag,output] = fsolve(fun,xstart,options);
输出结果:
Norm of First-order Iteration Func-count f(x) step optimality CG-iterations 0 1 1011 19 1 2 16.0839 7.92496 1.92 1 2 3 0.0458181 1.3279 0.579 1 3 4 0.000101184 0.0631898 0.0203 2 4 5 3.16615e-007 0.00273698 0.00079 2 5 6 9.72481e-010 0.00018111 5.82e-005 2 Optimization terminated: relative function value changing by less than OPTIONS.TolFun.
尽管迭代数相同,PCG迭代数(CG-iterations)已经降低, 表明每次迭代计算量减少。 fsolve应用于大规模算法,输出结果的标题为: Norm of First-order Iteration Func-count f(x) Iteration——迭代数; Func-count——函数计算的次数; f(x)——目前函数值的平方和; Norm of step——当前步长的规范化; First-order optimality——一阶最优化的度量; step optimality
问题2:同问题1 Matlab工具箱求解过程:
步骤1:同问题1
步骤2:xstart = -ones(1000,1);
fun = @nlsf1a;
options=optimset('Display','iter', 'LargeScale','on','PrecondBandWidth',1); [x,fval,exitflag,output] = fsolve(fun,xstart,options);
CG-iterations
CG-iterations——目前迭代中,PCG采用的迭代数。
带有雅可比稀疏矩阵类型的非线性方程组
问题1:
求雅可比矩阵为稀疏矩阵的非线性方程组的解, n为1000C。
2 F(1) 3x 1 2x 1 2x 2 1
F(i ) 3x i 2x i2 x i 1 2x i 1 1
提供雅可比矩阵的稀疏类型,可显著减少大规模问 题计算有限差分的时间。如果即不提供雅可比矩阵 的稀疏类型也不提供雅可比矩阵的计算程序,大多
数计算机对大规模问题有可能溢出或函数计算次数
明显增加(30次增加到6006次)。
2 F( n ) 3 x n 2 x n x n 1 1
Matlab工具箱求解过程:
步骤1:写一计算目标函数值的M文件nlsf1a.m。 function F = nlsf1a(x); n = length(x); F = zeros(n,1);
i = 2:(n-1);
F(i) = (3-2*x(i)).*x(i)-x(i-1)-2*x(i+1) + 1; F(n) = (3-2*x(n)).*x(n)-x(n-1) + 1; F(1) = (3-2*x(1)).*x(1)-2*x(2) + 1;
问题3:同问题1
Matlab工具箱求解过程:
步骤1:同问题1
步骤2:xstart = -ones(1000,1);
fun = @nlsf1a; load nlsdat1 %得到Jstr
options=optimset('Display','iter','JacobPattern',Jstr, 'LargeScale','on','PrecondBandWidth',inf);
运行结果:
Iteration Func-count f(x) step
Norm of optimality
First-order CG-iterations
1 6 1011 1 19 0 2 11 16.0839 7.92496 1.92 1 3 16 0.0458181 1.3279 0.579 1 4 21 0.000101184 0.0631898 0.0203 2 5 26 3.16615e-007 0.00273698 0.00079 2 6 31 9.72482e-010 0.00018111 5.82e-005 2 Optimization terminated successfully: Relative function value changing by less than OPTIONS.TolFun
Norm of First-order Iteration Func-count f(x) step optimality CG-iterations 0 1001 1011 19 1 2002 16.0839 7.92496 1.92 1 2 3003 0.0458181 1.3279 0.579 1 3 4004 0.000101184 0.0631897 0.0203 2 4 5005 3.16615e-007 0.00273698 0.00079 2 5 6006 9.72482e-010 0.00018111 5.82e-005 2 Optimization terminated successfully: Relative function value changing by less than OPTIONS.TolFun