我想为的a系数找到最小二乘解
a
z = (a0 + a1*x + a2*y + a3*x**2 + a4*x**2*y + a5*x**2*y**2 + a6*y**2 + a7*x*y**2 + a8*x*y)
给定数组x,y和z,长度为20。基本上,我在寻找与相等的numpy.polyfit2D多项式。
x
y
z
numpy.polyfit
这是显示如何可以numpy.linalg.lstsq用于此任务的示例:
numpy.linalg.lstsq
import numpy as np x = np.linspace(0, 1, 20) y = np.linspace(0, 1, 20) X, Y = np.meshgrid(x, y, copy=False) Z = X**2 + Y**2 + np.random.rand(*X.shape)*0.01 X = X.flatten() Y = Y.flatten() A = np.array([X*0+1, X, Y, X**2, X**2*Y, X**2*Y**2, Y**2, X*Y**2, X*Y]).T B = Z.flatten() coeff, r, rank, s = np.linalg.lstsq(A, B)
调整系数coeff为:
coeff
array([ 0.00423365, 0.00224748, 0.00193344, 0.9982576 , -0.00594063, 0.00834339, 0.99803901, -0.00536561, 0.00286598])
请注意,coeff[3]和coeff[6]分别对应于X**2和Y**2,并且它们接近,1.因为示例数据是使用创建的Z = X**2 + Y**2 + small_random_component。
coeff[3]
coeff[6]
X**2
Y**2
1.
Z = X**2 + Y**2 + small_random_component