平面方程拟合计算平面方程的一般表达式为:,()记:则:平面方程拟合:对于一系列的n个点:要用点拟合计算上述平面方程,则使:最小。要使得S最小,应满足:即:有,或,解上述线形方程组,得:即:下面程序实际求得的是以下的参数:即:AX+BY+CZ+1=0其程序代码如下:#include"stdafx.h"#include#include#include#defineMAX10voidInverse(double*matrix1[],double*matrix2[],intn,doubled);doubleDeterminant(double*matrix[],intn);doubleAlCo(double*matrix[],intjie,introw,intcolumn);doubleCofactor(double*matrix[],intjie,introw,intcolumn);int_tmain(intargc,_TCHAR*argv[]){doublearray[12][3],Y[3];doubleA,B,C;A=B=C=0.0;ZeroMemory(array,sizeof(array));ZeroMemory(Y,sizeof(Y));for(inti=0;i<12;i++){for(intj=0;j<3;j++){array[i][j]=(double)rand();}}for(inti=0;i<12;i++){array[i][0]=1.0;}//设计了12个最简单的数据点,x=1平面上的点,double*Matrix[3],*IMatrix[3];for(inti=0;i<3;i++){Matrix[i]=newdouble[3];IMatrix[i]=newdouble[3];}for(inti=0;i<3;i++){for(intj=0;j<3;j++){*(Matrix[i]+j)=0.0;}}for(intj=0;j<3;j++){for(inti=0;i<12;i++){*(Matrix[0]+j)+=array[i][0]*array[i][j];*(Matrix[1]+j)+=array[i][1]*array[i][j];*(Matrix[2]+j)+=array[i][2]*array[i][j];Y[j]-=array[i][j];}}doubled=Determinant(Matrix,3);if(abs(d)<0.0001){printf("\n矩阵奇异");getchar();return-1;}Inverse(Matrix,IMatrix,3,d);for(inti=0;i<3;i++){A+=*(IMatrix[0]+i)*Y[i];B+=*(IMatrix[1]+i)*Y[i];C+=*(IMatrix[2]+i)*Y[i];}printf("\nA=%5.3f,B=%5.3f,C=%5.3f",A,B,C);for(inti=0;i<3;i++){delete[]Matrix[i];delete[]IMatrix[i];}getchar();return0;}voidInverse(double*matrix1[],double*matrix2[],intn,doubled){inti,j;for(i=0;i