1 三次样条插值
早期工程师制图时,把富有弹性的细长木条(所谓样条)用压铁固定在样点上,在其他地方让它自由弯曲,然后沿木条画下曲线,成为样条曲线。
设函数S(x)∈C2[a,b] ,且在每个小区间[xj, xj+1]上是三次多项式,其中a=x0<x1<...<xn=b 是给定节点,则称S(x)是节点x0,x1,...xn上的三次样条函数。若在节点xj上给定函数值yj=f(xj) ( j=0,1,...,n) ,并成立S(xj) =yj ( j= 0, 1, , n) ,则称S(x)为三次样条插值函数。
下文分别使用Python和MATLAB实现三次样条插值,待插值的函数如下:
2 Python三次样条插值
import numpy as np
import scipy.interpolate as spi
import matplotlib.pyplot as plt
#生成[-10,10]内长度为41的序列
x=np.linspace(-10,10,41)
y=np.sin(x**3)/np.cos(x**2)
#观测数据点
ix3=np.linspace(x[0],x[-1],81)
#三次样条插值
ipo3=spi.splrep(x,y,k=3) #生成模型参数
iy3=spi.splev(ix3,ipo3) #生成插值点
plt.plot(x,y)
plt.plot(ix3,iy3)
plt.legend(['origin','interp'],loc='upper left')
plt.show()
Python运行结果
3 MATLAB三次样条插值
x=linspace(-10,10,41);
y=sin(x.^3)./cos(x.^2);
ix3=linspace(x(1),x(length(x)),81);
iy3=spline(x,y,ix3); %三次样条插值
plot(x,y,'b-','lineWidth',2)
hold on
plot(ix3,iy3,'r-','lineWidth',2);
legend('origin','interp','loc')
MATLAB运行结果
声明:本文转自Python三次样条插值与MATLAB三次样条插值简单案例
标签:10,样条,插值,MATLAB,三次,ix3 From: https://www.cnblogs.com/zhyan8/p/17232723.html