当前位置: 首页 > 网络应用技术

我去世后,伯克利教你牛顿,我教你跳课...

时间:2023-03-08 15:46:40 网络应用技术

  大家好,我死了,我是liang tang。这篇文章在公共帐户中开始

  今天,我们继续看伯克利CS61A,让我们看一下家庭作业的最后其他问题。5。这个问题非常有趣,涉及很多知识。因此,这需要大量的空间才能充分说明,因此我写了另一篇文章。

  课程

  原始文档

  github

  这个问题是一个数学问题:给我们一个部分和一个数组C,让我们在间隔中找到与C数组相对应的方程的值范围。

  方程式的表达是:

  $ $ f(x)= c [0] + c [1] x + c [2] x^2 + cdots + c [k-1] x^{k-1} $ $ $

  标题给了我们一个提示,可以使用牛顿估计间隔的极端点。

  如果您还没有听说过牛顿的方法是什么,请不要首先绝望,然后清楚地听我的话。

  严格来说,这个问题非常严格,因为条目的间隔范围既不存在,也没有对C数组长度的限制。在这种情况下,无法估算的间隔可能存在的极端点数,并且在极端情况下,它可能非常大。

  因此,当时我感到非常困惑,有点不满意,因为我认为牛顿无法解决如此大程度的不确定性问题。

  因此,在这种情况下,我想到了蒙特·卡罗拉(Monte Carola)。

  蒙特卡洛听起来很高,但实际上,思想非常简单,即基于大数量定理,它被尽可能地采样,并且很难直接计算出难以直接通过多个样本。

  例如,Alphago使用Monte Carlo方法来估计GO游戏的情况。难以估算GO的情况是优势还是缺点?即使Go Master可以看到谁具有上风,也无法量化获胜的概念。因此,Alphago使用Monter Carlo方法来估算,也就是说,基于某个磁盘面对数万甚至数十万次,赢得统计数据的可能性将是获胜的可能性。

  因此,每个人都可以理解蒙特卡洛是一种简单而粗鲁的方式。

  在此问题中使用蒙特卡洛法实际上在间隔中采样了几个点,然后计算每个点的功能值,然后使用样品的最大最小值来近似最终解决方案。在此问题,给定函数是连续的。对于连续的功能,我们越示例$ x'$距离,实际值的真实极端点越接近,接近$ f(x')$,接近$ f(x)$。

  从理论上讲,只要我们在间隔中提取足够的积分,我们就可以采样到更接近极点点以接近真实答案的点。代码也很容易编写,您只能使用一个很少有使用numpy的行。

  我在代码中抽样1,000点,以在实际结果错误小于6 0之后获得6 0的近似值。

  如果采样了更多点,则可以进一步提高准确性。

  阅读了逃脱的方法后,让我们看一下官方积极解决方案中使用的牛顿。

  牛顿的方法本身并不复杂。这是一种迭代根的方法。下图是一个示例:

  假设曲线是特定方程的函数图像,我们要求它协调根部。我们在随意选择一个点x,该点x与函数值相对应,x -axis的距离为。线和x轴为$ x_0 $,切割线的斜率为。

  因此,我们可以编写平等的形式:

  $ f'(x)= frac {-f(x)} {x_0 -x} $ $ $

  部门后移动项目:

  $ $ x_0 = x -f(x) / f'(x)$ $

  在寻求$ x_0 $的坐标之后,我们将选择$ x_0 $,然后在相同的迭代过程中进行切割电线的数量,直到找到的$ f(x)$ infinite接近0。

  在理解牛顿方法之后,我们回来看看原始问题。

  实际上,我们需要在间隔中函数的函数,以便在间隔上找到函数的极端点,并在极端找到相应的函数值,然后返回函数值的最大值和最小值对应于极端点和端点值。

  连续的函数是找到等于0的一阶引导的点,我们可以应用牛顿方法,也就是说,使用牛顿方法迭代以求解第一阶指南的点等于0。

  尽管可以说是合乎逻辑的,但这里有一些细节。例如,如果第一阶指南可能没有根,则不可能在没有迭代迭代的情况下收敛。因此,目前我们需要限制最大迭代次数。当迭代次数达到一定次数时,它将退出并执行它们是否收敛。

  让我们看一下牛顿迭代方法的守则。该代码在教师的课件中给出。我不得不说这真的很6。

  让我们一一谈谈他们。首先要说的最简单的事情是,该功能用于确定浮点X和Y数量之间的差异是否小于。

  这种操作非常麻烦,因为浮动点号的判断是相等的。例如,1.49999999和1.5不相等。它可能不等于1.5和1.50。这与浮动点号的存储方法相关,因此,如果直接判断两个浮点 - 点号等于方法是,当两个浮点差的绝对值小于我们指定的一定精度的绝对值时,它们被认为是相等的。

  查看该函数,此函数接收函数F及其第一个订单指南函数DF,返回功能,接收X,然后基于Newtonian方法返回到下一个迭代位置。

  查看该功能,执行此功能时迭代的功能。它接收四个函数,函数和功能的生物蛋白质。该功能用于更新每次的值,并使用该功能来确定是否迭代已经结束了。这是迭代的初始值和最大迭代次数。

  最后,可以理解函数,以前的函数,基本上此功能并不多。

  了解这些代码后,我们可以提供自己的实施。实际上,它在某种程度上也是蒙特卡洛算法。因为我们不知道可能存在多少个极端要点,所以我们只能假设在此间隔中最多有20或100个极端点。然后我们使用牛顿要迭代这些点附近的极端点,然后从迭代后的结果中找到最大值和最小值。

  核心想法与直接使用蒙特卡洛相同,但它只是使用牛顿定律的一层迭代。由于我们需要使用第一个订单指南的观点,我们需要找到第一个订单的指南号码指南,即第二阶。

  代码显示如下:

  实际上,在写作后,回顾这些代码本身实际上还可以,而且不像预期的那样困难。估计指导和牛顿是更高数学的基本内容,但是想到这样的解决方案来获得更高的数学内容话题。

  牛顿迭代方法是一种非常好的算法,但是出现的频率确实很低。因此,这也是一个很好的机会,可以熟悉并学习此算法。

  好吧,只要谈论这个问题,谢谢您的阅读。

  原始:https://juejin.cn/post/7097124204151537701