曲线拟合最小二乘法c++程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课题八曲线拟合的最小二乘法

实验目标:

在某冶炼过程中,通过实验检测得到含碳量与时间关系的数据如下,试求含碳量y与时间t

#include

#include<>

using namespace std;

int Array(double ***Arr, int n){

double **p;

int i;

p=(double **)malloc(n*sizeof(double *));

if(!p)return 0;

for(i=0;i

{

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

if(!p[i])return 0;

}

*Arr=p;

return 1;

}

void main(){

int n,i,j,k;

double **A,*B,*S;

S=new double[3];

B=new double[3];

cout<<"共2有®DN个节¨²点Ì:êo";

cin>>n;

cout<<"请输º入¨节¨²点Ì值¦Ì(ꡧXi)ê:êo"<

double *X;

X = new double[n];

for(i=0;i

cin>>X[i];

}

cout<<"请输º入¨节¨²点Ì函¡¥数ºy值¦Ì(ꡧYi)ê:êo"<

double *Y;

Y = new double[n];

for(i=0;i

cin>>Y[i];

}

if(!Array(&A,3))

cout<<"内¨²存ä分¤配失º¡ì败㨹!ê";

else

{

for(i=0;i<3;i++){

for(j=0;j<3;j++){

A[i][j]=0;

}

}

for(i=0;i

A[0][0]+=1;// cout<

A[0][1]+=X[i];

A[0][2]+=X[i]*X[i];

A[1][0]=A[0][1];

A[1][1]=A[0][2];

A[1][2]+=X[i]*X[i]*X[i];

A[2][0]=A[0][2];

A[2][1]=A[1][2];

A[2][2]+=X[i]*X[i]*X[i]*X[i];

}

}

for(i=0;i<3;i++){

B[i]=0;

}

for(i=0;i

B[0]+=Y[i];

B[1]+=X[i]*Y[i];

B[2]+=X[i]*X[i]*Y[i];

}

for( k = 0; k < 2 ;k++)

{

for(i = k+1; i<3; i++)

{

double T = A[i][k]/A[k][k];

B[i] = B[i] - T * B[k];

for ( j = k+1 ; j < 3 ; j++ )

{

A[i][j] = A[i][j] - T * A[k][j];

}

}

}

S[2] = B[2]/A[2][2];

for (i = 1; i >=0 ; i--)

{

double Temp = 0;

for (int j = i+1; j<2 ;j++)

Temp = Temp + A[i][j] * S[j];

S[i] = (B[i] - Temp) /A[i][i];

}

cout<<"拟a合曲¨²线为a:êo"<

cout<<"y="<

"<

<<"误¨®差为a:êo"<

for(i=0;i

cout<<"Y"<

}

}

相关文档
最新文档