使用SciPy在曲线之间插值

问题描述

这是我的情节:

plot

现有曲线是使用interp1d获得的函数,我也有原始数据。

如何使用SciPy外推得出71.5的曲线并内插得出44.3的曲线?

解决方法

您可以根据值差异在两条最接近的曲线之间进行权重插值。权重之和应为1。对于外推法,最远的曲线将具有负权重。

该代码假设每条曲线的x和y值数量相同。

import matplotlib.pyplot as plt
import numpy as np

c30 = np.array([[29.58,10992.90],[34.06,10488.35],[36.53,10166.76],[38.92,9836.60],[41.99,9298.52],[45.13,8708.54],[47.68,8153.57],[49.34,7768.64],[50.30,7546.69]])
c45 = np.array([[26.79,10598.67],[28.89,10282.69],[30.99,9962.94],[33.09,9622.18],[35.18,9220.9],[37.28,8773.75],[39.38,8311.88],[41.48,7836.1],[43.58,7344.26]])
c60 = np.array([[24.44,9518.93],[25.81,9231.69],[27.17,8919.78],[28.54,8576.69],[29.9,8213.69],[31.27,7841.51],[32.64,7437.91],[34.,7004.48],[35.37,6569.1]])

plt.plot(c30[:,0],c30[:,1],color='dodgerblue',label='30')
plt.plot(c45[:,c45[:,color='limegreen',label='45')
plt.plot(c60[:,c60[:,color='crimson',label='60')

c44_3 = ((44.3 - 30) * c45 + (45 - 44.3) * c30) / (45 - 30)
c71_5 = ((71.5 - 45) * c60 + (60 - 71.5) * c45) / (60 - 45)

plt.plot(c44_3[:,c44_3[:,color='orange',label='44.3')
plt.plot(c71_5[:,c71_5[:,color='purple',label='71.5')
plt.legend()
plt.show()

resulting plot

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...