高斯消元

过程:

将系数矩阵\(A_{n,n}\)和方程右值矩阵\(B_{n,1}\)合并成增广矩阵.

将增广矩阵不断递归变成阶梯型矩阵.

最后逐步回溯得到每个未知数的值.

int judge,n;//n个未知数
double mp[110][110],ans[110];
void dfs(int x)//judge=0表示唯一解,=1表示多组解,=2表示无解
{
	if (x == n)
	{
		if (fabs(mp[n][n]) < 1e-5)
		{
			if (fabs(mp[n][n + 1]) < 1e-5)
				judge = 1;
			else
				judge = 2;
			return;
		}
		ans[x] = mp[n][n + 1] / mp[n][n];
		return;
	}
	for (int i = x + 1; i <= n; i++)
	{
		if (fabs(mp[x][x]) < 1e-5)//交换第x行和第i行
		{
			for (int j = x; j <= n + 1; j++)
				swap(mp[i][j], mp[x][j]);
			continue;
		}
		double p = mp[i][x] / mp[x][x];
		mp[i][x] = 0;
		for (int j = x + 1; j <= n + 1; j++)
		{
			mp[i][j] -= p * mp[x][j];
		}
	}
	dfs(x + 1);
	if (judge != 0)
		return;
	ans[x] = mp[x][n + 1];
	for (int i = x + 1; i <= n; i++)
		ans[x] -= ans[i] * mp[x][i];
	if (fabs(mp[x][x]) < 1e-5)
	{
		if (fabs(ans[x]) < 1e-5)
			judge = 1;
		else
			judge = 2;
		return;
	}
	ans[x] = ans[x] / mp[x][x];
}
posted on 2022-06-28 00:16  naiji  阅读(26)  评论(0编辑  收藏  举报