我有一张桌子 的输入
A B
3 20
5 30
6 35
我需要一种算法来找出与两列A和B相关的公式(方程式)
输出
B=(A+1)*5
答案 0 :(得分:1)
一种相对简单的方法是使用最小二乘曲线拟合用于各种曲线族(比如多项式达到n-2度,指数,幂律)并寻找具有最小残差的曲线。这会给你近似的公式(除非你只接受零残差的曲线),但也许你的应用可以吗?
答案 1 :(得分: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])
答案 2 :(得分:-1)