一维函数化简为少点多段线的算法

2024-06-02 06:52:33 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

我的输入是1D函数y = f(x),我想找到一种方法,用一条在给定区间<x1, x2>上有少量点的多段线来近似这个函数:

enter image description here

我尝试了什么:

我解决这个问题的方法是用多个点(1000+)生成多段线,然后用Ramer–Douglas–Peucker algorithm抽取多段线。你知道吗

enter image description here

所以在(伪)python中是这样的:

def fn_to_low_poly(f, x1, x2):
    xs = numpy.linspace(x1, x2, 1000)
    ys = f(xs)
    return ramer_douglas_peucker_decimate(xs, ys, epsilon=0.001)

这是可行的,但它太复杂和缓慢,我很肯定有一个更好的方法。你知道吗

我现在用python/numpy/scipy来做这个,但是我可能需要用C或者Rust或者别的什么来重写它,所以我不太关心用python来解决这个问题的具体方法,我宁愿有一个通用的算法,尽管我会感谢任何帮助。你知道吗

问题:

有没有一种算法可以直接将一维函数(float -> float)简化为点个数较少的多段线?你知道吗


Tags: 方法函数numpy算法deffloatalgorithmx1