代码之家  ›  专栏  ›  技术社区  ›  tig Charlie Martin

有没有一种方法可以根据未知函数的先前值来预测未知函数的值

  •  2
  • tig Charlie Martin  · 技术社区  · 15 年前

    我有未知函数返回的值,例如

    # this is an easy case - parabolic function
    # but in my case function is realy unknown as it is connected to process execution time
    [0, 1, 4, 9]
    

    有没有办法预测下一个值?

    9 回复  |  直到 15 年前
        1
  •  4
  •   Chuck    15 年前

    不一定。您的“抛物线函数”可以这样实现:

    def mindscrew
      @nums ||= [0, 1, 4, 9, "cat", "dog", "cheese"]
      @nums.pop
    end
    

    你可以猜测,但要准确地预测是不可能的。

        2
  •  4
  •   Rorick    15 年前

    你可以尝试使用 neural networks 方法有相当多的文章,你可以通过谷歌查询“神经网络函数逼近”找到。许多书也可以买到,例如。 this one .

        3
  •  4
  •   Marc Gravell    15 年前

    如果你只是想要数据点

    数据外推 外部 已知点的数量可以是 估计的 之间 已知点。严格地说,两者都可能是任意不准确的,因为函数可以在已知点之间做任何疯狂的事情,即使它是一个性能良好的连续函数。如果它 不是吗 表现良好,所有赌注都已下注-P

    有很多数学方法(直接应用于计算机科学)——从简单的线性代数到三次样条曲线;以及介于两者之间的一切。

    如果你想要这个功能

    变得深奥;另一个有趣的模型是遗传编程;通过在已知数据点上演化表达式,可以找到适当的近似值。有时它是有效的;有时候不是。这不是您想要的语言,但Jason Bock在.NET 3.5中展示了一些C#代码,如下所示: Evolving LINQ Expressions

    我碰巧“手头”有他的代码(我在一些演示中使用过);有点像 a => a * a 它几乎会立即找到它,但它(理论上)应该能够找到几乎任何方法——但没有任何定义的最大运行长度-p也有可能进入一个死胡同(进化论的说法),在那里你永远无法恢复。。。

        4
  •  2
  •   Dan Diplo    15 年前
        5
  •  2
  •   martijn_himself    15 年前

    如果您有一些输入和输出值,即在[0,1,2,3]和[0,1,4,9]的情况下,您可以使用响应面(我相信基本函数拟合)来“猜测”实际函数(在您的情况下f(x)=x^2)。如果你让你的猜测函数为f(x)=c1*x+c2*x^2+c3,那么根据你的输入和输出以及结果函数,有一些算法可以确定c1=0、c2=1和c3=0,你可以预测下一个值。

    请注意,这个问题的大多数其他答案也是有效的。我只是假设您想要为数据拟合一些函数。换句话说,我觉得你的问题很模糊,请尽量完整地提出你的问题!

        6
  •  2
  •   Jason S    15 年前

    一般来说,没有。。。除非你知道它是一个特定形式的函数(例如,某次N的多项式),并且有足够的信息约束该函数。

    e、 g.对于一个更“普通”的反例(见Chuck的答案),为什么你不一定假设n^2,而不知道它是一个二次方程,你可以有f(n)=n 4. -6n 3. +12n 2. -6n,对于n=0,1,2,3,4,5 f(n)=0,1,4,9,40145。

    如果你知道这是一个特殊的形式,有一些选择。。。如果形式是基函数的线性加法(例如f(x)=a+b cos(x)+c sqrt(x))然后使用最小二乘法可以使用这些基函数获得最佳拟合的未知系数。

        7
  •  1
  •   tomjen    15 年前

    您可以应用统计方法来尝试猜测下一个答案,但如果函数类似于此(c),则这可能不太有效:

    int evil(void){
      static int e = 0;
      if(50 == e++){
        e = e * 100;
      }
      return e;
    }
    

    此函数将返回简单的递增数,然后。。。砰。

        8
  •  1
  •   Community Justin Hirsch    7 年前
        9
  •  0
  •   Nick Dandoulakis    15 年前

    这是个难题。

    你应该去看看报纸 recurrence relation 可能完成此类任务的特殊情况下的等式。