2013-02-18 54 views
-1

我有一个表作为 输入为了找到与两列A相关联的两列

A B 
3 20 
5 30 
6 35 

我需要一种算法来找出式(公式)和B

之间方程输出

B=(A+1)*5 
+0

这个公式没有第一行工作... – 2013-02-18 11:31:48

+0

问题是找到两列之间的关系的算法..对于I/P表..我需要算法来计算(找出)公式为O/P – Yoshi 2013-02-18 11:32:02

回答

1

一种相对简单的方法将是使用最小二乘法曲线拟合为各种曲线族的(说多项式达到n-2级,指数,幂定律)并寻找残差最小的那个。这会给你近似的公式(除非你只接受零残差的曲线),但也许这对你的应用程序没问题?

0

假设你想要的公式是一个多项式。

我们知道什么?对于A值列表,我们有它们的B值。用“n”个A值,我们可以找到的最好的多项式是(n-1)度。为什么?

基本上我求解线性系统类似如下:

x + Ay + (A^2)z = B 

随着例如:

x + 3y + 9z = 20 
x + 5y + 25z = 30 
x + 6y + 35z = 35 

解决此之后,我们可以发现,(X,Y,Z)= (5,5,0)。这意味着我们的多项式是5 + 5A + 0(A^2),这与您在示例中显示的B =(A + 1)* 5基本相同。

我们可以用任何方法解决系统问题。不知道它是否会有所帮助,但我会在这里抛出一些代码高斯消元法(在Python)来解决这个问题:

def solve(A, B): 
    n = len(A) 
    M = [[a**i for i in range(n)]+[b] for a,b in zip(A,B)] 

    for i in range(n): 
     M[i] = [x/M[i][i] for x in M[i]] 

     for j in range(n): 
      if j==i: continue 
      M[j] = [xj - xi * M[j][i] for xi, xj in zip(M[i], M[j])] 

    return [M[i][-1] for i in range(n)] 

print solve([3,5,6], [20, 30, 35])