Python实现数值计算----分段二次插值

  事实上在实际使用中,高次插值显然是很不适合的,高次插值将所有样点包涵进一个插值函数中,这是次幂高的原因。高次计算复杂,而且刚开始的一点误差会被方的很大。因此将整个区间分为若干个小区间,在每一个小区间进行插值这样更好,实现容易,也方便在一些嵌入式设备上使用。有不少需要插值方法的场景是在嵌入式的应用中。

  我以等距节点的二次插值为例,以每三个节点为一个子区间。

  等距节点二次插值很好写,由于每个区间只有三个插值节点,计算差商也不必使用拉格朗日插值中使用的递归,直接列表达式也很简单(实际上等距节点二次插值就是只有三个节点的拉格朗日插值,只是此时在定义域内,有很多个拉格朗日插值函数,每个子区间对应一个)。递归的副作用相当的明显,尽管写成尾递归可以减小副作用,但是能避免递归还是避免吧。

  分段插值函数可以表示为:

  

  每一个插值函数表达式:

  

  如上,不需要用递归求差商,方便很多。一个函数即可搞定。

  

"""
@brief: 获得分段二次插值函数
@param: x       插值节点的横坐标集合
@param: fx      插值节点的纵坐标集合
@return: 参数所指定的插值节点集合对应的插值函数
"""
def get_sub_two_interpolation_func(x = [], fx = []):

    def sub_two_interpolation_func(Lx):
        result = 0
        for index in range(len(x)-2):
            if Lx >= x[index] and Lx <= x[index+2]:
                result = fx[index]*(Lx-x[index+1])*(Lx-x[index+2])/(x[index]-x[index+1])/(x[index]-x[index+2]) +                          fx[index+1]*(Lx-x[index])*(Lx-x[index+2])/(x[index+1]-x[index])/(x[index+1]-x[index+2]) +                          fx[index+2]*(Lx-x[index])*(Lx-x[index+1])/(x[index+2]-x[index])/(x[index+2]-x[index+1])
        return result

    return sub_two_interpolation_func

  

"""
demo:
"""
if __name__ == ‘__main__‘:   

    ‘‘‘ 插值节点, 这里用二次函数生成插值节点,每两个节点x轴距离位10 ‘‘‘
    sr_x = [i for i in range(-50, 51, 10)]
    sr_fx = [i**2 for i in sr_x]

    Lx = get_sub_two_interpolation_func(sr_x, sr_fx)            # 获得插值函数
    tmp_x = [i for i in range(-45, 45)]     # 测试用例
    tmp_y = [Lx(i) for i in tmp_x]          # 根据插值函数获得测试用例的纵坐标

    ‘‘‘ 画图 ‘‘‘
    import matplotlib.pyplot as plt
    plt.figure("play")
    ax1 = plt.subplot(111)
    plt.sca(ax1)
    plt.plot(sr_x, sr_fx, linestyle = ‘ ‘, marker=‘o‘, color=‘b‘)
    plt.plot(tmp_x, tmp_y, linestyle = ‘--‘, color=‘r‘)
    plt.show()

    插值函数图像:

时间: 2024-12-22 08:39:47

Python实现数值计算----分段二次插值的相关文章

python与数值计算环境搭建

数值计算的编程的软件很多种,也见过一些编程绘图软件的对比. 利用Python进行数值计算,需要用到numpy(矩阵) ,scipy(公式符号), matplotlib(绘图)这些工具包. 1.Linux系统中一般会带有Python.可以用命令查看是否安装Python $ python Python 2.7.5 (default, Feb 11 2014, 07:46:25) [GCC 4.8.2 20140120 (Red Hat 4.8.2-13)] on linux2 Type "help&

复化梯形求积分——用Python进行数值计算

用程序来求积分的方法有很多,这篇文章主要是有关牛顿-科特斯公式. 学过插值算法的同学最容易想到的就是用插值函数代替被积分函数来求积分,但实际上在大部分场景下这是行不通的. 插值函数一般是一个不超过n次的多项式,如果用插值函数来求积分的话,就会引进高次多项式求积分的问题.这样会将原来的求积分问题带到另一个求积分问题:如何求n次多项式的积分,而且当次数变高时,会出现龙悲歌现象,误差反而可能会增大,并且高次的插值求积公式有可能会变得不稳定:详细原因不赘述. 牛顿-科特斯公式解决这一问题的办法是将大的插

Python 3 数值计算

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32Type "copyright", "credits" or "license()" for more information.>>> 17 /3 #典型的除法返回一个浮点数5.666666666666667>>> 17 //

Python实现数值计算----牛顿插值法

拉格朗日插值法的最大毛病就是每次引入一个新的插值节点,基函数都要发生变化,这在一些实际生产环境中是不合适的,有时候会不断的有新的测量数据加入插值节点集, 因此,通过寻找n个插值节点构造的的插值函数与n+1个插值节点构造的插值函数之间的关系,形成了牛顿插值法.推演牛顿插值法的方式是归纳法,也就是计算Ln(x)- Ln+1(x),并且从n=1开始不断的迭代来计算n+1时的插值函数. 牛顿插值法的公式是: 注意:在程序中我用W 代替  计算牛顿插值函数关键是要计算差商,n阶差商的表示方式如下:   关

用python做数值计算

http://sebug.net/paper/books/scipydoc/scipy_intro.html http://www.cnblogs.com/weilq/p/3432817.html https://eclipse.org/downloads/packages/eclipse-classic-422/junosr2 https://www.ics.uci.edu/~pattis/common/handouts/introtopythonineclipse/

(转)python生态环境简介

Python生态环境简介 作者: Mir Nazim 原文: Python Ecosystem - An Introduction 译者: dccrazyboy  原译: Python生态环境简介 当开发人员从PHP,Ruby或者别的开发环境转换到Python时,所面对的最大问题是缺乏对Python开发的生态环境的充分理解.开发人员非常想得到一份关于完成大多数任务的指南或资源,而不论使用的方法是否规范. 下文所讲到的基本上都来源于我的网站,那存储着Python环境下对于网络应用开发的一些基本资料

Python数值基本运算和其它数学运算方法

数值基本运算 支持最基本的数学运算符号:*+ - / % **.取正负+x -x,地板除法//,除法和取模divmod(x, y)**: >>> 123 + 345 468 >>> 345 - 123 222 >>> 1.5 * 4 6.0 >>> 2/5 0.4 >>> 2 % 3 2 >>> 3 ** 2 9 >>> 3.00 ** 2 9.0 >>> 3 *

python自动化办公?学这些就够用了

知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? 这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手? python在自动化办公领域越来越受欢迎,批量处理简直是加班族的福音. 自动化办公无非是excel.ppt.word.邮件.文件处理.数据分析处理.爬虫这些,这次我就来理一理python自动化办公的那些知识点. python基础 excel自动化 ppt自动化 word自动化 邮件处理 文件批量处理 数据处理与分析 自动化爬虫 下面一一详解. p

前辈们的话--大疆技术总监的金玉良言

今天在发烧友看到一篇很好的文章,有很大的启发和震撼,这就是别人一毕业就能进大疆,而我们还在为找工作发愁的原因吗?!! 当然文中说的很多东西都不是我们大多数人都能实现的,人家大一就开始接触嵌入式,入手Linux,学习python,而大一的很多人还沉浸在高考后的喜悦,开学后的迷茫中呢!这就是差距. 还是那句话,兴趣是最好的老师.要是 一开始我们就对机器人,电子技术感兴趣的话,这些其实都不用别人说的,自己就会想尽办法去寻找合适的学习路径. 遇山开山,遇水架桥.兴趣会指导我们找到该找到的一切的.所以,还