python 三次样条_python实现三次样条插值

本文通过实例代码详细介绍了Python如何实现三次样条插值,包括两种情况:已知两端导数值和导数值由函数计算得出。通过构建方程组求解参数,实现插值函数,并绘制插值结果对比原函数。
摘要由CSDN通过智能技术生成

本文实例为大家分享了python实现三次样条插值的具体代码,供大家参考,具体内容如下

函数:

算法分析

三次样条插值。就是在分段插值的一种情况。

要求:

在每个分段区间上是三次多项式(这就是三次样条中的三次的来源)

在整个区间(开区间)上二阶导数连续(当然啦,这里主要是强调在节点上的连续)

加上边界条件。边界条件只需要给出两个方程。构建一个方程组,就可以解出所有的参数。

这里话,根据第一类样条作为边界。(就是知道两端节点的导数数值,然后来做三次样条插值)

但是这里也分为两种情况,分别是这个数值是随便给的一个数,还是说根据函数的在对应点上数值给出。

情况一:两边导数数值给出

这里假设数值均为1。即 f′(x0)=f′(xn)=f′(xn)=1的情况。

情况一图像

情况一代码

import numpy as np

from sympy import *

import matplotlib.pyplot as plt

def f(x):

return 1 / (1 + x ** 2)

def cal(begin, end, i):

by = f(begin)

ey = f(end)

I = Ms[i] * ((end - n) ** 3) / 6 + Ms[i + 1] * ((n - begin) ** 3) / 6 + (by - Ms[i] / 6) * (end - n) + (

ey - Ms[i + 1] / 6) * (n - begin)

return I

def ff(x): # f[x0, x1, ..., xk]

ans = 0

for i in range(len(x)):

temp = 1

for j in range(len(x)):

if i != j:

temp *= (x[i] - x[j])

ans += f(x[i]) / temp

return ans

def calM():

lam = [1] + [1 / 2] * 9

miu = [1 / 2] * 9 + [1]

# Y = 1 / (1 + n ** 2)

# df

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值