多点最小二乘法平面方程拟合计算.docx

上传人:b****3 文档编号:2146262 上传时间:2022-10-27 格式:DOCX 页数:6 大小:51.46KB
下载 相关 举报
多点最小二乘法平面方程拟合计算.docx_第1页
第1页 / 共6页
多点最小二乘法平面方程拟合计算.docx_第2页
第2页 / 共6页
多点最小二乘法平面方程拟合计算.docx_第3页
第3页 / 共6页
多点最小二乘法平面方程拟合计算.docx_第4页
第4页 / 共6页
多点最小二乘法平面方程拟合计算.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

多点最小二乘法平面方程拟合计算.docx

《多点最小二乘法平面方程拟合计算.docx》由会员分享,可在线阅读,更多相关《多点最小二乘法平面方程拟合计算.docx(6页珍藏版)》请在冰豆网上搜索。

多点最小二乘法平面方程拟合计算.docx

多点最小二乘法平面方程拟合计算

多点最小二乘法平面方程拟合计算

平面方程拟合计算

平面方程的一般表达式为:

()

记:

则:

平面方程拟合:

对于一系列的n个点:

要用点拟合计算上述平面方程,则使:

最小。

要使得S最小,应满足:

即:

有,

或,

解上述线形方程组,得:

即:

下面程序实际求得的是以下的参数:

即:

AX+BY+CZ+1=0

其程序代码如下:

#include"stdafx.h"

#include

#include

#include

#defineMAX10

voidInverse(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

      matrix2[i]=(double*)malloc(n*sizeof(double));

   for(i=0;i

      for(j=0;j

         *(matrix2[j]+i)=(AlCo(matrix1,n,i,j)/d);

}

doubleDeterminant(double*matrix[],intn) 

   doubleresult=0,temp; 

   inti; 

   if(n==1) 

      result=(*matrix[0]); 

   else 

   { 

      for(i=0;i

      { 

         temp=AlCo(matrix,n,n-1,i); 

         result+=(*(matrix[n-1]+i))*temp; 

      } 

   } 

   returnresult; 

doubleAlCo(double*matrix[],intjie,introw,intcolumn) 

   doubleresult;

   if((row+column)%2==0)

      result=Cofactor(matrix,jie,row,column); 

   elseresult=(-1)*Cofactor(matrix,jie,row,column);

   returnresult; 

doubleCofactor(double*matrix[],intjie,introw,intcolumn) 

   doubleresult; 

   inti,j; 

   double*smallmatr[MAX-1]; 

   for(i=0;i

      smallmatr[i]=newdouble[jie-1];

   for(i=0;i

      for(j=0;j

         *(smallmatr[i]+j)=*(matrix[i]+j); 

   for(i=row;i

      for(j=0;j

         *(smallmatr[i]+j)=*(matrix[i+1]+j); 

   for(i=0;i

      for(j=column;j

         *(smallmatr[i]+j)=*(matrix[i]+j+1); 

   for(i=row;i

      for(j=column;j

         *(smallmatr[i]+j)=*(matrix[i+1]+j+1); 

   result=Determinant(smallmatr,jie-1);

   for(i=0;i

      delete[]smallmatr[i];

   returnresult;  

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1