随笔 - 73  文章 - 0 评论 - 0 阅读 - 6680
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

高斯消元

过程:

将系数矩阵An,n和方程右值矩阵Bn,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   naiji  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示