Тема: Зведення до нуля всіх елементів n x n матриці нижче головної діагоналі
Пишу програмку для вирішення матриці методом Гауса.
Метод використовую із цієї теми.
Множимо елементи які необхідно звести до нуля, на таке число а, щоб при додаванні відповідного члену попереднього рядка вийшов 0.
Хочу зробити програму універсальною, тому використовую наступну функцію:
for(i = 1; i < row; i++){ //Змінну i використовуємо для визначення рядка, над яким зараз працюємо
for(j = 0; j < i; j++){ //Змінну j використовуємо для позначення головної діагоналі
a = - (double) (matrix[j][j] / matrix[i][j]);
for(k = 0; k < col; k++){//Цикл призначений для проходження всього рядка
matrix[i][k] = ( matrix[i][k] * a ) + matrix[i-1][k];
}
matrix[i][j] = fabs(matrix[i][j]);//Використовуємо модуль для члену, який зводиться до нуля
}
}
row - рядки
col - колонки
Перший член другого рядка правильно зводиться до нуля, перший член третього рядка теж, а от після зведення другого члена третього рядка до нуля отримуємо наступний вивід:
Step 1: Leading all members under main diagonal to null
1.00000 2.00000 3.00000 4.00000
0.00000 0.50000 1.00000 1.50000
0.60000 0.00000 0.60000 1.20000
-1.30000 -1.25000 0.00000 -1.25000
-2.500000Press any key to continue...
При чому після зведення другого члена третього рядка до нуля a = 0.60000.
В прикладі матриця 4 х 4
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
Що не так із функцією?