如何设置 B 样条结果的上限和下限以获得合理的插值
How to set upper and lower bound on B-Spline result to get a reasonable interpolation
我有插值功能:
from scipy import interpolate
def f(x):
x_points = [38508,38510,38512]
y_points = [0.249267578125,0.181396484375,0.1912841796875]
tck = interpolate.splrep(x_points, y_points,k=2,xb=38508,xe=38512)
return interpolate.splev(x, tck)
当我评估 f(38503)
时,输出是 0.75
,这与 y_points.
完全不同
关于如何使用这种或其他插值方法减少此错误的任何建议?
正如 RishiG 在评论中指出的那样,您要做的是外推。
object oriented approach 有一个额外的参数:ext
。
from scipy import interpolate
def f(x):
x_points = [38508, 38510, 38512]
y_points = [0.249267578125, 0.181396484375, 0.1912841796875]
tck = interpolate.splrep(x_points, y_points,k=2,xb=38508,xe=38512)
return interpolate.splev(x, tck)
def g(x):
x_points = [38508, 38510, 38512]
y_points = [0.249267578125, 0.181396484375, 0.1912841796875]
spl = interpolate.UnivariateSpline(x_points, y_points, k=2, ext=3)
return spl(x)
if __name__=='__main__':
print(f(38503))
print(g(38503))
输出:
0.7591400146484374
0.249267578125
编辑:
This similar question 可能也很有趣。
我有插值功能:
from scipy import interpolate
def f(x):
x_points = [38508,38510,38512]
y_points = [0.249267578125,0.181396484375,0.1912841796875]
tck = interpolate.splrep(x_points, y_points,k=2,xb=38508,xe=38512)
return interpolate.splev(x, tck)
当我评估 f(38503)
时,输出是 0.75
,这与 y_points.
关于如何使用这种或其他插值方法减少此错误的任何建议?
正如 RishiG 在评论中指出的那样,您要做的是外推。
object oriented approach 有一个额外的参数:ext
。
from scipy import interpolate
def f(x):
x_points = [38508, 38510, 38512]
y_points = [0.249267578125, 0.181396484375, 0.1912841796875]
tck = interpolate.splrep(x_points, y_points,k=2,xb=38508,xe=38512)
return interpolate.splev(x, tck)
def g(x):
x_points = [38508, 38510, 38512]
y_points = [0.249267578125, 0.181396484375, 0.1912841796875]
spl = interpolate.UnivariateSpline(x_points, y_points, k=2, ext=3)
return spl(x)
if __name__=='__main__':
print(f(38503))
print(g(38503))
输出:
0.7591400146484374
0.249267578125
编辑:
This similar question 可能也很有趣。