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

📄 matrix_ahoi07_door.cpp

📁 线性代数 求矩阵的逆 高斯gauss消元
💻 CPP
字号:
#include <stdio.h>
#include <string.h>
#include <math.h>
const int maxn = 210;
const double eps=1e-5;

int n;
double A[maxn][maxn],B[maxn][maxn];

void init() {
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
		for (int j=1;j<=n;j++)	{
			scanf("%lf",&A[i][j]);
			B[i][j]=(double)(i==j);
		}
}
void swap(double &x,double &y) {
	double t=x;x=y;y=t;
}

void work() {
	for (int i=1;i<=n;i++) {
		int line=i;
		for (int j=i+1;j<=n;j++)
			if (fabs(A[j][i])>fabs(A[line][i]))
				line=j;
		for (int j=1;j<=n;j++)	{
			swap(A[line][j],A[i][j]);
			swap(B[line][j],B[i][j]);
		}
		double tmp=A[i][i];
		for (int j=1;j<=n;j++) {
			A[i][j]/=tmp;
			B[i][j]/=tmp;
		}	//将A[i][i]变成1
		for (int j=1;j<=n;j++)
			if (j!=i)	{	//将A[j][i] (j!=i) 变成0
				tmp=A[j][i];
				for (int k=1;k<=n;k++)	{	//初等变换 整行操作..
					A[j][k]-=A[i][k]*tmp;	//A[j][i]-=A[i][i]*A[j][i]=0
					B[j][k]-=B[i][k]*tmp;
				}
			}
	}
	
	for (int i=1;i<=n;i++)
		for (int j=1;j<=n;j++)	{
			printf("%.0lf",B[i][j]+eps);
			if (j<n)
				printf(" ");
			else
				printf("\n");
		}
}

int main() {
	freopen("door.in","r",stdin);
	freopen("door.out","w",stdout);
	init();
	work();
	return 0;
}

⌨️ 快捷键说明

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