zoukankan      html  css  js  c++  java
  • python写泰勒展开式

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import math
    
    #e^x = 1 + x + x^2/2!+...
    def calc_e_small(x):
        n = 10
        #累乘  cumsum是求和
        #1! 2! 3! 4! 5!...10!
        f = np.arange(1,n+1).cumprod()
        #x x^2 ... x^10
        b = np.array([x]*n).cumprod()
        return 1+np.sum(b / f)
    
    '''
    e^x = ln2 + (e^ln2)/1!*(x-ln2) + (e^ln2)/2!*(x-ln2)^2+...
    x = a*ln2 + b   k<= z  |b| <= 1/2ln2
    a = ln( int( x/ln2 + 0.5 ) )
    b = x-a*ln2
    e^x = 2^a + e^b
    '''
    def calc_e(x):
        reverse = False
        if x < 0:#处理负数  exp(-x) = 1/exp(x)
            x = -x
            reverse = True
        ln2 = 0.69314718055994530941723212145818
        c = x/ln2
        a = int(c+0.5)
        b = x-a*ln2
        #2的a次方乘以e的b次幂
        y = (2**a)*calc_e_small(b)
        if reverse:
            return 1/y
        return y
    
    if __name__ == '__main__':
        #-2到0 十个数
        t1 = np.linspace(-2,0,10,endpoint=False)
        #0到2 二十个数
        t2 = np.linspace(0,2,20)
        t = np.concatenate((t1,t2))
        print(t)#横轴数据
        y = np.empty_like(t)
        for i,x in enumerate(t):
            y[i] = calc_e(x)
            print('e^',x,'=',y[i],'(近似值)	',math.exp(x))
        mpl.rcParams['font.sans-serif'] = [u'SimHei']
        mpl.rcParams['axes.unicode_minus'] = False
        plt.plot(t, y, 'r-', linewidth=2)
        plt.plot(t, y, 'go', linewidth=2)
        plt.title(u'Taylor展开式的应用', fontsize=18)
        plt.xlabel('X', fontsize=15)
        plt.ylabel('exp(X)', fontsize=15)
        plt.grid(True)
        plt.show()
  • 相关阅读:
    运算符和结合性
    几种排序算法 C++
    UNIX环境高级编程笔记
    几个C语言题与答案
    视频流中的DTS/PTS到底是什么 转载
    linux硬链接与软链接 转载
    HTTP POST上传文件(wininet实现)
    并查集(求最小生成树和集团问题)
    c++ vector
    C++STL priority_queue类
  • 原文地址:https://www.cnblogs.com/xiaochi/p/11236023.html
Copyright © 2011-2022 走看看