当前位置:文档之家› 华北电力大学-算法实验报告

华北电力大学-算法实验报告


熟悉 Matlab 的 rand() ,abs() ,eig()等函数,并采用这些函数随机生成用于 测试的阶正定矩阵 A 及 n 维列向量 b。
3)
令 n=1000,随机生成问题算例,采用 Matlab 计算所生成的问题的条件数,并采用 最速下降法求解该问题, 观察迭代过程中目标值变化趋势, 残差的 2-范数变化趋势。
-3
华 北 电 力 大 学 实 验 报 告
实验二、凸二次规划的共轭梯度算法
一、 实验目的 1、 2、 3、 二、 初步掌握在 PC 机上建立、汇编和运行 Matlab 汇编语言程序的过程。 通过对两个验证性实验的阅读、调试,掌握不同算法的程序设计方法。 完成程序设计题,加深对最优化算法的理解,了解简单程序设计方法。
实验条件 一台计算机
三、
实验内容与步骤
1) 2)
1 T T 用 Matalab 编写梯度下降算法求解 min x Ax-b x。 2
令 n=1000,随机生成问题算例,采用 Matlab 计算所生成的问题的条件数,并采用 最速下降法和共轭梯度法求解该算例,观察残差的 2-范数变化趋势。对两种算法的 收敛效率进行比较并给出结论。
-3
华 北 电 力 大 学 实 验 报 告
设反了,其次在实验过程中也出现了忘记加“*”导致实验不能继续进行的情况,最后由于 未能对之前的实验代码清除干净,导致程序无法执行,或者得不到想要的实验结果,这些在 实验中都是应该注意的。
பைடு நூலகம்
第6页
4) 5)
设计实验,观察条件数对收敛效率的影响。
参考程序如下: n=1000 B=rand(n)*10-5 C=B+B' [V,D]=eig(C) A=V*abs(D)*V' b=rand(n,1)*20-10
第2页
华 北 电 力 大 学 实 验 报 告
x=zeros(n,1) r=A*x-b i=1 while norm(r)>=0.001 d=-r alpha=(r'*r)/(r'*A*r) x=x+alpha*d r=A*x-b y(i)=norm(r) i=i+1 end semilogy(y) k=max(eig(A))/min(eig(A)) 四、实验结论与分析 实验结果:在调试运行后, 将精度设计到 10 采用最速下降法所进行的迭代步数一共是 i=5399 步, 生成的残差的 2-范数变化趋势见下一页附表呈现下降状,条件数 k =1.1173e+03。 分析:本次实验的重要之处在于能够预先设定好相应的程序,并对程序的运行进行相应的调试。 本次实验中,有以下几点看法: (1)梯度下降法每次都选择的是负梯度方向,并且每步长值选的是能 达到最优解的步长值, 所以通过实验图像可以看出每一次的迭代都是向最优解的靠近, 几乎达到坡度 很大的直线下降的趋势。 (2)通过对不同条件数的比较,条件数越接近 1,则最速下降法收敛速度越 快,本次实验的条件数是 k =1.1173e+03,条件数比较大,所以收敛速度很慢,收敛到规定精度以内, 用了五千多步,条件数更大的时候有时需要将近一万多步。最速下降法对条件数的依赖很大。 (3)当 初始解离最优解非常远时,收敛速度非常快,用了几步就到达 100 以内,但是在最优解附近,收敛速 度相当慢,在最优解附近时,在使用最速下降法时,为了增加效率应该尽量的减小精度。 五、实验心得 在本次实验中,学习了 Matlab 的基本操作,通过实验的设计对最速下降法有了更深 刻的理解。 第3页
一、 实验目的 1、 2、 3、 二、 初步掌握在 PC 机上建立、汇编和运行 Matlab 汇编语言程序的过程。 通过对两个验证性实验的阅读、调试,掌握不同算法的程序设计方法。 完成程序设计题,加深对最优化算法的理解,了解简单程序设计方法。
实验条件 一台计算机
三、
实验内容与步骤
1) 2)
1 T T 用 Matalab 编写梯度下降算法求解 min x Ax-b x。 2
华北电力大学
实 验 报 告
|
实验名称 实验一
凸二次规划的梯度下降算法
实验二 凸二次规划的共轭梯度算法
课程名称
管理运筹学
|
|
专业班级:研经管 1627 学 号:1162206003
学生姓名:钱进 成 绩:
指导教师:路程
实验日期:2016-12-23
华 北 电 力 大 学 实 验 报 告
实验一、凸二次规划的梯度下降算法
3)
设计实验, 生成具有不同条件数的问题算例, 观察条件数对共轭梯度算法收敛效率 的影响,并与之前最速下降法的实验结果对比。给出分析。
4)
参考程序如下: n=1000 B=rand(n)*10-5 C=B+B' [V,D]=eig(C) A=V*abs(D)*V' b=rand(n,1)*20-10 x=zeros(n,1) 第4页
华 北 电 力 大 学 实 验 报 告
r=A*x-b d=-r i=1 while norm(r)>=0.001 alpha=-(r'*d)/(d'*A*d) x=x+alpha*d r=A*x-b beta=(r'*A*d)/(d'*A*d) d=-r+beta*d y(i)=norm(r) i=i+1 end plot(y) k=max(eig(A))/min(eig(A)) 四、 实验结论与分析 实验结论: 在调试运行后, 将精度设计到 10-3 采用共轭梯度法所进行的迭代步数一共是 i=140 步,生成的残差的 2-范数变化趋势见下一页附表呈现锯齿下降状,条件数 k =1.3082e+03。 分析: (1)从条件数的比价来看,共轭梯度法和最速下降法的条件数几乎相当,但是收 敛效率却有明显的差别, 共轭梯度法达到 10 的精度仅仅用了 140 步, 效率很高, 而同样的问题, 最速下降法则要大概五千多步。 (2) 共轭梯度法对条件数的依赖程度比较低, 即使条件数比较大, 共轭梯度的收敛效率也很可观,相对来说梯度下降法对条件数的要求更高。 (2)通过生成的残差 2-范数图像可以看出,共轭梯度法是波动中下降,对此问题也进行了认真的思考,最后了解到条 件数如果很大,即最大和最小特征值相差很大,残差会在一定范围内波动,因此会出现波动下降 的结果,如果将条件数限定的比较小,则可以看到该下降法的直线下降趋势。 五、 实验心得 在实验过程中,刚开始一度出现向上的图像,后来通过对程序的查找,发现迭代方向 第5页
相关主题