写了一个有限域上矩阵求秩的函数,旁观者清.能否帮我看看是不是有问题(逻辑上的)?
来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:数学作业 时间:2024/08/06 23:37:43
写了一个有限域上矩阵求秩的函数,旁观者清.能否帮我看看是不是有问题(逻辑上的)?
使用的是高斯消去的行初等变换,
能够提出优化同样欢迎.将采纳第一位提出Bug 的大侠.
/* 求秩 */
// GMatrix mat 是有限域上的矩阵
int Rank_(GMatrix mat){
int i,j,k;
int jtimes;
// 跳出,当循环到矩阵行末或列末
// mat.rr 为行数,mat.cc 为列数
for(i = 0,j = 0; (i < mat.rr)&&(j < mat.cc); ++i,++j){ // i:row,j:col
if(mat.Get(i,j)==0){ // leading entry = 0
for(k = i+1; k < mat.rr; ++k){ // 在同列下面的找头一个项不是零的
if(mat.Get(k,j)!=0){ // 第k 行找到了,则将第k 行加到第 i 行
mat.Row_plus_row(i,k);
break;
}
}
if(k >= mat.rr){ //如果这列所有的元素都是零,则移动到下一列
--i;
continue;
}
}
for(k = i+1; k < mat.rr; ++k){ //用第i 行将余下所有行第j 列元素都消去
if(mat.Get(k,j) == 0) continue; //如果该行第j 列元素为零则不用消去
//galois_single_divide()是在伽罗瓦域上mat.Get(i,j)除以mat.Get(k,j),mat.ww 是域大小
jtimes = galois_single_divide(mat.Get(k,j),mat.Get(i,j),mat.ww);
//Row_plus_irow 将第i 行元素乘以jtimes 加到第k 行上
mat.Row_plus_irow(k,i,jtimes);
}
}
//当到达行末或者列末,则行初等变换结束
return i; //返回初等变换的最后一行即秩大小
}
使用的是高斯消去的行初等变换,
能够提出优化同样欢迎.将采纳第一位提出Bug 的大侠.
/* 求秩 */
// GMatrix mat 是有限域上的矩阵
int Rank_(GMatrix mat){
int i,j,k;
int jtimes;
// 跳出,当循环到矩阵行末或列末
// mat.rr 为行数,mat.cc 为列数
for(i = 0,j = 0; (i < mat.rr)&&(j < mat.cc); ++i,++j){ // i:row,j:col
if(mat.Get(i,j)==0){ // leading entry = 0
for(k = i+1; k < mat.rr; ++k){ // 在同列下面的找头一个项不是零的
if(mat.Get(k,j)!=0){ // 第k 行找到了,则将第k 行加到第 i 行
mat.Row_plus_row(i,k);
break;
}
}
if(k >= mat.rr){ //如果这列所有的元素都是零,则移动到下一列
--i;
continue;
}
}
for(k = i+1; k < mat.rr; ++k){ //用第i 行将余下所有行第j 列元素都消去
if(mat.Get(k,j) == 0) continue; //如果该行第j 列元素为零则不用消去
//galois_single_divide()是在伽罗瓦域上mat.Get(i,j)除以mat.Get(k,j),mat.ww 是域大小
jtimes = galois_single_divide(mat.Get(k,j),mat.Get(i,j),mat.ww);
//Row_plus_irow 将第i 行元素乘以jtimes 加到第k 行上
mat.Row_plus_irow(k,i,jtimes);
}
}
//当到达行末或者列末,则行初等变换结束
return i; //返回初等变换的最后一行即秩大小
}
![写了一个有限域上矩阵求秩的函数,旁观者清.能否帮我看看是不是有问题(逻辑上的)?](/uploads/image/z/17078390-62-0.jpg?t=%E5%86%99%E4%BA%86%E4%B8%80%E4%B8%AA%E6%9C%89%E9%99%90%E5%9F%9F%E4%B8%8A%E7%9F%A9%E9%98%B5%E6%B1%82%E7%A7%A9%E7%9A%84%E5%87%BD%E6%95%B0%2C%E6%97%81%E8%A7%82%E8%80%85%E6%B8%85.%E8%83%BD%E5%90%A6%E5%B8%AE%E6%88%91%E7%9C%8B%E7%9C%8B%E6%98%AF%E4%B8%8D%E6%98%AF%E6%9C%89%E9%97%AE%E9%A2%98%EF%BC%88%E9%80%BB%E8%BE%91%E4%B8%8A%E7%9A%84%EF%BC%89%3F)
ug1:
//galois_single_divide()是在伽罗瓦域上mat.Get(i,j)除以mat.Get(k,j),mat.ww 是域大小
jtimes = galois_single_divide(mat.Get(k,j), mat.Get(i,j), mat.ww);
这里是谁除以谁?为什么我觉得弄反了?
bug2:
//Row_plus_irow 将第i 行元素乘以jtimes 加到第k 行上
mat.Row_plus_irow(k, i, jtimes);
应该是第k行减去第i行乘以jtimes,不是加上吧?
//galois_single_divide()是在伽罗瓦域上mat.Get(i,j)除以mat.Get(k,j),mat.ww 是域大小
jtimes = galois_single_divide(mat.Get(k,j), mat.Get(i,j), mat.ww);
这里是谁除以谁?为什么我觉得弄反了?
bug2:
//Row_plus_irow 将第i 行元素乘以jtimes 加到第k 行上
mat.Row_plus_irow(k, i, jtimes);
应该是第k行减去第i行乘以jtimes,不是加上吧?
matlab编函数求矩阵的最小值和最大值?求大神帮我看看我写的哪有问题?
帮我看看这句话有语法和逻辑上的错误不
帮我看看有没有问题,语法上的
在某英语杂志上看到的一句话,大家帮我看看是不是有错误
我写了一个课前五分钟的英语演讲稿,请各位速速帮我看看,明天就得上场了!帮我看看有木有语法上啊,或者
我写了一段英文,大家帮我看看有没有语法和用法上的错误呗!
帮我看看这篇文章有没有严重的语法逻辑错误!谢谢了!
关于下面这个矩阵相加的问题,请帮我看看少了什么
帮我看看我写的英语作文,有语法上的问题没?文章结构,给点建议.怎样写好作文.
帮我看看我写的这个句子有没有问题!(我在写作文)
帮我看看这句我自己写的英语 语法上有错误没?
帮看看我写的dd,提些语法上的错误.谢了