我有未知函数返回的值,例如
# 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]
有没有办法预测下一个价值?
答案 0 :(得分:4)
不一定。您的“抛物线函数”可能会像这样实现:
def mindscrew
@nums ||= [0, 1, 4, 9, "cat", "dog", "cheese"]
@nums.pop
end
你可以猜测,但要确定地预测是不可能的。
答案 1 :(得分:4)
强>知名点。严格来说,两者都可以是任意不准确的,因为函数可以在已知点之间做任何疯狂的事情,即使它是一个表现良好的连续函数。如果不是表现良好,所有投注都已经关闭;-p
有许多数学方法(直接应用于计算机科学) - 从简单的线性代数到立方样条等事物;以及介于两者之间的一切。
变得深奥;另一个有趣的模型是遗传编程;通过在已知数据点上演变表达式,可以找到适当接近的近似值。有时它有效;有时它没有。不是你想要的语言,但是Jason Bock在.NET 3.5中显示了一些C#代码,这里是:Evolving LINQ Expressions。
我碰巧将他的代码“交给”(我在一些演示文稿中使用过它);像a => a * a
这样的东西几乎可以立即找到它,但它(理论上)应该能够找到几乎任何方法 - 但是没有任何定义的最大游程长度;-p它也有可能陷入死胡同(进化论)你永远无法恢复...
答案 2 :(得分:4)
您可以尝试使用neural networks方法。谷歌查询“神经网络函数逼近”可以找到很多文章。许多书籍也是可用的,例如this one
答案 3 :(得分:2)
答案 4 :(得分:2)
是。也许
如果您有一些输入和输出值,即在您的情况下[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并给出结果功能你可以预测下一个值。
请注意,此问题的大多数其他答案也是有效的。我只是假设你想要一些功能适合数据。换句话说,我觉得你的问题很模糊,请尽量让你的问题尽可能完整!
答案 5 :(得分:2)
一般来说,没有......除非你知道它是特定形式的函数(例如某种程度的多项式N),并且有足够的信息来约束函数。
e.g。对于一个更“普通”的反例(见Chuck的答案),为什么你不一定假设n ^ 2 w / o知道它是二次方程式,你可以得到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))然后使用最小二乘可以使用这些基函数得到最佳拟合的未知系数。
答案 6 :(得分:1)
您可以应用统计方法来尝试猜测下一个答案,但如果函数类似于这个(c),则可能效果不佳:
int evil(void){
static int e = 0;
if(50 == e++){
e = e * 100;
}
return e;
}
这个函数将返回很简单的增加数字然后...... BAM。
答案 7 :(得分:1)
答案 8 :(得分:0)
这是一个难题。
对于可能出现此类任务的特殊情况,您应该查看recurrence relation等式。