91 lines
2.2 KiB
C
91 lines
2.2 KiB
C
#include <stdio.h>
|
|
#include <stdbool.h>
|
|
|
|
double matA[4][4] = {
|
|
{1.1161, 0.1254, 0.1397, 0.1490},
|
|
{0.1582, 1.1675, 0.1768, 0.1871},
|
|
{0.2368, 0.2471, 0.2568, 1.2671},
|
|
{0.1968, 0.2071, 1.2168 ,0.2271}
|
|
};
|
|
|
|
double matB[4] = {
|
|
1.5471, 1.6471, 1.8471, 1.7571
|
|
};
|
|
|
|
void rowManipulation(int originRow, double coefficent, int rowBeingAdded) {
|
|
int col = 0;
|
|
for (col = 0; col < 4; col++) {
|
|
matA[rowBeingAdded][col] += matA[originRow][col] * coefficent;
|
|
}
|
|
matB[rowBeingAdded] += matB[originRow] * coefficent;
|
|
}
|
|
|
|
void timesOfRow(int rowCount, double time) {
|
|
int col = 0;
|
|
for (col = 0; col < 4; col++) {
|
|
matA[rowCount][col] *= time;
|
|
}
|
|
matB[rowCount] *= time;
|
|
}
|
|
|
|
int findNoneZeroItem(int startRowIndex, int columnIndex) {
|
|
bool found = false;
|
|
int pos = startRowIndex;
|
|
for (pos = startRowIndex; pos < 4; pos++) {
|
|
if (matA[pos][columnIndex] != 0) {
|
|
return pos;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
void swapRow(int firstRowIndex, int secondRowIndex) {
|
|
double temp = 0;
|
|
int i = 0;
|
|
for (i = 0; i < 4; i++) {
|
|
temp = matA[firstRowIndex][i];
|
|
matA[firstRowIndex][i] = matA[secondRowIndex][i];
|
|
matA[secondRowIndex][i] = temp;
|
|
}
|
|
temp = matB[firstRowIndex];
|
|
matB[firstRowIndex] = matB[secondRowIndex];
|
|
matB[secondRowIndex] = temp;
|
|
}
|
|
|
|
void printOut() {
|
|
int i = 0, j = 0;
|
|
for (i = 0; i < 4; i++) {
|
|
for (j = 0; j < 4; j++) {
|
|
printf("%lf\t", matA[i][j]);
|
|
}
|
|
printf("%lf", matB[i]);
|
|
printf("\n");
|
|
}
|
|
}
|
|
|
|
int main() {
|
|
int x[4] = {0};
|
|
int column = 0, row = 0;
|
|
int tempRow = 0;
|
|
int noneZeroRow = 0;
|
|
for (column = 0; column < 4; column++) {
|
|
noneZeroRow = findNoneZeroItem(row, column);
|
|
if (noneZeroRow == -1) {
|
|
continue;
|
|
}
|
|
else {
|
|
swapRow(row, noneZeroRow);
|
|
timesOfRow(row, 1.0/matA[row][column]);
|
|
for (tempRow = 0; tempRow < 4; tempRow++) {
|
|
if (tempRow != row)
|
|
rowManipulation(row, -matA[tempRow][column], tempRow);
|
|
}
|
|
row++;
|
|
}
|
|
|
|
}
|
|
for (row = 0; row < 4; row++) {
|
|
printf("x(%d) = %lf\n", row+1, matB[row]);
|
|
}
|
|
return 0;
|
|
} |