我有一个表格作为 输入
A B
3 20
5 30
6 35
我需要一个算法来找出与 A 和 B 两列相关的公式(方程式)
输出
B=(A+1)*5
一种相对简单的方法是对各种曲线族使用最小二乘曲线拟合(例如,最多 n-2 次的多项式、指数、幂律)并寻找具有最小残差的曲线。这会给你近似的公式(除非你只接受零残差的曲线),但也许这对你的应用程序没问题?
假设您想要的公式是多项式。
我们知道什么?对于 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])