⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 拟合.cpp

📁 插值,常微分方程的初值,非线性方程的跟的求解,拟合,微分,线性方程组的求解,积分的实现
💻 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 + -