【问题标题】:Is there a way to predict unknown function value based on its previous values有没有办法根据以前的值来预测未知函数值
【发布时间】:2010-11-12 03:50:04
【问题描述】:

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

# 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]

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

【问题讨论】:

标签: ruby math predict


【解决方案1】:

您可以应用统计方法来尝试猜测下一个答案,但如果函数像这样(c),那可能效果不佳:

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

此函数将返回漂亮的简单递增数字,然后... BAM。

【讨论】:

    【解决方案2】:

    不一定。你的“抛物线函数”可能是这样实现的:

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

    你可以猜测,但确定性预测是不可能的。

    【讨论】:

    • 我知道会有数字
    • Chuck 的观点是该函数可能是任意的,例如 [0, 1, 4, 9, 42, 1, 4251, 23, 17, ...]。但实际上这不是一个严肃的问题,因为您可以选择一个适合您给定值的“最简单”函数的概念(例如,x^2 是取值 0、1、4、9 的最低次数多项式;您也可以寻找具有最少系数的多项式,在您最喜欢的函数向量空间中具有最小支持的函数,具有最小 Kolmogorov 复杂度的函数等。所有这些概念形式化了最简单 => 最有可能的直观概念;还查找 [信息标准].
    • 是的,您可以找到适合数字的 a 函数,并且很有可能是正确的。我的观点是,如果不对功能施加限制,您就无法确定。另外,我不确定从以前的计算堆栈返回结果是否比 x^2 复杂得多。在低层次上是这样,但在代码层次上,一个是简单的乘法,另一个是简单的数组访问。
    • 你误解了提问者想要什么。他/她只有一些值,并且想推断出一个适合的好函数;问题不在于计算已知函数。
    • @ShreevatsaR:也许你是对的。这当然不是我所理解的。从这个问题来看,听起来他有一个未知函数返回的值,并希望预测该函数的下一个输出。
    【解决方案3】:

    【讨论】:

      【解决方案4】:

      这是一个难题。

      您应该查看recurrence relation 等式以了解可能执行此类任务的特殊情况。

      【讨论】:

        【解决方案5】:

        如果你只想要数据点

        已知点之外的数据外推可以估计,但您需要接受的潜在差异远大于数据插值之间强>已知点。严格来说,两者都可能是任意不准确的,因为该函数可以在已知点之间做任何疯狂的事情,即使它是一个表现良好的连续函数。如果它表现不佳,那么所有的赌注都已经失败了;-p

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

        如果你想要这个功能

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

        我碰巧有他的代码“手头”(我在一些演示文稿中使用过它);使用a => a * a 之类的东西,它几乎可以立即找到它,但它应该(理论上)能够找到几乎任何方法 - 但没有任何定义的最大运行长度;-p 也有可能进入死胡同(进化说)你根本无法恢复......

        【讨论】:

        • 与更传统的函数拟合技术(最小二乘法?)相比,我倾向于说这可能有点矫枉过正,但仍然很酷!
        • 视场景而定;如果我们假设一个任意复杂度的未知函数......
        【解决方案6】:

        是的。也许吧。

        如果您有一些输入和输出值,即在您的情况下为 [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 给定输入和输出并给出结果可以预测下一个值的函数。

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

        【讨论】:

          【解决方案7】:

          您可以尝试使用neural networks 方法。您可以通过 Google 查询“神经网络函数逼近”找到很多文章。许多书籍也可用,例如this one.

          【讨论】:

            【解决方案8】:

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

            例如对于一个更“普通”的反例(请参阅 Chuck 的回答),为什么你不能假设 n^2 不知道它是一个二次方程,你可以有 f(n) = n4 - 6n3 + 12n2 - 6n,其中 n=0,1,2,3,4,5 f(n) = 0,1,4,9 ,40,145。

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

            【讨论】:

              【解决方案9】:

              另见this question

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2023-02-09
                • 2019-05-14
                • 1970-01-01
                • 1970-01-01
                • 2021-09-22
                • 2023-02-16
                • 1970-01-01
                相关资源
                最近更新 更多