最速下降法和共轭阶梯法
一、实验目的
二、实验原理
最速下降法
基于这样的观察:如果实值函数
么函数
因而,如果
在点 处可微且有定义,那 下降最快。 在 点沿着梯度相反的方向
对于 γ > 0 为一个够小数值时成立,那么
。
出考虑到这一点,我们可以从函数 F 的局部极小值的初始估计
发,并考虑如下序列
使得
因此可得到
如果顺利的话序列
可以改变。 收敛到期望的极值。注意每次迭代步长 γ
三、上侧的图片示例了这一过程,这里假设 F 定义在平面上,并且函数图像是一个碗形。蓝色的曲线是等高线(水平集),即函数 F 为常数的集合构成的曲线。红色的箭头指向该点梯度的反方向。(一点处的梯度方向与通过该点的等高线垂直)。沿着梯度下降方向,将最终到达碗底,即函数 F 值最小的点。
共轭梯度法
是求解特定线性系统的数值解的方法,其中那些矩阵为对称和正定。共轭梯度法是一个迭代方法,所以它适用于稀疏矩阵系统,因为这些系统对于象乔莱斯基分解这样的直接方法太大了。这种系统在数值求解偏微分方程时相当常见。
共轭梯度法也可以用于求解无约束的最优化问题。
双共轭梯度法提供了一种处理非对称矩阵情况的推广。
设我们要求解下列线性系统
Ax = b,,
其中n-×-n矩阵A是对称的(也即,AT = A),正定的(也即,xTAx >
0对于所有非0向量x属于Rn),并且是实系数的。
将系统的唯一解记作x*。
四、实验内容
实验步骤:
1、根据最速下降法和共轭梯度法的原理编程
2、设置迭代次数n
3、取得er的不同,研究对收敛的影响
4、设置tx把每步的x的用plot()函数画出图像,研究对收敛的影响
输出结果
最速下降法
(1)取er=10^(-6)时,算出x的结果及迭代次数n x =2.0000 16.0000
-8.6667
n=12
收敛性
可以看出收敛比较好
(2)取er=10^(-13)时,算出x的结果及迭代次数n x = 2.0000 16.0000 -8.6667
n=21
收敛性
(3)取er=10^(-20)时,算出x的结果及迭代次数n x = 2.0000 16.0000 -8.6667
n=27
收敛性
共轭梯度法
(1)取er=10^(-6)时,算出x的结果及迭代次数n x = 2.0000 16.0000 -8.6667 n=3
收敛性
(2)取er=10^(-20)时,算出x的结果及迭代次数n x = 2.0000 16.0000 -8.6667 n=4
收敛性
(3)取er=10^(-30)时,算出x的结果及迭代次数n x = 2.0000 16.0000 -8.6667
n=4
收敛性
数据分析(比较两种算法的优势)
根据实验结果可以知道,在相同的精度下,最速下降法的迭代次数要比共轭梯度法的迭代次数要多,而但是它们算出来的结果是一样的,另外从收敛性行可以看出两者都是线性收敛,但总体来说共轭梯度法要比最深下降法要好。
四、实验心得
本次实验在掌握好原理的同时,我应用了n的迭代次数来比较它们的优劣,也通过改变精度来研究它们的收敛,还利用了画图的直观比较收敛性。这都是对我的一直能力的培养。让我感觉到matlab的强大。
五、实验代码
最速下降法
Fastdown文件
function [x,tx,n]= fastdown(A,b,x0,er)
x=x0;
n=0;
tol=1;
tx = x0;
while(tol>er)
r = b-A*x0;
d = dot(r,r)/dot(A*r,r);
x = x0+d*r;
tol = norm(x-x0);
x0 = x;
tx = [tx x0];
n = n + 1;
end
Top文件
A=[2 1 0;1 2 0;0 0 3];
b=[20 34 -26]';
x0=[1 3 4]';
er=10^(-20);
[x,tx,n]= fastdown(A,b,x0,er)
共轭梯度法
Conjgrad文件
function [x,n,tx]=conjgrad(A,b,x,er) r=b-A*x;
p=r;
rsold=r'*r;
tx=x;
n=1;
for i=1:size(A)
Ap=A*p;
alpha=rsold/(p'*Ap); x=x+alpha*p;
tx=[tx x];
n=n+1;
r=r-alpha*Ap;
rsnew=r'*r;
if sqrt(rsnew)<er
break;
end
p=r+rsnew/rsold*p;
rsold=rsnew;
end
end
Top文件
A=[2 1 0;1 2 0;0 0 3];
b=[20 34 -26]';
x0=[1 3 4]';
er=10^(-45);
[x,n,tx]=conjgrad(A,b,x0,er)
六、如何使用程序
最速下降法
在matlab打开最速下降法文件中的top.m 输入top
然后回车
输入plot(tx')
然后回车
再top修改er=10^(-6),10^(-13),10^(-20),得出结果
共轭梯度法
在matlab打开共轭梯度法文件中的top.m 输入top
然后回车
输入plot(tx')
然后回车
再top修改er=10^(-6),10^(-20),10^(-30),得出结果
本文档为【最速下降法和共轭阶梯法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。