拉格朗日插值(数值分析python实现)

拉格朗日插值

在这里插入图片描述

案例

设原函数𝑓(𝑥) = √𝑥。

二次拉格朗日插值
在这里插入图片描述
三次拉格朗日插值
在这里插入图片描述
四次拉格朗日插值
在这里插入图片描述

源代码
import numpy as np
import matplotlib.pyplot as plt
import math


def Lagrange(arr_x, arr_y, _x):
    l = [0 for j in range(len(arr_x))]
    result = 0
    for i in range(0, len(arr_x)):
        denominator = 1
        molecular = 1
        for j in range(0, len(arr_x)):
            if i != j:
                denominator = denominator * (arr_x[i] - arr_x[j])
                molecular = molecular * (_x - arr_x[j])
        l[i] = molecular / denominator
        result = result + l[i] * arr_y[i]
    return result


# sqrt(x)
original_x = np.arange(0, 100)
original_y = [0.0 for j in range(len(original_x))]
for i in range(len(original_x)):
    original_y[i] = math.sqrt(original_x[i])

# 插值点(1, 1) (9, 3) (81, 9)
x_arr = [1, 9, 36, 64, 81]
y_arr = [1, 3, 6, 8, 9]

# 估算f(x)的近似值
x = np.arange(0, 100)
y = [0 for j in range(len(x))]
for i in range(len(x)):
    y[i] = Lagrange(x_arr, y_arr, x[i])

plt.plot(original_x, original_y, label='f(x) = sqrt(x)', color="black")
plt.plot(x, y, label='p(x)', color="blue")
plt.scatter(x_arr, y_arr, label="The interpolation points", color="red")
plt.title("Lagrange interpolation")
plt.legend(loc="upper left")
plt.xlabel("x")
plt.ylabel("y")
plt.show()

误差分析

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值