c语言求三个数最大值_用变化的眼光看最大值和最小值

你好,欢迎来到我的《数学通识50讲》,这一讲我们学习如何用变化的眼光找到最优答案。

今天高等数学最常见的一个应用是对这种现实的问题实现最优化,比如炙手可热的机器学习,其实就是对一个目标函数实现最优化的过程。此外,金融上的结构化投资产品,商业上的博弈论,企业管理中的各种规划,其实也都是不同形式的最优化。

那么什么是最优化?其实它最简单的形态大家都不陌生,就是求一个函数的最大值或最小值。由于这两个问题是对称的,解法类似,因此我们就以求最大值为例来说明。

对于一个有限的集合,求最大值是一件很容易的事情,比如在计算机计算问题中就有很多寻找最大值的算法。所有那些算法的一个核心思想,就是比较大小。如果有一个元素在直接或者间接地和其它的元素对比后,它比谁都多,它就是最大值。

这是一种寻找最大值的思想,但在一个有无限集合的函数中就不大灵了,因为你不可能穷尽所有的可能性。那么怎么办呢?这时我们在中学里就要开始学习解题技巧了。

一般人如何求解最大值?

最著名的解题技巧就是计算抛物线的最大值。比如一个抛物线函数是:y =-x^2+4x,它的最大值是多少?

从直觉我们可以猜出来这个函数的最大值是存在的,因为我们至少有两个理由:

  1. 无论x是一个什么样有限的数,y都不可能是正的无穷大,而是一个有限的数;
  2. 当x趋于正无穷,或者负无穷时,y都是负无穷大。

因此我们猜想这个函数应该是两头小,中间大,而且中间是有最大值存在的,但是真让我们找到那个最大值,又无从下手。

很多人会代入几个数字试一试,比如让x=0,我们知道y 也等于零。如果x=1,那么y=3,增加了一些。如果x再增加到2,y会增加到4,但是再往后,y似乎就要往下走了。那么我们能说y的最大值就是4吗?把这个函数对应的曲线画在坐标上,能看出最大值就是4附近:

7a75b64023ef8f63be57d7d9fca4bff5.png

但是我们前面说了,在数学上我们不能通过测量得到结论,是要证明的。那么怎么证明呢?在中学里,老师会讲这样一个技巧,我把步骤放在文稿中了,大家有兴趣可以看一下:

  1. 我们把y=-x^2+4x重新组织一下,就得到y=-(x-2)^2+4。推导的过程我就省略了。
  2. 在这个式子里,我们知道(x-2)^2只可能大于零,或者等于零,因此乘以-1之后,-(x-2)^2只可能小于零,或者等于零。后面的4是个常数,不影响y的取值。
  3. 于是y的最大值就是当-(x-2)^2=0的时候,这时y=4。

总之,老师教的这个技巧能解决一批同类的抛物线的问题,但是遇到其它的问题,这种技巧还是无能为力。比如要问下面这个函数y=x^3-12x^2+4x+8在0到15之间有没有最大值或者最小值,上面的方法就不灵了。

b9ea4f9daf26beb5b95fdd319375d4cb.png

因此,靠这样掌握了某个技巧考了高分,也不值得沾沾自喜,因为那种经验很难推广用来解决一般性问题。

在伽利略之前,人类其实没有太多的最优化问题要解决。但是到了伽利略和开普勒那个年代,人们就在物理学和天文学中遇到很多最优化问题了,比如计算行星运动的近日点和远日点距离、弹道的距离、望远镜透镜曲率和放大倍数的关系等等。这时就需要系统地解决最优化问题,而不能单靠一些技巧。这个难题就留给了牛顿。

牛顿怎么求解最大值?

牛顿是怎么考虑这个问题的呢?他的伟大之处在于,他不像前人那样,将最优化问题看成是若干数量比较大小的问题,而看成是研究函数动态变化趋势的问题。这一点很重要。

f9cd56106e38b9d333d2b639196a78c5.png

怎么理解牛顿这个思想呢?我们还是从前面那个求抛物线最高点的问题讲起。为了方便起见,我们把关注点放在最高点附近的位置上,我把上面的曲线又放大画了一遍。

我们在前面的课程讲到过,曲线瞬间变化的速率就是那一点切线的斜率,也就是它的导数。为了强化你对这个要点的理解,我特别将抛物线在最高点附近的斜率变化画出来,给你看一下:

a6b89ae19a61788bc7750ce6636fb126.png

在图中,上半部分就是前面说的抛物线,只是我为了让大家把曲线变化的细节看得更清楚,将它的横轴拉长了一倍。图中各种颜色的曲线,是一些点的切线。你可以看出,从左到右,抛物线的变化是由快到慢,到平缓,再到下降。而这些切线也是由陡峭变得平缓,在最高点变成了水平线,然后斜率就往下走了。

如果量化地度量它们,在x=0这个点,切线的斜率,也就是相应点的导数是4。到x=0.5时,斜率或者说导数变成了3,然后变成了2,1,0,-1,-2,等等。因此如果我们把导数函数也画在图中,就是那根直的虚线。

对比抛物线和它的导数(虚的直线),你是否发现了,曲线达到最高点的位置,就是切线变成水平的位置,或者说导数变为0的位置呢?

如果你看到了这一点,恭喜你,说明你的目光很敏锐。那么这种现象是巧合么?不是!如果我们回到最大值的定义,对应导数的定义,就很容易理解这两件事情的一致性了。

最大值的含义是说某个点a的函数值f(a)比周围点的数值都大,因此,如果我们从最大值的点往四周走一点点距离,就会发现那些点的函数值要比它小一点。在二维图上,就是和左右的点比较。

左边的比它小,说明左边的点变化的趋势是向上,导数大于零,右边的也比它小,说明右边的点变化趋势向下,导数小于零。从大于零的数变成小于零的,中间经过导数为零的点,就是最大值所在。

于是,寻找一个函数f(x)的最大值,就变成了一个寻找该函数的导数f’(x)等于零的问题。而后一个过程其实就是解方程,比前一个问题要容易。

上面这种思路,就是牛顿在寻找最大值这件事情上,和前人所不同的地方。他不是直接解决那些很难的问题,而是把比较数大小的问题,变成了寻找函数变化拐点的问题,后一个问题要比前一个好解决。但是,将这两个问题等同起来,需要发明一种工具,叫做导数。

有了导数这个工具,求最大值问题就变成了解方程的问题。这个方法的好处在于,它适用于任何函数。因此,我们不再需要针对每一种特定的函数,寻找一种解题技巧了。这也是为什么微积分是一种很强大的数学工具的原因。

还是没有彻底解决?

当然,我们昨天讲了,一个新的方法出来之后,常常免不了有一些破绽,用导数求最大值的方法也是如此。

比如一个立方函数,f(x) = x^3,它的导数是f’(x) = 3x^2,显然当x=0时,它的导数变为了零。但是x=0这一点显然不是x^3最大值的点,因为我们知道立方函数的最大值最后是趋近于无穷大。

为什么上述方法对于立方函数不管用了呢?我画一个图,大家就清楚了。

在图中你会发现,立方函数一开始上升的斜率很大,然后逐渐变小,并且变为零。但是,在变为零以后,它没有再进一步变小进入负数的区间,而是又逐渐变大了。原因找到了,问题就好补救。

我们只要在找到导数等于零那个点之后,看看它前后的点,是否发生了导数符号从正的到负的反转,如果发生了,它就是最大值的点,否则就不是最大值的点。这样就补救了一个漏洞。

b9951b131453a3783a13f582284b8858.png

用导数求最大值的方法还有其它的漏洞,比如下面这个函数。它有左右两个点,都满足导数等于零的条件,而且也都满足导数从正变成零,再变成负这个条件,但是最大值只能有一个。由于左边的那个点比右边的要高一些,因此左边的是真正的最大值,右边的是假的。

d8ea1b5dd6fe449b2b45f0363206f3e8.png

对于这种情况怎么办?首先,数学家们要更准确地定义什么是最大值。他们把最大值分成了两种,第一种被称为极大值,或者局部最大值,就是说只要一个点的函数值比周围都高就可以了。另一种才是我们原来理解的整个函数的最大值。

因此,一个函数可以有多个极大值,但是只能有一个最大值。这样,谁是最大值的定义就没有矛盾了。

但是接下来,数学家们需要给出,如何在很多的那个局部的极大值中找到最大值的方法。很遗憾,目前依然没有很好的方法系统性地解决这个问题,只能一个个比较。

事实上,这也是今天计算机进行机器学习时遇到的一个很大的、尚未解决的问题,因为在很多时候,我们觉得经过计算机长期的训练,找到了最大值,但是后来发现所找到的不过是很多局部极大值中的一个而已。人们对于这一点的认知,后来给企业管理和创新带来了很多思考和启发。这个内容我们在最后一个模块会讲到。

最后总结一下今天的内容。在过去,找最大值就是一个个地比较数字的大小,这就把数字变化看成是孤立的事件了,因此很难找到通用的求最大值的方法。

牛顿等人通过考察函数变化趋势,发明了一种通过跟踪函数从低到高,再到平稳,最后再下降的变化,而求最大值的方法。这就让人类对事物的理解从静态,到动态了。这种方法的好处是,它是通用的,而不是针对具体问题的技巧。当然,这种方法有一些漏洞,因此我们要一一补上。

到目前为止,我们关于微积分的主要思想就介绍完了,希望你通过这个工具,对世界的认识能够上到一个崭新的高度。下一讲我们会讲讲有关微积分的发明权之争,看看你从中会得到哪些启发。我们下一讲再见。——吴军《数学通识五十讲》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值