【问题标题】:Interpolating between curves using SciPy使用 SciPy 在曲线之间进行插值
【发布时间】:2021-01-05 17:42:53
【问题描述】:

这是我的情节:

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

如何使用 SciPy 推断得到 71.5 的曲线并插值得到 44.3 的曲线?

【问题讨论】:

    标签: python scipy interpolation extrapolation


    【解决方案1】:

    您可以根据值差异在两条最接近的曲线之间插入权重。权重之和应为 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[:, 0], c45[:, 1], color='limegreen', label='45')
    plt.plot(c60[:, 0], c60[:, 1], 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[:, 0], c44_3[:, 1], color='orange', label='44.3')
    plt.plot(c71_5[:, 0], c71_5[:, 1], color='purple', label='71.5')
    plt.legend()
    plt.show()
    

    【讨论】:

    猜你喜欢
    • 2016-03-01
    • 2018-07-07
    • 2015-09-14
    • 2020-03-19
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多