(数值分析)计算sin(x)的直到50次的Taylor展开(x0=0)

如题,
加分项是能够绘制出动态图

Introduction

  • 涉及求导,考虑使用sympy库,sympy是一个Python的科学计算库,用一套强大的符号计算体系完成诸如求导、多项式求值、求极限、解方程、求积分、微分方程、级数展开等等计算问题。
x = sp.Symbol('x')
将x设置成sympy库中定义的自变量类型

sp.diff(fuc,x)
对fuc中的x进行求导

fuc.evalf(subs={x: 0})
将自变量的值设置为0,并且求解得到浮点数结果

  • 涉及绘图和动态绘制在代码后半段注解

code

import numpy as np
import sympy as sp
import matplotlib.pyplot as plt#绘制
from matplotlib.pyplot import MultipleLocator #导入此类,设置坐标轴间隔


def  derivate(fuc,n):
	'''求解n阶导数'''
    derivation = fuc
    for i in range(n):
        derivation = sp.diff(derivation,x)
    return derivation

def fx_expanded_form_N(fx,n):
	'''求解n阶Taloy展开式 其中x0=0'''
    item_first = 0
    x = sp.Symbol('x')
    for i in range(1,n+1):
        fx_expanded_form = derivate(fx, i).evalf(subs={x: 0}) * (x ** i) / np.math.factorial(i)
        item_first = item_first + fx_expanded_form
    return item_first

x = sp.Symbol('x')
fx = sp.sin(x)

for j in range(1,51):
    plt.clf()#在画板上清除图像
    y = fx_expanded_form_N(fx,j)#第j阶的Taloy展开式
    print(j,y)
    xn = np.arange(-20, 20, 0.1)
    yn = []
    for i in xn:
        yn.append(y.evalf(subs={x: i}))#得到j阶的Taloy展开式中y的列表
    plt.ion()#开启交互模式,这样每个绘图命令之后添加自动图形更新
    '''设置x的刻度值'''
    x_major_locator = MultipleLocator(1)
    ax = plt.gca()
    ax.xaxis.set_major_locator(x_major_locator)
    
    plt.xlabel("x")
    plt.ylabel("sin(x)")

    plt.ylim(-2,2)#y轴的范围
    plt.grid()  # 在背景中加上方格
    plt.plot(xn, yn)
    plt.pause(0.1)#当前图像悬停一会
plt.ioff()#要关闭交互模式,否则图像会一闪而过
plt.show()

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值