【算法竞赛模板】求解线性方程组是否有解(求解矩阵的秩)

这篇博客介绍了如何通过矩阵秩来判断线性方程组是否有解。核心内容包括矩阵求解秩的流程和代码实现,展示了如何计算系数矩阵和增广矩阵的秩,并以此判断解的存在性。通过理解这个方法,读者可以更好地解决线性代数中的方程组问题。
摘要由CSDN通过智能技术生成


  在实际运用中需判断线性方程组有无解,可以通过矩阵运算判断线性方程组是否有解

在这里插入图片描述
在这里插入图片描述
线性方程组有无解总结:
在这里插入图片描述
矩阵求解秩流程:
在这里插入图片描述
  所以:当我们遇到题目问线性方程组是否有解时,只需求解系数矩阵的秩与增广矩阵的秩的关系 。我们可以通过分别求系数矩阵与增广矩阵的秩来判断

代码实现:

// mat是矩阵,rows是矩阵的行数,cols是矩阵的列数
void jude(vector<vector<float>> mat, int rows, int cols) {
	int k, r = 0, d = 0; // r表示秩,d表示当前在哪一行
	for (int i = 0; i < cols; i++) {
		k = d;
		for (int j = d+1; j < rows; j++) {
			if (fabs(mat[k][i]) < fabs(mat[j][i]))
				k = j;
		}
		if (k != d) { // 交换第i行和第k行,行列式该变号
			for (int j = i; j < cols; j++) {
				float temp = mat[d][j];
				mat[d][j] = mat[k][j];
				mat[k][j] = temp;
			}
		}
		if (mat[d][i] == 0) { // 当mat[i][i]为零是时,行列式为零
			continue;
		}
		else {
			r += 1;
			for (int j = 0; j < rows; j++) {
				if (j != d) {
					temp = -1 * mat[j][i] / mat[d][i];
					for (k = i; k < cols; k++) 
						mat[j][k] = mat[j][k] + temp * mat[d][k];
				}
			}
			temp = mat[d][i];
			for(int j = i; j<cols; j++)
				mat[d][j] = mat[d][j] / temp;
		}
		d += 1;
		if (d >= m)
			break;
	}

	printf("矩阵的秩为:%d\n", r);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ac君

在你们的鼓励下我会多多分享代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值