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

📄

📁 列主消元法解线性方程组源程序
💻
字号:
#include<iostream.h>
#include<math.h>

void col_expunction(int n,double** a,double* b)    //列主消元法函数
{
	double* x=new double[n];
	int* q=new int [n];
	for(int i=0;i<n;i++)
		q[i]=i;

	if(n==1)x[0]=b[0]/a[0][0];                     //当n=1时的处理

	for(int k=0;k<n-1;k++){                       //选最大系数列
		double max=fabs(a[q[k]][k]); int p=q[k];
		for(int j=k+1;j<n;j++){
			if(max<fabs(a[q[j]][k])){
				max=a[q[j]][k];
				p=q[j];
			}
		}

		for(i=k+1;i<n;i++){
			if(q[i]==p){
				q[i]=q[k];
				q[k]=p;
				break;
			}
		}

		for(i=k+1;i<n;i++){                          //方程求解过程
			double l=(a[q[i]][k])/a[p][k];
			for(j=k+1;j<n;j++)
				a[q[i]][j]=a[q[i]][j]-l*(a[p][j]);
			b[q[i]]=b[q[i]]-l*b[p];
		}

		x[n-1]=b[q[n-1]]/a[q[n-1]][n-1];
		for(i=n-2;i>=0;i--){
			double y=0;
			for(j=i+1;j<n;j++)
				y+=a[q[i]][j]*x[j];
			x[i]=(b[q[i]]-y)/a[q[i]][i];
		}
	}

	for(i=0;i<n;i++)        
		b[i]=x[i];
}


void main()
{
	char ch;
	do{
		int n;
		cout<<"Input n:";
		cin>>n;

		double** a=new double* [n];
		for(int i=0;i<n;i++)
			a[i]=new double[n];
		double* b=new double [n];
			
		cout<<endl<<"自动生成Hilbert矩阵?(y=yes||anykey=no):";
		cin>>ch;

		if(ch!='y'&&ch!='Y'){
			cout<<"\nInput a[i][j](1<=i,j<=n):\n";
			for(i=0;i<n;i++)
				for(int j=0;j<n;j++)
					cin>>a[i][j];
		
			cout<<"\nInput b[i](1<=i<=n):\n";
			for(i=0;i<n;i++)
				cin>>b[i];
		}
		else{
		
			for(i=0;i<n;i++)
				for(int j=0;j<n;j++)
					a[i][j]=(double)1/(i+j+1);

			for(i=0;i<n;i++){
				b[i]=0;
				for(int j=0;j<n;j++)
					b[i]+=(double)(j+1)/(i+j+1);
			}
		}

		col_expunction(n,a,b);

		cout<<endl<<"方程组的解为:"<<endl;
		for(i=0;i<n;i++)
			cout<<"x["<<i<<"]="<<b[i]<<"\t";
		cout<<endl;

		cout<<endl<<"Continue?(y=yes||anykey=no):";
		cin>>ch;
		cout<<endl;

	}while(ch=='y'||ch=='Y');

}

⌨️ 快捷键说明

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