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

📄 第一题.cpp

📁 给定三个n阶线性方程组Ax=b
💻 CPP
字号:
#include<iostream>
#include<cmath>

using namespace std;
double FIR(int m);
double SEC(int m);
double THI(int m);

void main()
{
	int n=0;
	int j=0;
	int r=0;
	
	for(n=3;n<=9;n++)
	{
		cout<<"系数矩阵为a[i][j]=(i+j-1)^2的方程组"<<"阶数为"<<n<<"时:"<<endl;
		FIR(n);

	}
	for(n=3;n<=5;n++)
	{
		cout<<"系数矩阵为a[i][j]=(i+j)^2的方程组"<<"阶数为"<<n<<"时:"<<endl;
		SEC(n);

	}
	for(n=3;n<=6;n++)
	{
		cout<<"系数矩阵为a[i][j]=1/(i+j-1)的方程组"<<"阶数为"<<n<<"时:"<<endl;
		THI(n);

	}	   
}

double FIR(int m)        //m为系数矩阵的阶数
{
	int i=0;
	int j=0;
	int k=0;
	double t=0;
	double MAX=0.0;
	double x[20]={0,0,0,0,0,0,0,0,0,0,0,0,0};
	double a[20][20];
	double b[20]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
	double c[20]={0,0,0,0,0,0,0,0,0,0,0,0,0};
	for(i=1;i<=m;i++)    //计算系数矩阵
	{
		for(j=1;j<=m;j++)
		{
			a[i][j]=pow((i+j-1),2);
		}
	}
	for(i=1;i<=m;i++)      //计算b的值
	{
		for(j=1;j<=m;j++)
		{
			b[i]+=a[i][j];
		}
		a[i][m+1]=b[i];
	}
	
	for(j=1;j<m;j++)           //j为列数,从第一列进行循环计算每列的主元
	{
		MAX=fabs(a[j][j]);
		for(i=j;i<=m;i++)       //i为行数,从第j行进行循环
		{			
			if(fabs(a[i][j])>MAX)
			{
				MAX=fabs(a[i][j]);
				for(k=1;k<=m+1;k++)      //循环换行
				{
					c[k]=a[j][k];              //注意是a[j][k]
				    a[j][k]=a[i][k];
				    a[i][k]=c[k];				
				}
			}
		}
		
		cout<<"第"<<j<<"步消元的主元是"<<a[j][j]<<endl;
		for(i=j+1;i<=m;i++)              //循环消元
		{
			
			t=a[i][j]/a[j][j];      //在此小循环内是定值,第j行所乘的系数
			for(k=j;k<=m+1;k++)          //k作为列号
			{
				a[i][k]=a[i][k]-a[j][k]*t;

			}
			
		}
	}
	for(i=m;i>0;i--)
	{
		
		for(j=i+1;j<=m;j++)
		{
			a[i][m+1]-=a[i][j]*x[j];   //超出范围的x[m+1]初始化为0,所以不影响结果
		}
		x[i]=a[i][m+1]/a[i][i];
		cout<<"x"<<i<<"="<<x[i]<<endl;
	}
	
	
	return 0;
}

double SEC(int m)        //m为系数矩阵的阶数
{
	int i=0;
	int j=0;
	int k=0;
	double t=0;
	double MAX=0.0;
	double x[20]={0,0,0,0,0,0,0,0,0,0,0,0,0};
	double a[20][20];
	double b[20]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
	double c[20]={0,0,0,0,0,0,0,0,0,0,0,0,0};
	for(i=1;i<=m;i++)    //计算系数矩阵
	{
		for(j=1;j<=m;j++)
		{
			a[i][j]=pow((i+j),2);
		}
	}
	for(i=1;i<=m;i++)      //计算b的值
	{
		for(j=1;j<=m;j++)
		{
			b[i]+=a[i][j];
		}
		a[i][m+1]=b[i];
	}

	for(j=1;j<m;j++)           //j为列数,从第一列进行循环计算每列的主元
	{
		MAX=fabs(a[j][j]);
		for(i=j;i<=m;i++)       //i为行数,从第j行进行循环
		{			
			if(fabs(a[i][j])>MAX)
			{
				MAX=fabs(a[i][j]);
				for(k=1;k<=m+1;k++)      //循环换行
				{
					c[k]=a[j][k];              //注意是a[j][k]
				    a[j][k]=a[i][k];
				    a[i][k]=c[k];				
				}
			}
		}
		cout<<"第"<<j<<"步消元的主元是"<<a[j][j]<<endl;
		for(i=j+1;i<=m;i++)              //循环消元
		{
			
			t=a[i][j]/a[j][j];      //在此小循环内是定值,第j行所乘的系数
			for(k=j;k<=m+1;k++)          //k作为列号
			{
				a[i][k]=a[i][k]-a[j][k]*t;

			}
			
		}


	}
	for(i=m;i>0;i--)
	{
		
		for(j=i+1;j<=m;j++)
		{
			a[i][m+1]-=a[i][j]*x[j];   //超出范围的x[m+1]初始化为0,所以不影响结果
		}
		x[i]=a[i][m+1]/a[i][i];
		cout<<"x"<<i<<"="<<x[i]<<endl;
	}
	
	
	return 0;
}

double THI(int m)        //m为系数矩阵的阶数
{
	int i=0;
	int j=0;
	int k=0;
	double t=0;
	double MAX=0.0;
	double x[20]={0,0,0,0,0,0,0,0,0,0,0,0,0};
	double a[20][20];
	double b[20]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
	double c[20]={0,0,0,0,0,0,0,0,0,0,0,0,0};
	for(i=1;i<=m;i++)    //计算系数矩阵
	{
		for(j=1;j<=m;j++)
		{
			a[i][j]=1.0/(i+j-1);
		}
	}
	for(i=1;i<=m;i++)      //计算b的值
	{
		for(j=1;j<=m;j++)
		{
			b[i]+=a[i][j];
		}
		a[i][m+1]=b[i];
	}
	

	for(j=1;j<m;j++)           //j为列数,从第一列进行循环计算每列的主元
	{
		MAX=fabs(a[j][j]);
		for(i=j;i<=m;i++)       //i为行数,从第j行进行循环
		{			
			if(fabs(a[i][j])>MAX)
			{
				MAX=fabs(a[i][j]);
				for(k=1;k<=m+1;k++)      //循环换行
				{
					c[k]=a[j][k];              //注意是a[j][k]
				    a[j][k]=a[i][k];
				    a[i][k]=c[k];				
				}
			}
		}
		cout<<"第"<<j<<"步消元的主元是"<<a[j][j]<<endl;
		for(i=j+1;i<=m;i++)              //循环消元
		{
			
			t=a[i][j]/a[j][j];      //在此小循环内是定值,第j行所乘的系数
			for(k=j;k<=m+1;k++)          //k作为列号
			{
				a[i][k]=a[i][k]-a[j][k]*t;

			}
			
		}

	}
	for(i=m;i>0;i--)
	{
		
		for(j=i+1;j<=m;j++)
		{
			a[i][m+1]-=a[i][j]*x[j];   //超出范围的x[m+1]初始化为0,所以不影响结果
		}
		x[i]=a[i][m+1]/a[i][i];
		cout<<"x"<<i<<"="<<x[i]<<endl;
	}
	
	
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -