在实际运用中需判断线性方程组有无解,可以通过矩阵运算判断线性方程组是否有解文章来源:https://www.toymoban.com/news/detail-517906.html
线性方程组有无解总结:
矩阵求解秩流程:
所以:当我们遇到题目问线性方程组是否有解时,只需求解系数矩阵的秩与增广矩阵的秩的关系 。我们可以通过分别求系数矩阵与增广矩阵的秩来判断
代码实现:文章来源地址https://www.toymoban.com/news/detail-517906.html
// 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);
}
到了这里,关于【算法竞赛模板】求解线性方程组是否有解(求解矩阵的秩)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!