【发布时间】:2015-05-15 13:27:38
【问题描述】:
我一直在研究这段代码,以获得求解线性方程的下三角矩阵,代码如下:
int jordan (){
float fracc=0;
int z=0;
fila=0;
colum=0;
for(colum=0;colum<cant;colum++) {
buscar_ceros(); /*here we call*/
for(fila=colum+1;fila<cant;fila++) {
if(a[fila][colum]!=0) {
fracc=(-((a[fila][colum])/(a[colum][colum])));
for(z=0;z<=cant;z++) {
a[fila][z]=a[fila][z]+(fracc*a[colum][z]);
}
}
}
}
impri();
return 0;
}
当我在第一个元素不是 0 时输入矩阵时,它可以工作:
输入
0 2 5 6
1 0 -2 4
2 4 0 -2
输出
0 2 5 6
-1.$ -1.$ -1.$ -1.$
1.$ 1.$ 1.$ 1.$
我认为一个可能的解决方案是编写一个算法来对行进行排序,但它可能是另一种方式。
这是我为避免 0 而编写的代码:
int buscar_ceros(){
int m=0,r;
x=0;
flag=0;
do{
if((a[x][colum])!=0){
flag=1;
}
x++;
}while(!(flag==1));
flag=0;
for(r=0;r<=cant;r++){
m=a[x][r];
a[x][r]=a[fila][r];
a[fila][r]=m;
}
return 0;
}
【问题讨论】:
-
您检查
a[fila][colum]是否为零,但除以a[colum][colum]。 -
是的,我没有看到,如果矩阵按行排序并将0行放在其他位置会更好?
-
fracc=(-((a[fila][colum])/(a[colum][colum])));在第一个循环中导致除以 0。