欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python插值法(3)————hermite插值多项式(拉格朗日型)

程序员文章站 2022-07-05 18:05:18
...

只讨论含一阶导数的情况.

代码

import numpy as np
from sympy import *
from matplotlib import pyplot as plt


def hermite(x, y, dy):
    p, la = symbols('p  la')
    f = 0
    n = len(x)
    for i in range(n):
        la = 1
        lp = 0
        for j in range(n):
            if j != i:
                la = la*(p - x[j])/(x[i] - x[j])
                lp = lp + 1/(x[i] - x[j])
        temp1 = 1 - 2 * (p - x[i])*lp
        temp2 = y[i] * temp1 * la * la
        temp3 = dy[i] * (p - x[i]) * la * la
        f = f + temp2 + temp3
        f = simplify(f)
    return f


if __name__ == "__main__":
    x = [-1, 1, 2, 5, 10]
    y = [1, 1, 4, 25, 100]
    dy = [-2, 2, 4, 10, 20]
    p, la = symbols('p  la')
    s = hermite(x, y, dy)
    x1 = np.linspace(-1, 10, 50)
    x1 = list(x1)
    y1 = []
    for i in x1:
        y1.append(s.subs(p, i))
    plt.figure(figsize=(15, 8), dpi=80)
    plt.plot(x, y, 'r1', markersize=40, label='original')
    plt.plot(x1, y1, 'kD:', markersize=8, label='newton')
    plt.xlabel('x')
    plt.ylabel('y')
    plt.legend()
    plt.savefig('hermite.jpg')
    plt.show()

结果如下图所示

Python插值法(3)————hermite插值多项式(拉格朗日型)

相关标签: 计算方法 python