插值、近似等(alglib包)。

 

我需要用任意的设置对一个函数进行插值,所以我选择了样条。

This subroutine builds cubic spline interpolant.

INPUT PARAMETERS:
    X           -   spline nodes, array[0..N-1].
    Y           -   function values, array[0..N-1].

OPTIONAL PARAMETERS:
    N           -   points count:
                    * N>=2
                    * if given, only first N points are used to build spline
                    * if not given, automatically detected from X/Y sizes
                      (len(X) must be equal to len(Y))
    BoundLType  -   boundary condition type for the left boundary
    BoundL      -   left boundary condition (first or second derivative,
                    depending on the BoundLType)
    BoundRType  -   boundary condition type for the right boundary
    BoundR      -   right boundary condition (first or second derivative,
                    depending on the BoundRType)

OUTPUT PARAMETERS:
    C           -   spline interpolant

ORDER OF POINTS

Subroutine automatically sorts points, so caller may pass unsorted array.

SETTING BOUNDARY VALUES:

The BoundLType/BoundRType parameters can have the following values:
    * -1, which corresonds to the periodic (cyclic) boundary conditions.
          In this case:
          * both BoundLType and BoundRType must be equal to -1.
          * BoundL/BoundR are ignored
          * Y[last] is ignored (it is assumed to be equal to Y[first]).
    *  0, which  corresponds  to  the  parabolically   terminated  spline
          (BoundL and/or BoundR are ignored).
    *  1, which corresponds to the first derivative boundary condition
    *  2, which corresponds to the second derivative boundary condition
    *  by default, BoundType=0 is used

我正确的理解是,我将通过节点 点的数量得到不同的内插值,还有什么可以改变?

第二个问题,如果我只需要对原始系列建立许多不同的插值,那么从列表 中选择什么插值更好(变化很重要)?

 
Maxim Dmitrievsky:

我需要用任意的设置对一个函数进行插值,所以我选择了样条。

我正确的理解是,我将通过节点 点的数量得到不同的内插值,还有什么可以改变?

第二个问题,如果我只需要对原始系列建立许多不同的插值,那么从列表 中选择什么插值更好(变化很重要)?

选择哪个更好,是一个非常棘手的问题。有一种方法被称为经验风险最小化,在瓦普尼克的《算法和依赖性恢复程序》一书中得到发展。1972年,似乎是这样。

 
Vladimir:

哪个是更好的选择是一个非常棘手的问题。瓦普尼克的《依赖性重建的算法和程序》一书中提出了一种方法,称为经验风险最小化。这似乎是1972年。

经验风险的可能性最大化/最小化,按照我的理解,只是相应算法的一个总称。我不需要算法本身,我只需要修改曲线,最好是快速和可变的,并有可能在新的点上找到插值(花键包允许后者)。

 
首先,值得了解的是什么是插值。
 
Maxim Dmitrievsky:

经验风险的可能性最大化/最小化,按照我的理解,只是相应算法的一个总称。我不需要算法本身,我只需要修改曲线,最好是快速和可变的,并有可能在新的点上找到内插值(花键包允许后者)。

最大似然法和最小化(我记得,不是经验性的,而是平均性的)风险都不是算法的名称,而是问题设置中的目标设置方式。如果目标是可以实现的,它就会产生一些算法,这些算法必然与目标一致,是在特定情况下实现目标的实施。如果你既不需要目标,也不需要实现目标的算法,那么对于选择插值函数的任务就不能给出任何建议。你只能按照你的心来选择......。

 
我明白了,随机猜测也不坏。所以没有人解决过类似的问题。我会把它想象出来,然后看一看。
 
Maxim Dmitrievsky:

我需要用任意的设置对一个函数进行插值,所以我选择了样条。

我正确的理解是,我将通过节点 点的数量得到不同的内插值,还有什么可以改变?

第二个问题,如果我只需要对初始序列建立许多不同的插值(可变性很重要),我应该从列表 中选择什么进行插值?

对交易者来说,最有价值的不是插值,也不是近似,而是推断。

花键不适合用于外推。

我在多项式近似-外推法方面有很好的经验和理解。经验较少的是傅立叶。
用多项式和傅里叶方法进行外推,性质完全不同。傅里叶外推法由于其周期性(此线是不同频率、相位和振幅的正弦波的总和),只能应用于平坦的市场,而且它总是倾向于回调,而多项式外推法则相反,有利于趋势,因为它由于其程度性,总是试图 "向上飞 "或向下
因此,为了获得良好的推断结果,将这两种方法结合起来是有意义的。

多项式近似是程序员特别感兴趣的,因为这种类型的近似是非常好的优化,可以非常快速地计算。我设法摆脱了计算系数的周期。
同样重要的是要记住,所有类型的近似都会在每个新的点上创建可重绘的线条。只有来自近似线的描边没有被重绘。

多项式近似只有一个解,与傅里叶近似相反。这允许创建独特的不可重画的幻灯片。

 
Maxim Dmitrievsky:
我明白了,随机猜测也不坏。所以没有人解决过类似的问题。我会把它想象出来,我会看到的。

没有人解决这个问题--错了。所有的插值方法都有其理论依据,通常有明确的目标。例如,立方体缺陷的两个花键使通过花键节点处敲入木板的钉子的尺子的弹性弯曲势能最小。通过这种方式,从带有船舶轮廓或机翼轮廓的图纸中的点的表格中得到了一条平滑(缺陷小于3)的曲线。同样的花键描述了弹性数学中多支撑梁的偏移。很多时候,目标是最小化插值节点的坐标偏移总和。 为了比较不同目标的插值结果,我们需要一个概括性的目标,一个对任何插值方法都可以计算的标准。它是基于要确定的系数的数量。粗略的说,如果一个多项式近似的度数从3增加到7,可以减少20%的偏差平方之和,那么度数3比7更合理。如果我没有混淆的话,无线电工程中的类似物是滤波器的截止频率。

 
Nikolai Semko:

对交易员来说,最有价值的不是插值或近似,而是推断。

花键不适合用于外推。

我在多项式近似-外推法方面有很好的经验和理解。经验不足--傅立叶。
用多项式和傅里叶方法进行外推,性质完全不同。傅里叶外推法由于其周期性(此线是不同频率、相位和振幅的正弦波的总和),只能应用于平坦的市场,而且它总是倾向于回调,而多项式外推法则相反,有利于趋势,因为它由于其程度性,总是试图 "向上飞 "或向下
因此,为了获得良好的推断结果,将这两种方法结合起来是有意义的。

多项式近似是程序员特别感兴趣的,因为这种类型的近似是非常好的优化,可以非常快速地计算。我设法摆脱了计算系数的周期。
同样重要的是要记住,所有类型的近似都会在每个新的点上创建可重绘的线条。只有来自近似线的描边没有被重绘。

多项式近似只有一个解,与傅里叶近似相反。这允许创建独特的不可重画的幻灯片。

这很好。我没有什么可以推断的,需要的是插值。我的意思是,在这种推断的基础上进行预测是没有意义的。这条线有必要尽可能强大,从一边到另一边,就像你的蓝线。而我希望能够在新的点上得到一个解决方案,是的(不需要在现有公式的基础上重新计算)。

所以就问用什么比较好--多项式或花键或一些亚种。也许第十学位也会很有趣。

 
Vladimir:

没有人解决这个问题--它是错误的。所有的插值方法都有其理论依据,通常有明确的目标。例如,立方体缺陷的两个花键使尺子通过花键节点处敲入木板的钉子的弹性弯曲势能最小。通过这种方式,从带有船舶轮廓或机翼轮廓的图纸中的点的表格中得到了一条平滑(缺陷小于3)的曲线。同样的花键描述了弹性数学中多支撑梁的偏移。很多时候,目标是最小化插值节点的坐标偏移总和。 为了比较不同目标的插值结果,我们需要一个概括性的目标,一个对任何插值方法都可以计算的标准。它是基于要确定的系数的数量。粗略的说,如果一个多项式近似的度数从3增加到7,可以减少20%的偏差平方之和,那么度数3比7更合理。如果我没有混淆的话,无线电工程中的类似物是滤波器的截止频率。

只是,如果我开始试图解释我打算用它做的一切,它又会有几页长了 :)你需要变化性,不同程度的多项式,网格点的数量,等等。

 
Maxim Dmitrievsky:

这很好。我没有什么可以推断的,需要的是插值。在这个意义上,对这样的推断进行预测,事后是没有意义的。这条线有必要尽可能强大,从一边到另一边,就像你的蓝色线一样。而我希望能够在新的点上得到一个解决方案,是的(不需要在现有公式的基础上重新计算)。

所以就问用什么比较好--多项式或花键或一些亚种。也许第10度也会很酷。

确切地说,是插值?你确定吗?不是近似值?而且还不能重绘?
你不会对每一个刻度进行插值。

如果你需要在中间节点(例如ZigZag节点)上进行插值,而不需要重新绘制,那么整个要点就是下一个节点将在哪里。

只有当你有一台时间机器时,你才能创建一个不可重绘的清晰ZigZag。在没有时间机器的情况下,你没有办法确定当前的酒吧是一个极端。

论坛上定期有一个人,我称他为 "拖尾巴的人"。

整个要点是马尾辫。

这是这种流派的经典之作--将SMA向左移动半个周期,并像偶然一样用某种程度的多项式完成这些半周期的绘制。例如,https://www.mql5.com/ru/forum/224374。 你可能已经看过了。

你可以用花键沿着之字形外延做一个非常好的插值,但你需要清楚地了解,在最后两三个节点之间会有重绘。没有它就没有办法!

如果不重新绘制,那就不是插值,而是我所说的从近似的线中追踪(不是插值!)。
除了多项式之外,我至今没有看到任何可以理解的东西。
这里有一个专门录制的GIF,以演示一个高阶多项式(10)的例子,以便了解它比我希望的要少得多的 "美丽":)

紫色和蓝色的线是不能重划的。紫色是 "向下看 "的多项式,蓝色是 "向上看 "的多项式。
而且没有足够的精度来计算高度多项式。我们将不得不使用特殊的库,使用精度更高的类型。事实上,"追踪器 "在GIF中的小时段开始 "跳跃"--这就是双倍缺乏精度的原因。
但我个人认为度数超过5的多项式的实际应用并不理想。