程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(1)

15.模拟e^x的麦克劳林展开式

发布于2020-11-28 10:27     阅读(889)     评论(0)     点赞(16)     收藏(4)


导入第三方库

import numpy as np
from numpy import random
import matplotlib.pyplot as plt
import random

%matplotlib inline

# 解决中文乱码
plt.rcParams["font.sans-serif"]=["KaiTi"]
plt.rcParams["font.family"]="sans-serif"

# 解决符号无法显示的问题
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

# 让图表变成矢量形式,,显示更清晰
%config InlineBackend.figure_format="svg"

e^x的麦克劳林展开式

在这里插入图片描述

f(x)=e^x
=f(0+ f′(0)x+ f″(0)x ²/ 2!+...+ fⁿ(0)x^n/n!+Rn(x)
=1+x+x^2/2!+x^3/3!+...+x^n/n!+Rn(x) 

其中 f(0= f′(0=...= fⁿ(0=e^0=1

如果f(x)在点x=x0具有任意阶导数,则幂级数
在这里插入图片描述
称为f(x)在点x0处的泰勒级数。

最终结果

在这里插入图片描述

一步步实现

分析

由泰勒公式的性质可知,y=e^x的图形其实是由许许多多其他函数的图形渐渐逼近,最终才形成了y=e^x函数的图形。

在绘图的时候,我们不仅要绘制出y=e^x的图形,还需要绘制出其他函数的图形,要将这个逼近的过程展现出来。

1.生成y=e^x函数的图像

在这里插入图片描述
在这里插入图片描述

2.生成其他函数的图像

在生成其他函数的图像的时候,由于这些函数之间存在着一定的规律,一步一步地生成过于繁琐又显得愚蠢,所以我们可以采用循环的方式来实现。

# x轴数据
x=np.linspace(1,4,80)  # 等差数列  1~4中间取80个点

def calcY(n,x):
    """y轴上的数据"""
    
    y=1
    for i in range(1,n):
        y+=x**i/np.math.factorial(i)  # x^i/i!
    return y

def moniPlot(n,x):
    """生成图像"""
    
    # 定义一个颜色集合
    colors=["g","b","black","cyan","lightgreen","yellow","deeppink","darkorchid"]
    
    """绘制原函数的图像"""
    # 原函数
    y=np.exp(x)
    # 画出原函数的图像并进行标记
    plt.plot(x,y,"r-",linewidth=2,label="e^x")
    
    # 麦克劳林展开添加到图像上
    for i in range(2,n):
        y=calcY(i,x)
        
        # 随机选择一种颜色
        color=random.choice(colors)
        
        # 线型
        line_style="--"  # 虚线
        
        # 画图像
        plt.plot(x,y,color=color,linewidth=2,linestyle=line_style)
    
    # 添加注释
    plt.text(1.5,calcY(10,3.8),"Maclaurin series of e^x",size=12)
    
    # 将标记绘制图例,位置位于中间左侧
    plt.legend(["e^x","nearly e^x"],loc="center left")
    
    plt.show()

# 调用生成图像
moniPlot(10,x)

这是最终的结果

在这里插入图片描述

总结

  • 定义x轴的数据
# x轴数据
x=np.linspace(1,4,80)  # 等差数列  1~4中间取80个点
  • 绘制原函数y=e^x的图像
"""绘制原函数的图像"""
# 原函数
y=np.exp(x)
# 画出原函数的图像并进行标记
plt.plot(x,y,"r-",linewidth=2,label="e^x")
  • 绘制其他函数的图像
    1.定义一个专门用来生成y轴数据的函数
# y轴上的数据
def calcY(n,x):
    """专门用来生成y轴上的数据
    n:函数的最高次数+1=n
    x:x轴上的数据
    """
    y=1
    for i in range(1,n):
        y+=x**i/np.math.factorial(i)  # x^i/i!
    return y

2.绘制其他函数的图像

def moniPlot(n,x):
    """生成图像"""
    
    # 定义一个颜色集合
    colors=["g","b","black","cyan","lightgreen","yellow","deeppink","darkorchid"]
    
    # 麦克劳林展开添加到图像上
    for i in range(2,n):
        y=calcY(i,x)
        
        # 随机选择一种颜色
        color=random.choice(colors)
        
        # 线型
        line_style="--"  # 虚线
        
        # 画图像
        plt.plot(x,y,color=color,linewidth=2,linestyle=line_style)
    
    # 添加注释
    plt.text(1.5,calcY(10,3.8),"Maclaurin series of e^x",size=12)
    
    # 将标记绘制图例,位置位于中间左侧
    plt.legend(["e^x","nearly e^x"],loc="center left")
    
    plt.show()

3.循环绘制其他函数的图像

  • 将图像显示出来即可,再为图像添加一点点的细节
  • 这是最终的结果

在这里插入图片描述

最终的代码

import numpy as np
from numpy import random
import matplotlib.pyplot as plt
import random

%matplotlib inline

# 解决中文乱码
plt.rcParams["font.sans-serif"]=["KaiTi"]
plt.rcParams["font.family"]="sans-serif"

# 解决符号无法显示的问题
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

# 让图表变成矢量形式,,显示更清晰
%config InlineBackend.figure_format="svg"

# x轴数据
x=np.linspace(1,4,80)  # 等差数列  1~4中间取80个点

# y轴上的数据
def calcY(n,x):
    
    y=1
    for i in range(1,n):
        y+=x**i/np.math.factorial(i)  # x^i/i!
    return y

def moniPlot(n,x):
    """生成图像"""
    
    # 定义一个颜色集合
    colors=["g","b","black","cyan","lightgreen","yellow","deeppink","darkorchid"]
    
    """绘制原函数的图像"""
    # 原函数
    y=np.exp(x)
    # 画出原函数的图像并进行标记
    plt.plot(x,y,"r-",linewidth=2,label="e^x")
    
    # 麦克劳林展开添加到图像上
    for i in range(2,n):
        y=calcY(i,x)
        
        # 随机选择一种颜色
        color=random.choice(colors)
        
        # 线型
        line_style="--"  # 虚线
        
        # 画图像
        plt.plot(x,y,color=color,linewidth=2,linestyle=line_style)
    
    # 添加注释
    plt.text(1.5,calcY(10,3.8),"Maclaurin series of e^x",size=12)
    
    # 将标记绘制图例,位置位于中间左侧
    plt.legend(["e^x","nearly e^x"],loc="center left")
    
    plt.show()

# 调用生成图像
moniPlot(10,x)

原文链接:https://blog.csdn.net/yuhui_2000/article/details/109727618



所属网站分类: 技术文章 > 博客

作者:听爸爸的话

链接:https://www.pythonheidong.com/blog/article/635127/9f7bfbe9cc9ce842a269/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

16 0
收藏该文
已收藏

评论内容:(最多支持255个字符)