你的直觉是正确的。 可以用方程式的形式解决这个问题。 方程的形式是Ax=b。 在
但是,由于系统定义太多,最需要sfdts平方解,因此应该使用np.linalg.lstsq而不是{}。
不能使用polyval,因为必须分离参数的系数和幂。
这是如何构造方程求解的: a=NP.stack([x1**0,x1**1,x1**2,x1**3,x1**4,x2**0,x2**1,x2**2,x2
xx=NP.LinaLG.lstsq(a,y ) [0]
打印(fitness (xx ) ) testtheresultwithoriginalfitnessfunction
当然,可以概括学位:
^{pr2}$
对于示例数据,sfdts乘法运算的执行速度比minimize解决方案快得多(在我的笔记本电脑上为800s vs 35ms )。 但是,a可能会变得相当大,所以如果内存是个问题,minimize可能仍然是一个选择。 在
更新:
如果不了解多项式函数的内部,事情就会变得麻烦,但可以将项和系数分离。 下面介绍了如何从polyval这样的函数中构造系统矩阵a。 defconstruct_a(valfunc,degree ) :
columns1=[]
columns2=[]
forpinrange(Degree ) :
c=NP.Zeros(Degree )
c[p]=1
columns1.append(valfunc ) x1,c ) )
columns2.append(valfunc ) x2,c ) )
return NP.stack (columns1columns2).t
a=construct _ a (NP.polynomial.polynomial.poly val,5 ) ) ) ) ) ) ) ) ) ) )。) ) ) ) ) )
xx=NP.LinaLG.lstsq(a,y ) [0]
打印(fitness (xx ) ) testtheresultwithoriginalfitnessfunction