Python 实现拉格朗日插值法

先来无事,分享一些我自学python中 写的拉格朗日插值法的程序

并且给他附上了插值的图可以对这个方法有个更直观的理解

import numpy as np
# import math
import matplotlib.pyplot as plt
from pylab import mpl

# 整体缩进:tab

global x_lis
global y_lis
global x


def lagrange():
    global x_lis
    global y_lis
    global x
    print('拉格朗日插值法测序测试')
    num_points = int(input("输入的数组个数:"))
    # num_points = 3
    l = np.zeros(shape=(num_points,))
    x_lis = list(input('请输入X的数据:').split())
    # x_lis = [0.32, 0.34, 0.36]
    if len(x_lis) == num_points:
        for i in range(len(x_lis)):
            x_lis[i] = float(x_lis[i])
        print(x_lis)
    else:
        print("错误")
        lagrange()
    y_lis = list(input('请输入Y的数据:').split())
    # y_lis = [0.314567, 0.333487, 0.352274]
    if len(y_lis) == num_points:
        for i in range(len(y_lis)):
            y_lis[i] = float(y_lis[i])
        print(y_lis)
    else:
        print("错误")
        lagrange()
    if len(x_lis) == len(y_lis):
        x = float(input('请输入要估计的x:'))
        # x = 0.3367
        for i in range(len(y_lis)):
            l[i] = 1
            for j in range(len(y_lis)):
                if i != j:
                    l[i] = l[i] * (x - x_lis[j]) / (x_lis[i] - x_lis[j])
                else:
                    pass
    else:
        print("错误")
        lagrange()
    L = 0
    for i in range(len(y_lis)):
        L += y_lis[i] * l[i]
    print("在x=%f时,y=%f " % (x, L))
    return L


h = lagrange()


def draw():
    plt.scatter(x_lis, y_lis, label="离散数据", color="red")
    plt.plot(x_lis, y_lis, label="拉格朗日插值拟合曲线", color="black")
    plt.scatter(x, h, label="预测函数点", color="blue")
    plt.title("拉格朗日插值法")
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    plt.legend(loc="upper left")
    plt.show()


draw()

你可能感兴趣的:(python,numpy,开发语言)