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

Ruby 有没有一种方法可以根据未知函数的先前值来预测未知函数的值,ruby,math,predict,Ruby,Math,Predict,我有未知函数返回的值,例如 # 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] 有没有一种方法可以预测下一个值?您可以应用统计方法尝试猜测下一个答案,但如果函数是这样的话,这可能不会很好地工作(c): 此函数将返回简单的递增数,然后。。。砰。不一定。您的“抛物

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

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

有没有一种方法可以预测下一个值?

您可以应用统计方法尝试猜测下一个答案,但如果函数是这样的话,这可能不会很好地工作(c):

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

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

def mindscrew
  @nums ||= [0, 1, 4, 9, "cat", "dog", "cheese"]
  @nums.pop
end
你可以猜测,但要准确预测是不可能的。

使用:)

这是一个难题

对于可能执行此类任务的特殊情况,您应该检查等式。

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

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

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

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

是的。也许吧

如果您有一些输入和输出值,即在[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,你可以预测下一个值


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

您可以尝试使用这种方法。有相当多的文章,你可以通过谷歌查询“神经网络函数逼近”找到。许多书也可以买到,例如,一般来说,没有。。。除非你知道它是一个特定形式的函数(例如,某次N的多项式),并且有足够的信息约束该函数

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


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

另请参见。

我倾向于说,与更传统的函数拟合技术相比,这可能有点过分(最小二乘法?),但仍然很酷!这取决于场景;如果我们假设一个任意复杂度的未知函数…如果你知道该函数接近多项式,你可以尝试使用最小二乘法拟合多项式:也许可以将这个问题移到某个数学站点?我知道会有数字Chuck的观点是函数可能是arbitrary,比方说,[0,1,4,9,42,1421,23,17,…],但实际上这不是一个严肃的问题,因为你可以选择一个适合给定值的“最简单”函数的概念(例如,x^2是取值为0,1,4,9的最低次多项式;您还可以查找系数最少的多项式、在您最喜欢的函数向量空间中具有最小支持度的函数、具有最小Kolmogorov复杂度的函数等。所有这些概念形式化了最简单=>的直观概念;也可以查看up[信息标准]。是的,您可以找到一个符合数字的函数,并且有相当大的可能性是正确的。我的观点是,如果不对函数施加约束,您就无法确定。此外,我不确定从以前的计算堆栈返回的结果是否比x^2复杂得多。在较低的级别上是这样的,但在代码级别上是这样的el一个是简单的乘法,另一个是简单的数组访问。你误解了提问者想要什么。他/她只有一些值,想要推断出一个适合的好函数;问题不是计算一个已知的函数。@ShreevatsaR:也许你是对的。这当然不是我所理解的。从这个问题来看,听起来是这样的他有一个未知函数返回的值,并希望预测该函数的下一个输出。
def mindscrew
  @nums ||= [0, 1, 4, 9, "cat", "dog", "cheese"]
  @nums.pop
end