-1

我有一个表格作为 输入

A B 
3 20
5 30
6 35

我需要一个算法来找出与 A 和 B 两列相关的公式(方程式)

输出

B=(A+1)*5
4

3 回答 3

1

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

于 2013-02-18T11:39:25.480 回答
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])
于 2013-02-18T18:49:25.790 回答
-1

如果公式是示例中的一阶线性,那么您正在寻找:

http://en.wikipedia.org/wiki/Linear_regression

或者这个对于高阶线性方程

http://en.wikipedia.org/wiki/Polynomial_regression

于 2013-02-18T11:38:03.607 回答