matlab编辑麦克劳林公式ln 1 n,从「如何用多项式函数拟合ln(x)」到「泰勒展开」...

一、引言

让我们来看看下面几个多项式函数对  的拟合。

1、一号选手

191276594_2_20200524105203956

191276594_3_202005241052043

黑线为ln(x)

看起来一号选手仅在

191276594_4_2020052410520481 拟合得比较好,其余地方便不尽如人意。

2、二号选手

191276594_5_20200524105204128

191276594_6_20200524105204175

黑线为ln(x)

看起来二号选手在

191276594_7_20200524105204269 都拟合得很好呢,其余地方也总体还行。

3、三号选手

191276594_8_20200524105204331

191276594_9_20200524105204363

黑线为ln(x)

三号选手简直要逆天了,代入

191276594_10_20200524105204472 ,得到 

191276594_11_20200524105204519 ,误差小于万分之一!

即使代入

191276594_12_20200524105204550 这种远到逆天的值,误差也不超过1%的。

或许下一张图会让你感到更震撼一点:

191276594_13_20200524105204613

红线为ln(x),蓝线为多项式3(是不是几乎看不到红线了吧)

啊,这个放缩太紧了……这样下去ln(x)会坏掉……这样不可以(划掉)

二、正文

0、前言

相信读者看到这里时,一定会对这些奇怪的系数感到迷惑,不知道这些系数是怎么构造出来的。但是放心,当你看完本文后,你就会明白这背后的原理竟然是如此地简单,你完全可以仿照我的方法,构造出精度更高(次数更高)的放缩。

1、引子

如果了解对数平均不等式(ALG不等式)的同学,想必不会对一号选手

191276594_14_20200524105204769 陌生。因为我们证明ALG不等式时就构造出了 

191276594_15_20200524105204816 这个不等式。

那么,问题来了:为什么不是

191276594_16_20200524105204863 呢?这个函数在 

191276594_10_20200524105204472 附近也有很高的精度啊。

事实上,需求决定工作。在讨论这个问题前,我们应该先弄清楚——我们究竟想要什么样的函数?然后对着需求找条件,问题自然迎刃而解了。

2、我们想要什么函数?

①首先,我们想要这个函数不出现ln()、e这种超越数、不好计算的东西,尽可能地只有整数相除这种简单的有理数计算。例如ln(2)是比较难计算的,ln(e)=1虽然是有理数,但是e不是。综上考虑,只有ln(1)=0既满足ln(1)=0是有理数,又满足自变量1是有理数。所以,我们选择在x=1附近找拟合函数。

②我们希望这个函数是「多项式除以多项式」型。

这样的话,我们计算时总是做有理数的加减乘除问题,比较简单。

③我们希望这个函数精度尽可能地高。

对于一个「n次多项式除以m次多项式」型的函数,一般形式是:

191276594_17_20200524105204910

考虑到ln(x)增长是很缓慢地,所以我们希望分子次数与分母次数相等,即满足

191276594_18_20200524105204956 ,这样增长趋势就会与ln(x)相接近。

④我们希望这个函数在比较远处依然能维持精度。

在前面说的n=m这个前提下,想要更高的精度,我们就应该引入一个叫「泰勒展开」的东西了。具体这是什么东西,请读者继续看下文详解。

3、泰勒展开

对于一个函数,我们想要找到其的一个近似函数,我们一个很自然的想法就是取切线。如下图,在x=0处取e^x的切线,其紧邻处拟合程度良好

191276594_19_20200524105204988

但是这还远远不够,因为距离稍微大一点后,这个函数的拟合程度就相当地差了。

我们试图延续取切线的思想,这就自然地引入了泰勒展开。

注意到切线对应的是

191276594_20_2020052410520566 的斜率为0,即一阶导数为0,那么我们如果构造一个函数,让其二阶导数也为0,那么精度会不会提高呢?

对此,有个直观的理解——如果两个函数[1]零阶导、一阶导、二阶导、……n阶导都相等,那么这两个函数至少在某个邻域内是十分近似的,而且随着n的增大,这个邻域会扩大(当然,不一定能无限扩大,有个叫收敛域的玩意)。就好比:如果你玩游戏,你的分段和某大佬一样,英雄胜率和他基本一样,英雄池和他基本一样,出装套路基本一样,操作意识基本一样,那么你和这个大佬的实力基本上是很相近的。

让我们试试:

191276594_21_20200524105205113 ,其中a为待定常数,试求合适的a使得 

191276594_22_20200524105205128

(因为取的是切线,所以

191276594_23_20200524105205144 是显然地)

解:

191276594_24_20200524105205175 ,故 

191276594_25_20200524105205206

所以:

191276594_26_20200524105205222 即为所求

让我们看看,如下图,确实精度有明显提高。

191276594_27_20200524105205238

蓝线为1+x+x^2/2,显然精度提高了

虽然按照这个思路下去,我们可以求出任意项。而且可以预见的是:精度会随着项数的提升而提升。然而,一项一项地求总是一件很烦人的事情,我们试图归纳总结出一个通项。试试看:

191276594_28_20200524105205285

(2.3.1)式是被人们称为「麦克劳林展开」的东西。如果要严格讨论这里的「≈」号的具体含义,我们会涉及到诸如「收敛域」、「余项」等繁琐的东西。因此,我们这里不去严格证明它,而是取从直观的角度说明它。

观察(2.3.1)式,代入x=0,含

191276594_29_20200524105205300 的项都为0,发现左右两端是相等的。

而左右求一阶导后,左右都是

191276594_30_20200524105205316 ,也是相等……

求n次导后,

191276594_31_20200524105205347 求n次导为 

191276594_32_20200524105205363 (这也是分母凑 

191276594_32_20200524105205363 的原因),左右依然相等。

因此,我们可以认为(2.3.1)式是f(x)的一个近似展开式。

推广地,在

191276594_33_20200524105205378 处展开,有:

191276594_34_20200524105205394

其中(2.3.2)式被人们称为「泰勒展开」。它能够满足尽可能高精度地拟合函数的要求。

4、尝试构造

学会了泰勒展开后,我们很兴奋,事实上,容易证明(2.4.1)式是成立的:

191276594_35_20200524105205441

因此,我们尝试对ln(x)进行泰勒展开——

191276594_36_20200524105205472

191276594_37_20200524105205535

我们发现效果非常不理想,这个函数非常地“飘”,这是因为泰勒展开

191276594_29_20200524105205300 幂越来越高,函数就会越来越“不稳定”。事实上,可以证明这一泰勒展开式的收敛域只有 

191276594_38_20200524105205581 ,大于2后,函数就飘走了……

为了克服这一困难,想到之前需求②,我们使用形如(2.2.1)的「多项式除以多项式」函数,并且结合我们的需求③,我们要求它分子分母次数相同(这样就近似于常数,函数就不会“飘”),即满足下式子——

191276594_39_20200524105205597

5、一种思路

形式的确找到了,但是我们这里有一串待定系数,这一点是十分烦人的。回想起前面泰勒展开的知识,我们只能将其展成一串次数越来越高的多项式,如何才能展开成这种形式呢?

我们想到一个方法(虽然不是最终方法):

作一个分式线性映射:

191276594_40_20200524105205613

易见这一分式线性映射将

191276594_41_20200524105205628

就有

191276594_42_20200524105205644

将其用(2.4.1)式展开,就有

191276594_43_20200524105205660

3阶展开效果如下图所示——

(上方红线为ln(x),黄线为最终思路展开2阶

191276594_5_20200524105204128 ,下方红线为本思路展开3阶 

191276594_44_20200524105205691 )

191276594_45_20200524105205706

上方红线为ln(x),黄线为最终思路展开2阶,下方红线为本思路展开3阶。可以看出:本思路虽然简单,但精度略逊一筹

6、另一种更好的思路(最终思路)

事实上,上式采用分式线性映射换元是具有技巧性的,其实也是本文写到一半(都把最终结果图做出来了)突发奇想做出来的。虽然最终结果容易计算出一般地表达式,但是精度不足。我们希望找到一个最高精度的逼近方式,这也是开头引言用的那三个函数的构造方式。

我们知道,(常规方法)泰勒展开无法得到分母上有东西的情形,那么思路就很简单了——我同时乘以分母多项式的话,不就能够和泰勒展开式匹配上了吗?

试试看:

191276594_46_20200524105205800

推出:

191276594_47_20200524105205831

只要将(2.6.2)左式展开,匹配系数即可。

为了方便计算,可以不妨令

191276594_48_20200524105205847 ,这是因为n次多项式有n个自由系数。

让我们拿n=1的情况练练手——

考虑

191276594_49_20200524105205878

自然有:

191276594_50_20200524105205894

易推知:

191276594_51_20200524105205910

因为n=1,这是在x=1的一阶泰勒展开。但是问题来了——

p是个未知数啊!

p是个未知数啊!

p是个未知数啊!

是的,p是一个未知数。那么我们该怎么办呢?其实很简单——

回归到一阶泰勒展开的几何意义,一阶泰勒展开相当于求切线。我们自然希望切线越直越好,也就是说,如果能取一个合适的p,使得其二阶导为0的话,这个切线就会很直,那么就最满足我们的需求。

回归到这个问题:本质上就是令

191276594_52_20200524105205925 ,解出 

191276594_53_20200524105205941 。

191276594_53_20200524105205941 回代,得到 

191276594_54_20200524105205956 。

根据公式(2.3.2),我们得到了

191276594_55_20200524105205988

即:

191276594_56_2020052410520619

相信你有些明白了,让我们试试n=2——

考虑

191276594_57_2020052410520635

自然有:

191276594_58_2020052410520650

易推知:

191276594_59_2020052410520666

因n=2,泰勒展开2阶,有两个未知数p、q,令3、4阶导为0,即:

191276594_60_2020052410520681

容易解出:p=4,q=1

得:

191276594_61_2020052410520697

故:

191276594_62_20200524105206128

即:

191276594_63_20200524105206160

对于任意正整数n——

这个思路的缺点就在于——虽然有着较高精度,但是n比较大时计算起来很复杂。下面的推导给出了一个通过计算机求系数的办法,不过手算起来比较难受。可以使用网上一些软件辅助求解会相对简单。总得来说意义不大,如果要比较高的精度,推荐使用上一个思路多展开几阶。

考虑:

191276594_64_20200524105206175 ,其中 

191276594_48_20200524105205847

191276594_65_20200524105206191 ,则为 

191276594_66_20200524105206206

第一部分:

191276594_67_20200524105206222

其中

191276594_68_20200524105206238

第二部分:

191276594_69_20200524105206269

两者相乘,计算

191276594_70_20200524105206285 项:

①若

191276594_71_20200524105206316

191276594_70_20200524105206285 系数为 

191276594_72_20200524105206331

交换一下求和顺序:

191276594_73_20200524105206347

②若

191276594_74_20200524105206363

191276594_70_20200524105206285 系数为 

191276594_75_20200524105206394

交换一下求和顺序:

191276594_76_20200524105206410

191276594_77_20200524105206425 项到 

191276594_78_20200524105206441 项为0,即可得到各项系数。

总而言之,分母系数由n元方程组(不妨设

191276594_48_20200524105205847 )确定:

191276594_79_20200524105206456

分子系数则是:

191276594_80_20200524105206472

191276594_81_20200524105206488

总之,这个计算量很大,如果不借助计算机的话,建议使用2.5的思路。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值