0的阶乘等于多少

时间:2024-01-29 03:13:23编辑:揭秘君
1,泰勒公式

泰勒公式,也称泰勒展开式,是用在一个函数在某点的信息,描述其附近取值的公式。如果函数足够平滑,在已知函数在某一点的各阶导数值的情况下,泰勒公式可以利用这些导数值来做系数,构建一个多项式近似函数,求得在这一点的邻域中的值。

泰勒公式用一句话描述:就是用多项式函数去逼近光滑复杂函数,以直代曲

先来感受一下泰勒公式的逼近效果:

泰勒公式的维基百科定义:设 n 是一个正整数,如果定义在一个包含 a 的区间上的函数 f 在 a 点处 n+1 次可导,那么对于这个区间上的任意 x 都有:

其中的多项式称为函数在 a 处的泰勒展开式,Rn(x) 是泰勒公式的余项且是 (x-a)n 的高阶无穷小

这里的余项即为误差,因为使用多项式函数在某点展开,逼近给定函数,最后肯定会有一丢丢的误差,我们称之为余项。

泰勒公式的定义看起来高端大气。但如果 a=0 的话,就是麦克劳伦公式,即:

这个就是我们下面讨论的,可以认为麦克劳伦公式和泰勒公式等价。

泰勒公式的作用就是用一个多项式函数去逼近一个给定的函数(即尽量使多项式函数图像拟合给定的函数图像),注意,逼近的时候一定是从函数图像上的某个点展开。如果是一个非常复杂函数,想求其某点的值,直接求无法实现,这时候就可以使用泰勒公式取近似的求该值,这是泰勒公式的应用之一,泰勒公式在机器学习中主要应用于梯度迭代。

不过这里我们首先看看多项式函数图像特点及其如何逼近给定函数。

1.1 多项式的函数图像特点

初等数学已经了解到一些函数如:ex,sinx,cosx,arctanx,lgx....的一些重要性质,但是初等数学不曾回答怎样来计算他们,下面我们慢慢学习。

首先,我们看一下泰勒展示式:

其中 f(0), f ''(0)/2! 这些都是常数,我们暂时不管,先看看其中最基础的组成部分,幂函数有什么特点。

可以看到,幂函数其实只有两种形态,一种是关于 Y 轴对称,一种是关于原点对称,并且指数越大,增长速度越大。

那幂函数组成的多项式函数有什么特点呢?

我们发现:如果把9次的和2次的直接放在一起,那2次的都不用玩了

但是开始的时候,应该是2次的效果更好,之后才慢慢轮到9次,可是如何才能让 x2 和 x9 的图像特性能结合起来呢?

所以说,通过改变系数,多项式可以像钢丝一样弯成任意的函数曲线。

1.2 用多项式对 ex 进行逼近

ex 是麦克劳伦展示形式上最简单的函数,有 e 就是这么任性。下面看一下 ex 的多项式展示式:

增加一个 1/4!*x4 看看。

增加一个 1/5!*x5 看看。

可以看出, 1/n!*xn 不断的弯曲着那根多项式形成的铁丝去逼近 ex,并且 n 越大,其作用的区域距离 0 越远。

连起来看,如下:

1.3 用多项式对 sin(x) 进行逼近

sin(x) 是周期函数,有非常多的弯曲,难以想象可以用多项式进行逼近。

下面看一下 sin(x) 的多项式展示式。

同样,我们再增加一个 1/7!*x7 试试。

可以看到 1/7!*x7 在适当的位置,改变了x - 1/3!*x3 +1/5!*x5 的弯曲方向,最终让 x - 1/3!*x3 +1/5!*x5 - 1/7!*x7 更好的逼近 sin(x)。

下面看看 sin(x)的泰勒展示:

从上图中每次不同程度的函数逼近可以看出:对于精确度要求较高且需要估计误差的时候,必须用高次多项式来近似表达函数,同时给出误差公式。以上就是利用多项式函数去逼近给定函数的一个过程。

1.4 泰勒公式是怎么推导的?

是根据“以直代曲,化整为零”的数学思想,产生了泰勒公式。

如上图,把曲线等分为 n 份,分别为 a1, a2, .... an,令 a1=a, a2=a + Δx, ... xn=a + (n-1)Δx。我们可以退出 (Δ2, Δ3 可以认为是二阶,三阶微分,其准确的数学用于是差分,和微分相比,一个是有限量,一个是极限量):

也就是说, f(x) 全部可以由 a 和 Δx 决定,这个就是泰勒公式提出的基本思想。据此的思想,加上极限 Δx ->0,就可以推出泰勒公式。

注意:为什么泰勒公式选择多项式函数去近似表达给定的函数

首先,我们看如下多项式:

其实多项式是最简单的一类初等函数。关于多项式,由于它本身的运算仅是有限项加减法和乘法,所以在数值计算方面,多项式是人们乐于使用的工具。因此我们经常用多项式来近似表达函数。这也是为什么泰勒公式选择多项式函数去近似表达给定的函数。

下面我们推导一下其一阶泰勒公式,我们首先从一阶导数着手,假设 f(x) 在 x0 处有一阶导数,那么根据定义,就有:

现在先回顾一下关于函数极限的一个结论:

其中,α(x) 是该极限过程下的某个无穷小,即: α(x) ->0(x ->x*),利用这个结论,可以将(1)改写为:

其中 α1(x) ->0(x ->x0),再进一步变形,就可以得到:

注意到(4)末尾那一项,很清楚,它是 (x - x0) 的高阶无穷小,这是因为:

于是,我们可以直接将它记作:

这样的话,(4)式就可以进一步改写为:

这就是一阶泰勒公式,老师的PPT如下:

那么如何得到二阶呢?

先比较一下二阶泰勒和一阶泰勒形式上的差别。他们前两项都是一样的,只不过二阶的又多出一项。注意到,高阶无穷小的记号实际上是一个“收纳筐”,它里面装着很多隐藏着的东西。如此,我们猜测,二阶泰勒多出来的这一项,一定是从一阶泰勒那个高阶无穷小中“分析”出来的。

这启发我们来考虑这样一个极限:

这是 一个 0/0 的极限,要求解它可以考虑使用洛必达。但是,请注意,我们现在只有 f(x) 在 x0 一点一阶可导的条件,这还不足以让我们使用洛必达。不过,这并没有太大困难,只要加强条件就行,比如:我们让 f(x) 在 x0 处二阶可导,这样的话,就不仅保证了 f '' (xo) 存在,还同时保证了 f(x) 在 x0 某邻域内一阶可导,这就满足了洛必达的使用条件。

好了,下面开始洛必达!

现在,我们又利用(2)的结论,将这个极限改写为:

基于同一理由:

我们将它代入(10)并连同(10)一起带回(7),就将得到:

这就是二阶泰勒公式!

下面看一下以直代曲,当 |x| 很小的时候:

这就相当于,在求一阶导数,求 f(x) 在某一点的切线,这个从函数整体来看,只能表示出下一个点上,函数的整体走势是上升还是下降。

但是我们多画几个函数,就会发现只使用一阶导数看起来有点不准,它只帮我们定位了下一个点是上升还是下降,对之后的趋势就很难把控了。

如何做的更准确一些呢? 我们如果把二阶导利用上呢?

更形象一点:

首先要求两曲线函数在某一点(x0, y0)相交: 即 p(x)=f(x)如果要靠的更近,还要两曲线在在该点(x0, y0)处切线相同:即函数的一阶导数相同,p '(x)=f '(x)如果还要靠的更近,还要求函数的弯曲方向相同:即函数的二阶导数相同,p '' (x)=f''' (x)

以此类推:

我们所找的多项式应该满足下面条件:

解释一下上面的转换时如何做的,以上面第三行的二阶导数为例:

第一个箭头的转换:将 Pn(x) 求二阶导函数后将 x0 带入,求得 Pn''(x0)=2!a2

第二个箭头的转换:所以 f ''(x0)=2! a2,所以 a2=1/2! * f '' (x0)

多项式函数:

上面多项式中的系数 a 可以全部由 f(x) 表示,则得到泰勒多项式为:

上式称为 f(x) 在 x0 处关于 (x - x0) 的 n 阶泰勒多项式。

其中误差为:

因为是用多项式函数去无限逼近给定的函数,所以两者之间肯定存在一丢丢的误差。

麦克劳伦公式为:

近似可得:

麦克劳林多项式在做逼近的时候很有用,它可以帮我们实现一个函数,在 x 轴 [0, 1] 之间符合低次幂的图像,在大于 1 的作用域上符合高次幂的图像,这样便可以更好地拟合某些函数。

1.5 阶乘的含义

这里补充一个知识:0的阶乘为1,0的阶乘等于1是人为规定的

原因如下:一个正整数的阶乘是所有小于等于该数的正整数的积,并且有0的阶乘为1.简单一点是人为规定的,但是它有道理的,因为阶乘是一个递推定义, n!=n*(n-1)!,那么必然有一个初始值需要认为规定。因为 1!=1,根据 1!=1*0!,所以 0!=1。

那么阶乘到底什么意思呢?

1,我们发现,阶数越高增长速度越快2,观察可发现,越高次项在越偏右侧影响越大3,对于一个复杂函数,对我们的感觉是在当前点,低阶项能够更好地描述当前点附近,对于之后的走势就越来越依靠高阶的了1.7 泰勒公式的用处

首先这里要问了,为什么要使用泰勒公式呢?

用简单的熟悉的多项式来近似代替复杂的函数泰勒公式容易计算函数值,导数与积分仍然是多项式多项式由他的系数完全确定,其系数又由他在一点的函数值及其导数所确定

实际应用中,泰勒公式需要阶段,只取有限项,一个函数的有限项的泰勒级数叫做泰勒展开式。泰勒公式的余项可以用来估算这种近似的误差

泰勒公式最直接的一个应用就是用于计算,计算机一般都是把 sin(x) 进行泰勒展开进行计算的。

泰勒公式还可以把问题简化,比如计算:

代入 sin(x) 的泰勒展示有:

其中 o(x3) 是泰勒公式里面的余项,是高阶无穷小。

1.8 常见的麦克劳林级数

下面给出几个常见函数在 x=0 处的泰勒级数,即麦克劳林级数。

下面是几个常见的初等函数的带有佩亚诺余项的麦克劳林公式:

佩亚诺余项为 (x - x0)n 的高阶无穷小:Rn(x)=o[(x - x0)n]

1.9 例子:求其n阶麦克劳伦展开式2,拉格朗日乘子法(Lagrange Multiplier Method)

拉格朗日乘子法是用来求条件极值的,或者说拉格朗日乘子法叫拉格朗日数乘法求解条件极值,极值问题有两类,其一,求函数在给定区间上的极值,对自变量没有其他要求,这种极值称为无条件极值。其二,对自变量有一些附加的约束条件限制下的极值,称为条件极值。

下面我们一步一步慢慢来

2.1 如何求条件极值?

给个函数: u=f(x, y),如何求其极值点呢?

简单来说直接求它的偏导不就OK了,即:

但是:现在问题难度加大了,如果再加上约束条件呢?限制条件为 v(x, y)=0

解出 y=y(x) 代入 z 中有:

这说明当 u 的梯度与条件 z=z(x, y) 的法向量共线的时候 u 取得条件极值。

由于一般情况下 v(x, y) 很难求出显式子,所以我们运用银行求导的法则:

于是得到:

显然:

于是我们得到结论: u=f(x, y) 在条件 v(x, y)=0 作用下的极值点由下述函数的极值点给出,注意到 v(x, y)=0,极值也相同。

2.2 如何形象的理解拉格朗日乘子法?

老师的PPT:

下面来解析一下。

想象一下,目标函数 f (x, y) 是一座山的高度,约束 g(x, y)=C 是镶嵌在山上的一条曲线如上图。为了找到曲线的最低点,就从最低的等高线(0那条)开始往上数。数到第三条,等高线终于和曲线有交点了,如下图所示,因为比这条等高线低的地方都不在约束范围内,所以这肯定是这条约束曲线的最低点了。

而且约束条件在这里不可能和等高线相交,一定是相切。因为如果相交的话,如下图所示,那么曲线肯定会有一部分在B区域,但是B区域比等高线低,这是不可能的。

两条曲线相切,意味着他们在这点的法线(法向量)平行,也就是法向量只差一个任意的常数乘子(取为 - λ)

我们把这个式子的右边移到左边,并把常数移到微分算子,就得到:

把这个式子重新解释一下:这个就是函数 f(x, y) + λ g(x, y) 无约束情况下极值点的必要条件

(上图解释:两曲线相切等价于两曲线在切点处拥有共线的法向量,因此可得到函数 f(x, y) 与 g(x, y)在切线处的梯度(gradient)成正比,于是我们可以列出方程组求解切线的坐标(x,y),进而得到函数 f的极值)

从代数方面再梳理一下:

求一个多元函数 f(x, y, z,...) 在条件 g(x, y, z,....)=a 下的极值,实际上是求前者在后者定义域下的极值。

而求函数 L(r, x, y,z...)=f(x, y, z....) + r*(g(x,y,z...)-a) 的无条件极值,极值存在的条件为 L 的所有偏导数等于0。

关键的一点来了,由于 r 也是 L 的变量,所以 L 对 r 的偏导数为 0 相当于要求:

这恰好使 L(r, x, y, z...) 的除了r外的所有变量被限制在 g(x, y, z,...) 的定义域内。

而在这个定义域内,显然 g-a 恒等于0,于是就有 L=f,求 f的有条件极值问题被转化为求 L的无条件极值问题。

2.3 什么是拉格朗日乘子法?

在数学最优问题中,拉格朗日乘子法(Lagrange Multiplier,以数学家拉格朗日命名)是一种寻找遍历受一个或多个条件限制的多元函数的极值的方法。

基本的拉格朗日乘子法(又称为拉格朗日乘数法),就是求解函数 f(x1, x2, ....)在 g(x1,x2...)=0的约束条件下的极值的方法。其主要思想是引入一个新的参数 λ (即拉格朗日乘子),将约束条件与原函数联系到一起,使能配成与变量数量相等的等式方程,从而求出得到原函数极值的的各个变量的解

这种方法将一个有 n 个变量与 k 个约束条件的最优化问题转换为一个有 n+k 个变量的方程组的极值问题,其变量不受任何约束。这种方法引入了一种新的标量未知数,即拉格朗日乘数:约束方法的梯度(gradient)的线性组合里每个向量的系数。这种方法保证了在获得最优乘子的情况下,原目标函数的解和拉格朗日函数的解是一致的。

需要注意的是:lagrange函数本身没有意义的,我们只是希望构造出一个 Lagrange函数,来使得这个函数的极值等于原函数 f(x) 在约束条件下的极值

2.4 如何使用拉格朗日乘子法?

在机器学习的过程中,我们经常遇到在有限制的情况下,最大化表达式的问题。即求表达式的最大值,一般情况下我们都是求导,令其等于 0,但是机器学习的过程中,我们经常遇到在有限制的情况下,最大化表达式,如下例子所示:

此时,我们引入一个拉格朗日乘子 λ 构造出拉格朗日表达式 :

对于有多个限制的表达式,则有:

其中, λ 称为拉格朗日乘子。

接下来就是要对拉格朗日表达式求导,令其为0,解方程即可。

最后将方程的解代入原函数中即可。

最后,小编想说:我是一名python开发工程师,整理了一套最新的python系统学习教程,想要这些资料的可以关注私信小编“01”即可(免费分享哦)希望能对你有所帮助。

上一篇:成都到宜宾有多远

下一篇:如何克服考前紧张