过程如下:
from scipy import interpolate
# 创建一些数据点
y = '''2.3
3.7
6.7
11.3
17.7
25.0
37.7
47.0
63.0
83.0
104.0
125.3
150.3
171.3
192.0
210.3
224.0
229.7
226.0
217.3
202.0
187.3
171.3
157.3
138.0
116.3
95.0
77.0
61.7
45.3
34.0
24.3
15.7
11.0
7.0
4.0
2.3'''
x = '''8
7.8
7.6
7.4
7.2
7
6.8
6.6
6.4
6.2
6
5.8
5.6
5.4
5.2
5
4.8
4.6
4.4
4.2
4
3.8
3.6
3.4
3.2
3
2.8
2.6
2.4
2.2
2
1.8
1.6
1.4
1.2
1
0.8''' # 注意不能留回车
y = y.split(sep='\n')
y = list(map(float, y))
x = x.split(sep='\n')
x = list(map(float, x))
# 创建插值对象
f = interpolate.interp1d(y, x)
# 需要插值的值
y_value_to_interpolate = 0.13533 * 229.7
# 计算插值的值
x_value_interpolated = f(y_value_to_interpolate)
print(x_value_interpolated)
利用python库函数中scipy类中的interpolate函数,这个函数可以通过根据给出的x值来拟合计算y值或者根据y值算x值(x和y的值可以不是已知数据点)。
可以先通过excel或者文本或者origin、matlab等先把已知数据点给列出来,确保数据点正确无误后,再复制粘贴到代码中的长文本中。
这里用的间隔是回车键,因此我们先用split函数把他化成字符串列表,注意最开始和最后的点不能有回车,不然根据split函数定义会报错。
然后利用map强制转化成浮点数列表,再用interpolate函数中的interp1d函数进行插值运算。(即根据x查y或根据y查x)
interp1d函数的形参第一项为x第二项为y,即根据x求y的近似值。我们这里需要根据y求x,因此反转变量,因为用的是逼近方法求得近似值,因此也不会改变这一点的数据,只相当于换了xy的坐标,但是我们不通过interpolate函数作图,只使用这一点的数据,因此也不会影响图像。(这里没有画图,如果要画图再利用matplotlib中的plot即可,参考另一篇文章:《python画图实例:根据函数关系画出反射率与入射角的曲线图》)