My Gauss Eliminationコードの結果は、Visual Studioでは-nanですが、Linuxでは表示されません。なぜ私のコードは、Linuxではなく、Visual Studioで返されますか?
func Gauss_Eliで変数がどれくらい増えたのか、funcが動作しているブロックで変数k
を増やすと、結果はひどいです...セグメントエラーは発生しません。
私のコードで何が問題になっていますか?
float ** Gauss_Eli(float ** matrix, int n) {
// -----------------------------------------------------
// | |
// | Eliminate elements except (i, i) element |
// | |
// -----------------------------------------------------
// Eliminate elements at lower triangle part
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
for (int k = 0; k < n + 1; k++) {
float e;
e = matrix[i][k] * (matrix[j][i]/matrix[i][i]);
matrix[j][k] -= e;
}
}
}
// Eliminate elements at upper triangle part
for (int i = n - 1; i >= 0; i--) {
for (int j = i - 1; j >= 0; j--) {
for (int k = 0; k < n + 1; k++) {
float e;
e = matrix[i][k] * (matrix[j][i]/matrix[i][i]);
matrix[j][k] -= e;
}
}
}
// Make 1 elements i, i
for (int i = 0; i < n; i++)
for (int j = 0; j < n + 1; j++) matrix[i][j] /= matrix[i][i];
return matrix;
}
int main() {
float ** matrix;
int n;
printf("Matrix Size : ");
scanf("%d", &n);
// Malloc variable matrix for Matrix
matrix = (float**)malloc(sizeof(float) * n);
for (int i = 0; i < n; i++) matrix[i] = (float*)malloc(sizeof(float) * (n + 1));
printf("Input elements : \n");
for (int i = 0; i < n; i++)
for (int j = 0; j < n + 1; j++) scanf("%f", &matrix[i][j]);
matrix = Gauss_Eli(matrix, n);
printf("Output result : \n");
//Print matrix after elimination
for (int i = 0; i < n; i++) {
for (int j = 0; j < n + 1; j++) printf("%.6f ", matrix[i][j]);
printf("\n");
}
return 0;
}
あなたはゼロどこかで除算を持っている場合、正確な減算を確認してください。あなたが持っているすべての部門をチェックしてください。 –
'matrix [i] [i]'は '.../matrix [i] [i])で使用する前に0.0になりません。 – chux
'matrix =(float **)malloc(sizeof(float)* n);'が間違っています。 'matrix = malloc(sizeof * matrix * n);'を使い、間違ったサイズを使うことのエラーを避けてください。 – chux