北航生医数值分析学习心得7

第九章:一维搜索

这章其实和上一章有异曲同工之妙,找极值点在小范围内其实就是导函数的零点。进退算法通过值的变大变小找区间这种思想在第八章实际上就是找到fa<0,fb>0,确定[a,b]区间。区间消去法这边提到的黄金分割法其实还挺神奇的,事实上你算好第一次的x1,x2后,之后的每一次都会满足新的x1+x2=a+b所以后续都是加减法,不用再乘什么0.618了(不过还是注意精度问题,毕竟每次都有舍入误差了)。这种想法你说在数值求根时可以用吗,我觉得也是可以的,同样那边的二分法这里也是可以用的。当然这边有种独特的方法叫做抛物线法,确定好三个点时直接插值个抛物线然后把抛物线的极小值点做新的区间点如此往复。

第十章:无约束非线性问题的求解

本章和上一章的区别在于把问题往多维空间延申了,大部分解析思想还是差不多的,就是导数可能都是矩阵表示了(不要看不懂了),还有也就是因为多维延申每次求导数对计算机要求太高,会牺牲一点速度采用一些算法。

在最速下降法这里有些同学可能会有点懵这些椭圆是什么,为什么这么走(我说我自己)。怎么说呢,最速下降法每次移动的方向(导数)都是这个瞬时最快的方向(但只是局部的),然后在这个方向上移动试图寻找到最小值。如果是一维的话那么无论怎样都可以一步到位,因为我们移动的t的维度就可以满足横坐标的改变了,此时求得的最小值也就是全局的最小值。但是如果自变量有两个那就未必了,你的t只有一个维度但是自变量却有两个维度。举个简单的例子,假设某个函数的极小值点是(0,0),我们的初始位置是(5,4),用求导法知道(5,4)这个点沿着(1,1)这个方向下降最快,我们沿这个方向能找到一个最小值点,但是很显然我们最终只能找到很接近的(1,0)点或者(0,-1)点,但是是永远到不了(0,0)点的(等于说我们知找到这个截面上最小值,一个截面就是一维情况了,这时也是肯定能找到的)。但如果我们沿着(1,0.8)下降虽然看起来刚开始可能慢了,但这个方向却是一次可以找到最小值的方向。假设这时最小值点是(1,0),再在这个局部找到(-1,1)这个方向,也很显然我们还是到不了(0,0),也许这次是(1/2,-1/2),这也是第一个点,刚开始下降比较快,后面可能会越来越慢。不过如果我们换一个点(15,10),这时候假设刚好求得导数方向是(3,2),那这下我们反而一次可以到位了,这是第二个点,搜索的次数也可能和初始的起点有关。另外,我们每次都是按照最优的想法去的,再用前面的例子,第一次实际上我们最后取了当时的最优步数4,这时每个的最优步数都是需要计算的,我们也可以固定步数为2,则这样我们从(5,4)这个点到(3,2),如果这时候梯度是(1.5,1)(当然实际可能性几乎没有),那么我们第二次就到了,这也说明局部最优未必全局最优。

回到最优步数的那个方法最速下降法,有个结论是相邻的两个搜索方向是垂直的(空间垂直),这个先丢一个证明吧

直观理解就是如果每一次搜索方向的终点都已经是这个方向的最小值的,如果两次搜索不垂直,那么下一次搜索路线一定可以分解为垂直前一次的和沿着前一次的,这时就会有沿着前一次搜索方向的分量了,但是我们刚刚说了前一次搜索已经是到最小值的,所以沿着前一次的搜索分量为0,所以两次搜索路线是垂直的。

牛顿法看着挺复杂,还有啥Hesse矩阵,不过如果对比着一维的牛顿法对比实际上是一样的(不过因为是求最小值所以实际上是导数的牛顿法和一维一致x^{k+1}=x^{k}-\frac{f(x)}{f^{\prime}(x)} \rightarrow x^{k+1}=x^{k}-H\left(x^{k}\right)^{-1} g\left(x^{k}\right))。虽然这边有转置,有逆什么的,计算归计算,但是理解起来就是平方的表示以及在分母的表示罢了,对照着就每那么难理解了。

但是这个和最速下降比没有t的参数,其实算一种固定步长1,如果我们考虑t,算出最优步长,就有了沿牛顿方向的一维搜索最优步长修正牛顿法。考虑到最速下降法开始时效果显著,而快到最小值点附近很慢,所以有了结合最速下降法和牛顿法的Marquart法。

我们最后再看看共轭方向法(此处参考CSDN,作者:小小何先生无约束最优化(二) 共轭方向法与共轭梯度法_小小何先生的博客-CSDN博客_共轭方向法) 之前文章最速下降法、Newton法、修正Newton法介绍的最速下降法存在锯齿现象,Newton法需要计算目标函数的二阶导数。接下来介绍的共轭方向法是介于最速下降法和Newton法之间的一种方法,它克服了最速下降法的锯齿现象,从而提高了收敛速度;它的迭代公式也比较简单,不必计算目标函数的二阶导数,与Newton法相比,减少了计算量和存储量。它是比较实用而有效的最优化方法。

  我们先将其在正定二次函数f(x)=\frac{1}{2} x^{T} Q x+b^{T} x+c上研究,然后再把算法用到更一般的目标函数上。首先考虑二维的情形。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是利用Python编写的程序,实现了上述要求: ``` import matplotlib.pyplot as plt # 18级成绩分布 labels18 = ['优秀', '良好', '中等', '及格', '不及格'] sizes18 = [3, 18, 20, 12, 7] # 19级成绩分布 labels19 = ['优秀', '良好', '中等', '及格', '不及格'] sizes19 = [4, 20, 21, 10, 4] # 绘制18级成绩分布饼图 plt.figure(figsize=(6, 6)) plt.pie(sizes18, labels=labels18, autopct='%1.1f%%') plt.title('18级该课程成绩分布百分比') plt.show() # 绘制19级成绩分布饼图 plt.figure(figsize=(6, 6)) plt.pie(sizes19, labels=labels19, autopct='%1.1f%%') plt.title('19级该课程成绩分布百分比') plt.show() # 绘制两个年级的成绩分布百分比对比直方图 x = ['18级优秀', '18级良好', '18级中等', '18级及格', '18级不及格', '19级优秀', '19级良好', '19级中等', '19级及格', '19级不及格'] y = sizes18 + sizes19 plt.figure(figsize=(10, 6)) plt.bar(x, y) plt.title('两个年级该课程成绩分布百分比对比') plt.xlabel('成绩分布') plt.ylabel('人数') plt.show() ``` 程序注释如下: 1. 导入 matplotlib.pyplot 库,用于绘制图形。 2. 定义18级成绩分布饼图的标签和比例。 3. 定义19级成绩分布饼图的标签和比例。 4. 绘制18级成绩分布饼图,设置图形大小,使用 plt.pie() 函数绘制饼图,设置标签和自动计算百分比,并设置图形标题,最后展示图形。 5. 绘制19级成绩分布饼图,与上一步类似。 6. 定义两个年级的成绩分布对比直方图的 x 和 y 轴数据。 7. 绘制两个年级的成绩分布对比直方图,设置图形大小,使用 plt.bar() 函数绘制直方图,设置标题、标签和坐标轴,最后展示图形。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值