C++最小二乘法求多项式拟合曲线
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// shujunihe.cpp : 定义控制台应用程序的入口点。
//
// quanzhuyuan.cpp : 定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include
#include
#include
using namespace std;
class shujunihe
{
public:
shujunihe():xlh(0),fyl(false),cnt(0),n(9){}
void printb(double (&)[3]);
void printa(double [3][3]);
void printx(double x[3],double a[3][3],double b[3],int n);
void quanzhuyuan(double a[3][3],double b[],int x2[3]);
void restoreA(double a[3][3],double x[]);
double Sum(int r,int c,double []);
double Sumf(int r,double f[],double x[]);
void restoreB(double b[],double f[],double x[]);
void printx2(int x[]);
private:
int xlh;
bool fyl;
int cnt;
int n;
};
void shujunihe::printx2(int x2[])
{
for(int i=0;i<3;i++)
cout< cout< } void shujunihe::restoreB(double b[],double f[],double x[]) { for(int i=0;i<=2;i++) { b[i]=Sumf(i,f,x); } } double shujunihe::Sumf(int r,double f[],double x[]) { double sum=0; for(int i=0;i<=n-1;i++) { sum+=f[i]*pow(x[i], r); } return sum; } double shujunihe::Sum(int r,int c,double x[]) { double sum=0; for(int i=0;i<=n-1;i++ ) { sum+=pow(x[i], r+c); } return sum; } void shujunihe::restoreA(double a[3][3],double x[]) { for(int i=0;i<=2;i++) { for(int j=0;j<=2;j++) { a[i][j]=Sum(i,j,x); } } a[0][0]=n; } void shujunihe::quanzhuyuan(double d[3][3],double c[3],int x2[3]) { double max; int row,col; double temp1,temp2;int temp3; double btemp1; for(int i=0;i<3;i++) { max=fabs(d[i][i]); row=i; col=i; for(int j=i;j<3;j++) { for(int k=i;k<3;k++) { if(fabs(d[j][k])>max) { max=fabs(d[j][k]); row=j; col=k; } } } /* for(int n=0;n { temp1=a[i][n]; a[i][n]=a[row][n]; a[row][n]=temp1; btemp1=b[i]; b[i]=b[row]; b[row]=btemp1; } for(int m=0;m { temp2=a[m][i]; a[m][i]=a[m][col]; a[m][col]=temp2; } */ if(col!=i&&row!=i) { fyl=true; xlh=col; for(int n=0;n<3;n++)//hang { temp1=d[i][n]; d[i][n]=d[row][n]; d[row][n]=temp1; btemp1=c[i]; c[i]=c[row]; c[row]=btemp1; } for(int m=0;m<3;m++)//lie { temp2=d[m][i]; d[m][i]=d[m][col]; d[m][col]=temp2; } } else if(row!=i&&col==i) { for(int n=0;n<3;n++)//hang { temp1=d[i][n]; d[i][n]=d[row][n]; d[row][n]=temp1; btemp1=c[i]; c[i]=c[row]; c[row]=btemp1; } } else if(col!=i&&row==i) { fyl=true; for(int m=0;m<3;m++)//lie { xlh=col; temp2=d[m][i]; d[m][i]=d[m][col]; d[m][col]=temp2;