插值

您所在的位置:网站首页 样条插值法的应用 插值

插值

2024-02-27 06:55| 来源: 网络整理| 查看: 265

百度百科定义

插值:在离散数据的基础上插补连续函数,使得这条连续曲线经过全部离散点,同时也可以估计出函数在其他点的近似值。

样条插值:一种以 可变样条 来作出一条经过一系列点的光滑曲线的数学方法。插值样条是由一些多项式组成的,每一个多项式都是由相邻的两个数据点决定的,这样,任意的两个相邻的多项式以及它们的导数在连接点处都是连续的。

 

样条插值法

简单理解,就是每两个点之间确定一个函数,这个函数就是一个样条,函数不同,样条就不同,所以定义中说 可变样条,然后把所有样条分段结合成一个函数,就是最终的插值函数。

 

思路1 - 线性样条

两点确定一条直线,我们可以在每两点间画一条直线,就可以把所有点连起来。

显然曲线不够光滑,究其原因是因为连接点处导数不相同。

 

思路2 - 二次样条

直线不行,用曲线代替,二次函数是最简单的曲线。

假设4个点,x0,x1,x2,x3,有3个区间,需要3个二次样条,每个二次样条为  ax^2+bx+c,故总计9个未知数。

1. x0,x3两个端点都有一个二次函数经过,可确定2个方程

2. x1,x2两个中间点都有两个二次函数经过,可确定4个方程

3. 中间点处必须连续,需要保证左右二次函数一阶导相等

    2*a1*x1+b1=2*a2*x1+b2

            2*a2*x2+b2=2*a3*x2+b3

可确定2个方程,此时有了8个方程。

4. 这里假设第一方程的二阶导为0,即 a1=0,又是一个方程,共计9个方程。   【见补充】 

联立即可求解。

 

python 实现

# encoding:utf-8 import numpy as np import matplotlib.pyplot as plt from pylab import mpl """ 二次样条实现 """ x = [3, 4.5, 7, 9] y = [2.5, 1, 2.5, 0.5] def calculateEquationParameters(x): #parameter为二维数组,用来存放参数,sizeOfInterval是用来存放区间的个数 parameter = [] sizeOfInterval=len(x)-1 i = 1 #首先输入方程两边相邻节点处函数值相等的方程为2n-2个方程 while i < len(x)-1: data = init(sizeOfInterval*3) data[(i-1)*3]=x[i]*x[i] data[(i-1)*3+1]=x[i] data[(i-1)*3+2]=1 data1 =init(sizeOfInterval*3) data1[i * 3] = x[i] * x[i] data1[i * 3 + 1] = x[i] data1[i * 3 + 2] = 1 temp=data[1:] parameter.append(temp) temp=data1[1:] parameter.append(temp) i += 1 #输入端点处的函数值。为两个方程,加上前面的2n-2个方程,一共2n个方程 data = init(sizeOfInterval*3-1) data[0] = x[0] data[1] = 1 parameter.append(data) data = init(sizeOfInterval *3) data[(sizeOfInterval-1)*3+0] = x[-1] * x[-1] data[(sizeOfInterval-1)*3+1] = x[-1] data[(sizeOfInterval-1)*3+2] = 1 temp=data[1:] parameter.append(temp) #端点函数值相等为n-1个方程。加上前面的方程为3n-1个方程,最后一个方程为a1=0总共为3n个方程 i=1 while i < len(x) - 1: data = init(sizeOfInterval * 3) data[(i - 1) * 3] =2*x[i] data[(i - 1) * 3 + 1] =1 data[i*3]=-2*x[i] data[i*3+1]=-1 temp=data[1:] parameter.append(temp) i += 1 return parameter """ 对一个size大小的元组初始化为0 """ def init(size): j = 0 data = [] while j


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3