本文实例为大家分享了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