Тема: Вирішення системи лінійних рівнянь методом Гауса
Всіх вітаю, намагаюсь написати програму для вирішення СЛР методом Гауса. Почав із найзагальнішого випадку
3 рівняння 3 змінні 3 відповіді
Все це намагаюсь обробити одним масивом і парою змінних.
Вдалось змінити рядки місцями якщо 1 член 1 ряду = 0,
Вдалося звести до нуля 1 член 2 ряду.
Але по аналогії код для 1 члена 3 ряду і для 2 члена 3 ряду не працює належним чином.
Ось те, що уже написав.
#include <stdio.h>
#include <conio.h>
#include <math.h>
main()
{
float a;
int c, i;
float matrix[15];
a = i = 0;
printf("Metod Gausa dlya rishennya System Liniynih rivnan' vitae vas!\n");
printf("\nVvedit zna4ennya chleniv\n");
for(i = 0; i < 12; i++)
scanf("%22e", &matrix[i]);
//Step 1
/* Перевіряємо перший член на "0", якщо true - міняємо 2-ий і 1-ий рядок місцями*/
if(matrix[0] == 0){
for(i = 0; i < 4; i++){
matrix[i+12] = matrix[i];
}
for(i = 4; i < 8; i++){
matrix[i-4] = matrix[i];
}
for(i = 4; i < 8; i++){
matrix[i] = matrix[i+8];
}
}
printf("\nStep 1\n");
for(i=0; i<4; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
for(i=4; i<8; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
for(i=8; i<12; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
for(i=12; i<16; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
//Step 2
/* Перевіряємо перший член на "0", якщо true - міняємо 3-ий і 1-ий рядок місцями*/
if(matrix[0] == 0){
for(i = 0; i < 4; i++){
matrix[i+12] = matrix[i];
}
for(i = 8; i < 12; i++){
matrix[i-8] = matrix[i];
}
for(i = 8; i < 12; i++){
matrix[i] = matrix[i+4];
}
}
printf("\nStep 2\n");
for(i=0; i<4; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
for(i=4; i<8; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
for(i=8; i<12; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
for(i=12; i<16; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
//Step 3
// Робимо із першого члена другого рядка нуль
if(matrix[4] != 0){
a = - (double) matrix[0] / matrix[4];
for(i = 4; i < 8; i++)
matrix[i] = matrix[i] * a + matrix[i-4];
}
printf("\nStep 3\n");
for(i=0; i<4; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
for(i=4; i<8; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
for(i=8; i<12; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
for(i=12; i<16; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
//if(matrix[4] != 0)
//printf("ERROR");
//Step 4
// Робимо із першого члена третього рядка нуль
if(matrix[4] == 0 && matrix[8] != 0){
a = - (double) matrix[0] / matrix[8];
for(i = 8; i < 12; i++)
matrix[i] = matrix[i] * a + matrix[i-8];
}
printf("\nStep 4\n");
for(i=0; i<4; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
for(i=4; i<8; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
for(i=8; i<12; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
for(i=12; i<16; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
// Step 5
// Робимо із другого члена третього рядка нуль
if(matrix[8] == 0 && matrix[4] == 0 && matrix[9] != 0){
a = - (double) matrix[5] / matrix[9];
for(i = 8; i < 12; i++)
matrix[i] = matrix[i] * a + matrix[i-4];
} else if(matrix[9] != 0)
printf("a32 = 0");
printf("\nStep 5\n");
for(i=0; i<4; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
for(i=4; i<8; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
for(i=8; i<12; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
for(i=12; i<16; i++)
printf("%2.3f ",matrix[i]);
printf("\n");
return 0;
}
Які ідеї?