【发布时间】:2011-03-28 03:17:14
【问题描述】:
我尝试将高斯消除的伪代码 - http://en.wikipedia.org/wiki/Gaussian_elimination#Pseudocode 转换为 C 中的实际实现。我已经做到了,我没有收到任何错误,但我得到的输出与输入相同。有谁知道,我哪里有错误?作为输入,我有 3x4 矩阵 A,其中 num 表示行数(在本例中为 3),num+1 表示列数。
void GE(){
int i=1;
int j=1;
int k,u;
while(i<=num && j<=num+1){
int maxi=i;
for(k=i+1;k<num;k++){
if(abs(A[k][j])>abs(A[maxi][j])){
maxi=k;
}
}
if(A[maxi][j]!=0){
float p;
p=A[maxi][j];
A[maxi][j]=A[i][j];
A[i][j]=p;
for(u=i+1;u<num;u++){
A[u][j]=A[u][j]-A[i][j]*A[u][j];
}
}//endif
j++;
i++;
}//endwhile
编辑:
FILE *inputMatrix=fopen("file.in","r");
fscanf(inputMatrix,"%d",&num);
for(i=0;i<num;++i){
for(j=0;j<num+1;++j){
fscanf(inputMatrix,"%f",&A[i][j]);
}
}
fclose(inputMatrix);
file.in:
3
2 1 -1 8
-3 -1 2 -11
-2 1 2 -3
【问题讨论】:
-
您需要向我们展示变量num、A等
-
我假设您认为在 C 数组中的索引从 0 开始,而在“伪代码”中它们通常从 1 开始。所以 A 应该有一个虚拟的行和列。
-
现在我处于同一阶段,在第三行中我得到零而不是 1...我已经纠正了它,所以我从 i=0 和 j=0 开始
-
仍然没有解决方案 :-( 我已经多次检查该代码,但我仍然没有发现任何错误......
标签: c