python拟合方程组系数_多项式线性组合的numpy拟合系数

你的直觉是对的。你可以用方程组的形式来解决这个问题,方程组的形式是Ax=b。在

但是:系统定义过多,您希望得到最小二乘解,因此您需要使用np.linalg.lstsq,而不是{}。

不能使用polyval,因为需要分离自变量的系数和幂。

这是如何构造方程组并求解它:A = np.stack([x1**0, x1**1, x1**2, x1**3, x1**4, x2**0, x2**1, x2**2, x2**3, x2**4]).T

xx = np.linalg.lstsq(A, y)[0]

print(fitness(xx)) # test the result with original fitness function

当然,你可以对学位进行概括:

^{pr2}$

对于示例数据,最小二乘法的运行速度比minimize解决方案快得多(在我的笔记本电脑上是800µs vs 35ms)。但是,A可能会变得相当大,所以如果内存是个问题,minimize可能仍然是一个选择。在

更新:

没有任何关于多项式函数内部的知识,事情就变得棘手了,但是分离项和系数是可能的。下面是一种从polyval这样的函数构造系统矩阵A的方法:def construct_A(valfunc, degree):

columns1 = []

columns2 = []

for p in range(degree):

c = np.zeros(degree)

c[p] = 1

columns1.append(valfunc(x1, c))

columns2.append(valfunc(x2, c))

return np.stack(columns1 + columns2).T

A = construct_A(np.polynomial.polynomial.polyval, 5)

xx = np.linalg.lstsq(A, y)[0]

print(fitness(xx)) # test the result with original fitness function

你可能感兴趣的:(python拟合方程组系数)