题
我有未知函数返回的值,例如
# 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]
有没有办法预测下一个值?
解决方案
也可以看看 这个问题.
其他提示
不一定。您的“抛物线函数”可能是这样实现:
def mindscrew
@nums ||= [0, 1, 4, 9, "cat", "dog", "cheese"]
@nums.pop
end
可以采取猜测,但预测肯定是不可能的。
如果你只是想要个数据点
已知点的数据的外推法的外强>可以是估计,但你需要接受的电位差是比用数据的的内插之间的大得多强>已知点。严格地说,既可以随意不准确的,因为函数可以做任何事情的已知点之间疯狂的,哪怕是一个乖巧的连续函数。如果它的不强>表现良好,所有的赌注都已经关闭;-p
有许多数学方法本(即直接适用于计算机科学) - 从简单的线性代数的东西等的三次样条任何东西;和之间的一切。
如果你想要的功能
获得深奥;另一个有趣的模式是遗传编程;通过在已知数据点不断变化的表达式,能够找到适当-接近的近似。有时工作;有时没有。不是语言你要找的,但贾森博克展示了一些C#代码,这是否在.NET 3.5,此处的演进LINQ表达式。
我正好有他的代码“手”(我在一些演示使用它);喜欢的东西a => a * a
它会发现它几乎立即,但它应该(理论上)能够找到几乎任何方法 - 但没有任何定义的最大运行长度;-p也可能进入一个死胡同(进化说)在那里你根本不会恢复...
使用钨阿尔法API :)
是。也许
如果你有一些输入和输出值,即,在你的情况[0,1,2,3]及[0,1,4,9],则可以使用响应面(basicly函数拟合我相信)为'猜测实际的函数(在你的情况下F(X)= X ^ 2)。如果你让你的猜测函数F(X)= C1 * X + C2 * X ^ 2 + C3有算法将确定C1 = 0,C2 = 1个,且C3 = 0给定的输入和输出以及给出所得功能可以预测下一个值。
请注意,大多数其他这个问题的答案是有效的为好。我只是假设你想以适应某些功能的数据。换句话说,我觉得你的问题很模糊,请尽量提出自己的问题尽可能完整!
在一般情况下,没有...除非你知道这是一个特定的形式(例如一些度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)),然后使用最小二乘可以使用这些基函数得到你的最佳拟合的未知系数。
您可以应用统计方法,试图猜测下一个答案,但如果功能是像这样的(C),可能无法很好地工作:
int evil(void){
static int e = 0;
if(50 == e++){
e = e * 100;
}
return e;
}
这个函数将返回好简单的越来越多,然后...... BAM。
这是一个困难的问题。
您应该检查出的特殊情况下,它可能是可能的,例如方程递推关系的任务。