📄 拟合.cpp
字号:
//////////////////////////////////////////////////////////////////////////////////////////////
#include"myhead.h"
/////////////////////////////////////////////////////////////////////////////////////////////
void fun_4()
{
system("cls");//执行系统清屏命令
cout<<" ******************************************************************"<<endl
<<" * 拟合 *"<<endl
<<" ******************************************************************"<<endl;
fun();
system("pause");
}
//////////////////////////////////////////////////////////////////////////////////////////////
double fx4(double x[],int n,int m)
{
double sum=0;
for(int i=0;i<n;i++)
sum=sum+pow(x[i],m);
return sum;
}
/////////////////////////////////////////////////////////////////////////////////////////
double fxy4(double x[],double y[],int n,int m)
{
double sum=0;
for(int i=0;i<n;i++)
sum=sum+pow(x[i],m)*y[i];
return sum;
}
//////////////////////////////////////////////////////////////////////////////////////////
void fun( )
{
int m,n,i,j,k,pirotrow;
double temp,b1,c1=0;
double a[10][10],b[10],c[10],x[10],y[10];
cout<<" 请输入你要拟合公式的次数:";
cin>>m;
cout<<" 请输入数据的个数:";
cin>>n;
cout<<" 请输入"<<n<<"个X的数据:";
for(i=0;i<n;i++)
cin>>x[i];
cout<<" 请输入"<<n<<"个Y的数据:";
for(i=0;i<n;i++)
cin>>y[i];
for(i=0;i<=2*m;i++)
b[i]=fx4(x,n,i);
for(i=0;i<=m;i++)
c[i]=fxy4(x,y,n,i);
for(i=0;i<=m;i++)
{
a[i][m+1]=c[i];
for(j=0,k=i;j<=m,k<=i+m;j++,k++)
a[i][j]=b[k];
}
cout<<" 产生的方程组的增广矩阵为:"<<endl;
for(i=0;i<=m;i++)
{
for(j=0;j<=m+1;j++)
{
cout<<setiosflags(ios::fixed)<<setprecision(5);
cout<<" "<<a[i][j]<<" ";
}
cout<<endl;
}
for(i=0;i<=m-1;i++)
{
pirotrow=i;
for(j=i+1;j<=m;j++)
if(fabs(a[j][i])>fabs(a[pirotrow][i]))
pirotrow=j;
for(k=i;k<=m+1;k++)
{
temp=a[i][k];
a[i][k]=a[pirotrow][k];
a[pirotrow][k]=temp;
}
for(j=i+1;j<=m;j++)
{
b1=a[j][i]/a[i][i];
for(k=i;k<=m+1;k++)
a[j][k]=a[j][k]-a[i][k]*b1;
}
}
x[m]=a[m][m+1]/a[m][m];
for(i=m-2;i>=0;i--)
{
c1=0;
for(j=i+1;j<=m;j++)
c1=a[i][j]*x[j]+c1;
x[i]=(a[i][m]-c1)/a[i][i];
}
cout<<" 产生的拟合公式为a0+a1*x+a2*x*x+.......+am*pow(x,m) :"<<endl;
cout<<" 其中的a(i)值分别为:";
for(i=0;i<=m;i++)
{
cout<<setiosflags(ios::fixed)<<setprecision(4);
cout<<'a'<<i<<'='<<x[i]<<" ";
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -