64 lines
2.3 KiB
C++
64 lines
2.3 KiB
C++
|
#include <iostream>
|
|||
|
#include <cstdlib>
|
|||
|
using namespace std;
|
|||
|
int main()
|
|||
|
{
|
|||
|
int razmer; //размер матрицы
|
|||
|
double **a, // матрица с коэфицентами
|
|||
|
*x, // х
|
|||
|
*b; // свободные члены
|
|||
|
/* Здесь переменной razmer необходимо присвоить размер матрицы */
|
|||
|
// создание динамических переменных
|
|||
|
b = new double[razmer];
|
|||
|
x = new double[razmer];
|
|||
|
a = new double*[razmer];
|
|||
|
for(int i=0; i < razmer; i++){
|
|||
|
a[i] = new double[razmer];
|
|||
|
}
|
|||
|
/* Здесь нам надо присвоить значения матрице а, и заполнить свободные члены b */
|
|||
|
|
|||
|
// начинаем решать)
|
|||
|
// частный случай, если размер матрицы == 1
|
|||
|
if(razmer == 1){
|
|||
|
if(a[0][0] != 0){
|
|||
|
cout << "x=" << b[0]/a[0][0] << endl;
|
|||
|
}else{
|
|||
|
cout << "Х любое" << endl;
|
|||
|
}
|
|||
|
sleep(5);//getch();
|
|||
|
exit(0);
|
|||
|
}
|
|||
|
// прямой проход
|
|||
|
// идем слево на право по коэфицентам х
|
|||
|
for(int k=0; k < razmer-1; k++){
|
|||
|
// вычитаем по строкам
|
|||
|
for(int m=k+1; m < razmer; m++){
|
|||
|
// если на диагонали элемент = 0, то поменяем местами строки
|
|||
|
if(a[m][m] == 0) exchange(a, razmer, m, get_n_no_empty(a, razmer, m));
|
|||
|
|
|||
|
double koeficent=a[m][k]/a[0][k];
|
|||
|
//вычисление новых коэфицентов уравнения
|
|||
|
b[m] = b[m] - b[0] * koeficent;
|
|||
|
for(int z=0; z < razmer; z++){
|
|||
|
a[m][z] = a[m][k] - a[0][k] * koeficent;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
// ищем решения
|
|||
|
for(int m=razmer-1; m >= 0; m--){
|
|||
|
double sum=0;
|
|||
|
// идем по строке спаво налево, считая сумму корень*коэфицент, до текущего корня
|
|||
|
for(int i=razmer-1; i > m; i--){
|
|||
|
sum += x[i] * a[m][i];
|
|||
|
}
|
|||
|
x[m] = (b[m] - sum)/a[m][m];
|
|||
|
}
|
|||
|
|
|||
|
// вывод решений
|
|||
|
cout << "###Решения:" << endl;
|
|||
|
for(int i=0; i < razmer; i++){
|
|||
|
cout << "x[" << i << "]=" << x[i] << endl;
|
|||
|
}
|
|||
|
pause();
|
|||
|
}
|