def qmnh(x,y,z): #读取行数 h =len(x) A = [[sum(x ** 4), sum((x ** 3) *y), sum((x ** 2)*y**2), sum(x ** 3), sum(x ** 2 * y), sum(x ** 2)], [sum(x ** 3 * y), sum(x ** 2 *y ** 2), sum(x * y ** 3), sum(x ** 2 * y), sum(x * y ** 2),sum(x * y)], [sum(x ** 2 * y ** 2), sum(x *y ** 3), sum(y ** 4), sum(x * y ** 2), sum(y ** 3), sum(y ** 2)], [sum(x ** 3), sum(x ** 2 * y), sum(x * y ** 2), sum(x ** 2), sum(x * y), sum(x)], [sum(x ** 2 * y), sum(x * y** 2), sum(y ** 3), sum(x * y), sum(y ** 2), sum(y)], [sum(x ** 2), sum(x * y), sum(y ** 2), sum(x), sum(y), h]] B = [[sum(z * x ** 2)], [sum(z*x* y)], [sum(z * y ** 2)], [sum(z * x)], [sum(z * y)], [sum(z)]] Xd=np.linalg.solve(A,B) X=[float(Xd[0]),float(Xd[1]),float(Xd[2]),float(Xd[3]),float(Xd[4]),float(Xd[5])] Dz=0 for i in range(len(x)): zqj=Xd[0]*x[i]*x[i] +Xd[1]*x[i]*y[i]+Xd[2]*y[i]*y[i]+Xd[3]*x[i]+Xd[4]*y[i]+Xd[5] dz=pow(abs(zqj)-abs(z[i]),2) Dz=Dz+dz rmse=m.sqrt(Dz/len(x)) #print("z = {0}*x*x +{1}*x*y+{2}*y*y+{3}*x+{4}*y+{5}".format(X[0],X[1],X[2],X[3],X[4],X[5])) return X,rmse
时间: 2023-10-21 10:49:21 浏览: 120
这是一个使用最小二乘法拟合二元二次函数的函数。给定一组数据点(x, y, z),函数会返回拟合函数的系数和均方根误差(RMSE)。
函数的输入参数是x、y、z,分别表示数据点的x坐标、y坐标和z值。
函数内部首先计算出系数矩阵A和结果矩阵B。然后使用numpy库中的线性方程组求解函数(np.linalg.solve)解出系数矩阵X。
接下来,函数计算拟合函数在每个数据点上的预测值,并计算预测值与真实值之间的差的平方。将所有差的平方累加,得到总的差的平方和Dz。最后,计算均方根误差RMSE,即将Dz除以数据点个数再开根号。
函数返回拟合函数的系数X和均方根误差RMSE。
请注意,此处使用了numpy库中的求解线性方程组的函数np.linalg.solve。如果未安装numpy库,请先安装。
阅读全文