最小二乘法求拟合曲线(带测试数据)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include"iostream"
#include"iomanip"
#include"stdlib.h"
#include"math.h"
using namespace std;
double x[50],y[50],a[50][50],C[50];
int i,j,n,c;
void main()
{
cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(5);//调节精度
7 4
8 3
3
*/
{
if(a[k][k]==0)
{
cout<<"算法失败!";
break;
}
for(int i=k+1;i<=c+1;i++)
{
double l=a[i][k]/a[k][k];
for(j=k+1;j<=c+2;j++)
a[i][j]=a[i][j]-l*a[k][j];
}
}
if(a[c+1][c+1]==0)
}
cout<<"拟合曲线为:y="<<C[1];
for(i=2;i<c+2;i++)
{
if(C[i]<0) cout<<C[i]<<"*x^"<<i-1;
else cout<<"+"<<C[i]<<"*x^"<<i-1;
}
cout<<endl;
}Baidu Nhomakorabea
/*
9
0 1
1 2.5
2 2
3 1
4 3
5 5
6 5.5
{
cout<<"算法失败!";
}
else {
for(int k=c+1;k>=1;k--)
{
double s=0;
for(j=k+1;j<=c+1;j++)
s+=a[k][j]*C[j];
C[k]=(a[k][c+2]-s)/a[k][k];
}
for(i=1;i<=c+1;i++)
cout<<"C["<<i<<"]="<<C[i]<<endl;
for(j=1;j<=c+1;j++)
for(int p=0;p<n;p++)
a[i][j]+=pow(x[p],(i+j-2));
for( i=1;i<=c+1;i++)
for(int p=0;p<n;p++)
a[i][c+2]+=pow(x[p],i-1)*y[p];
for(int k=1;k<=c;k++)
cout<<"此算法计算结果保留五位小数"<<endl;
cout<<"输入数据的组数(n):";
cin>>n;
cout<<"输入数据(x,y):"<<endl;
for(i=0;i<n;i++)
{
cin>>x[i]>>y[i];
}
cout<<"拟合曲线的最高次数:";
cin>>c;
for( i=1;i<=c+1;i++)
相关文档
最新文档