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

📄 gaosixiaoqu.cpp

📁 可计算任意元一次方程组。 计算时只需将方程化成方程矩阵
💻 CPP
字号:
//列主元消去法求解方程组
#include "stdio.h"
#define n 3						  //自主定义方程矩阵行列数

float max(float d[],int w)        //w为数组中元素个数
{
	float a[10];
	int i;
	for(i=0;i<w;i++)
	{
		a[i]=d[i];
	}
	for(i=0;i<w-1;i++)
	{
		a[i]>a[i+1]?a[i+1]=a[i]:a[i+1]=a[i+1];
	}
	return(a[w-1]);
}




void main()
{
	int k,r,i,j,p[n];
	float a[n][n],b[n],c[n],m,sum,exch;
	double q=0.000001;
	static float l[n][n];

	
	printf("enter the matrix A:");       //初始化矩阵a[n][n]
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%f",&a[i][j]);
		}
	}
	for(i=0;i<n;i++)
	{
		p[i]=i;                          //记录行信息
	}
		
	printf("enter the matrix b:");       //初始化矩阵b[n]
	for(i=0;i<n;i++)
	scanf("%f",&b[i]);
   
	for(k=1;k<=n-1;k++)
	{
		for(i=0;i<=n-k;i++)
			c[i]=a[k+i-1][k-1];
		
		for(r=k;r<=n;r++)
		{
			if(a[r-1][k-1]==max(c,n-k+1))break;
		}
	
		//奇异矩阵处理
		if(a[r-1][k-1]<q)printf("odd result");
		//换行处理
		else if(r!=k)
		{
			for(j=k;j<=n;j++)
			{
				exch=a[k-1][j-1];
				a[k-1][j-1]=a[r-1][j-1];
				a[r-1][j-1]=exch;
			}
			exch=b[k-1];
			b[k-1]=b[r-1];
			b[r-1]=exch;
			exch=p[k-1];
			p[k-1]=p[r-1];
			p[r-1]=exch;
		
		}
	
		//消元计算
        for(i=k+1;i<=n;i++)
		{
			m=a[i-1][k-1]/a[k-1][k-1];
			a[i-1][k-1]=m;
			l[i-1][k-1]=m;                                //赋值L矩阵
			for(j=k+1;j<=n;j++)
			{
				a[i-1][j-1]=a[i-1][j-1]-m*a[k-1][j-1];
			
			}
			b[i-1]=b[i-1]-m*b[k-1];
		}
	}
	//回代求解
	if(a[n-1][n-1]!=0)b[n-1]=b[n-1]/a[n-1][n-1];
	for(i=n-1;i>=1;i--)
	{
		sum=0;
		for(j=i+1;j<=n;j++)
		{
			sum=sum+a[i-1][j-1]*b[j-1];
		}
		b[i-1]=(b[i-1]-sum)/a[i-1][i-1];
	}
	//输出计算解
	printf("************************************************\nthe answer is:\n");
    for(i=1;i<=n;i++)
		printf("X[%d]:%f\n",p[i-1]+1,b[i-1]);
	printf("************************************************\nU matrix is:\n");
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
			printf("%f  ",a[i-1][j-1]-l[i-1][j-1]);
		printf("\n");
	}
	for(i=0;i<n;i++)
		l[i][i]=1;
	printf("************************************************\nL matrix is:\n");
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
			printf("%f  ",l[i-1][j-1]);
		printf("\n");
	}

}

⌨️ 快捷键说明

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