【问题标题】:piecewise linear interpolation function in pythonpython中的分段线性插值函数
【发布时间】:2017-08-17 03:04:06
【问题描述】:

我对编程很陌生,我想尝试编写一个分段线性插值函数。 (也许是用 numpy.interp 或 scipy.interpolate.interp1d 完成的)

假设我得到如下数据:x= [1, 2.5, 3.4, 5.8, 6] y=[2, 4, 5.8, 4.3, 4]

我想设计一个分段插值函数,它将使用 Python 给出 1 到 2.5、2.5 到 3.4 等所有线性多项式部分的系数。 当然matlab有interp1函数可以做到这一点,但我使用python,我想做与matlab完全相同的工作,但python只给出值而不是线性多项式系数! (在 matlab 中我们可以用 pp.coefs 得到这个)。 但是如何在 python numpy.interp 中获取 pp.coefs ?

【问题讨论】:

    标签: python interpolation coefficients


    【解决方案1】:

    您可以使用来自numpy 的polyfit,它会为您提供给定拟合的最高阶系数列表(这里有两个系数在您的阶数1 多项式)。因此,下面将为您提供每个段[1, 2.5]、[2.5, 3.4] 等的系数列表

    import numpy as np
    
    x = np.array(x)
    y = np.array(y)
    
    [np.polyfit(x[i:(i+2)], y[i:(i+2)],1) for i in range(len(x)-1)]
    #[array([ 1.33333333,  0.66666667]), array([ 2., -1.]), array([-0.625,  7.925]), array([ -1.5,  13. ])]
    

    【讨论】:

    • 感谢您的回答先生。 . .但我真的不想只有一个多项式,出于某些原因,我更喜欢将点与线段相连,然后我必须找到结果曲线与另一条线的交点。 . .
    • @Nima,这里不仅有一个多项式,上面的系数是每个线段的系数!
    • 非常感谢。我得到了答案。 . .你知道我现在如何找到这两个图之间的交点吗?
    【解决方案2】:

    如果您要进行线性插值,您只需使用从点(x0, y0) 到(x1, y1) 的线,对它们进行插值的线由y - y0 = ((y0 - y1)/(x0 - x1)) * (x - x0) 给出。您可以使用切片语法获取列表的 2 个元素切片;例如要获得[2.5, 3.4],您将使用x[1:3]。

    然后您可以使用切片语法实现线性插值公式来计算线性多项式插值的系数。

    【讨论】:

    • 感谢您的回答。 . .但我的主要问题是找到两条曲线之间的交点,一条是一条线,例如 y = 2*x,另一个是点集(例如:x= [1, 2.5, 3.4, 5.8, 6] y =[2, 4, 5.8, 4.3, 4]) 形成分段曲线,我更喜欢使用分段线性。 . .我首先应该形成这条分段线性曲线,然后找到与 ((solve)) 的交点。 . .当然事实上我没有一条线。 . .
    • 恐怕我不明白这个评论。我详述的方法将允许您计算系数。由此,您将能够根据您的要求生成所提供点的线性插值。
    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多