2022年5月22日-Taylor级数的python实验

Taylor级数的python实验

引言

众所周知,对于任意一个函数,我们可以选用一组基函数拟合这个函数。什么,你不知道!好吧,没有关系,这是一个很简单的东西,相信在我的解释下,你很快就懂了!

泰勒级数

高等数学里我们学习了一个叫Taylor公式的玩意,即:
f ( x ) = f ( x 0 ) 0 ! + f ′ ( x 0 ) 1 ! ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 + . . . + f ( n ) ( x 0 ) n ! ( x − x 0 ) n + R n ( x ) f(x)=\frac{f({{x}_{0}})}{0!}+\frac{{{f}^{'}}({{x}_{0}})}{1!}(x-{{x}_{0}})+\frac{{{f}^{''}}({{x}_{0}})}{2!}{{(x-{{x}_{0}})}^{2}}+...+\frac{{{f}^{(n)}}({{x}_{0}})}{n!}{{(x-{{x}_{0}})}^{n}}+{{R}_{n}}(x) f(x)=0!f(x0)+1!f(x0)(xx0)+2!f(x0)(xx0)2+...+n!f(n)(x0)(xx0)n+Rn(x)
这里我们从选择 x 0 = 0 x_0 = 0 x0=0来拟合任意一个函数,这样我们的公式就变成麦克劳林公式

python实验

我们就用上面的泰勒级数里的每一项作为基来拟合 s i n ( x ) sin(x) sin(x)好了,看一下拟合的效果。首先上代码:

import torch
from matplotlib import pyplot as plt
import math
from matplotlib_inline import backend_inline

X = torch.arange(-20, 20, 0.1, dtype=torch.float64)
Y_sin = torch.sin(X)
def sin_taylor(X):
    m = 10 # 指Tyle公式的阶数
    Y = torch.zeros_like(X)
    for i in range(1, m + 1):
        Y += (-1)**(i - 1) / math.factorial((2 * i - 1)) * torch.pow(X, 2 * i - 1)
    return Y
Y_taylor = sin_taylor(X)
 
f = plt.figure(figsize=(10, 3))
backend_inline.set_matplotlib_formats('svg')
axes = f.gca()
axes.set_ylim(-2, 2)
axes.plot(X, Y_sin, 'r-', X, Y_taylor, 'b--')

注意我们 s i n _ t a y l o r sin\_taylor sin_taylor函数里的 m m m用来指示我们用多少阶的泰勒来拟合,即泰勒公式多项式的个数。这个多项式的个数决定了我们拟合的精确度,让我们改变阶数看一下实际效果就清楚了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
很明显因为我们选用 x 0 = 0 x_0 = 0 x0=0来拟合 s i n ( x ) sin(x) sin(x),所以在 0 0 0附近曲线基本上一致,但离远了就不行了。不过随着阶数(order)的提高,这个一致的范围会变大。可以猜想如果阶数趋于无穷的话,泰勒公式是可以完全拟合任意一个函数的。

向量空间

学过线性代数的我们肯定知道什么是向量空间,那一个函数能否看成一个向量能?很显然是可以的,例如 s i n ( x ) sin(x) sin(x)可以看成 [ s i n ( x 1 ) , s i n ( x 2 ) , s i n ( x 3 ) . . . s i n ( x n ) ] [sin(x_1), sin(x_2), sin(x_3)...sin(x_n)] [sin(x1),sin(x2),sin(x3)...sin(xn)]其中: n = + ∞ n = +\infty n=+,这是一个无穷维的向量。那么这个向量肯定存在于一个无穷维的线性空间中,那么这个线性空间对应的基应该也有无穷个才对。
最后,很自然的如果要拟合一个函数的话就需要无穷多个基才行,这就解释了为什么泰勒公式上面的实验现象

后记

CSDN just a pice of shit,还不支持 s v g svg svg╰(‵□′)╯

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值