Практикум по курсу "Объектно-ориентированное программирование" на языке C#. Андрианова А.А - 40 стр.

UptoLike

39
Порядок следования базисных и свободных переменных будет
сохранен в специальном массиве reoder.
// метод Жордана-Гаусса решения СЛАУ
public void JordanGauss ()
{
// создание копий матрицы коэффициентов и свободных
// членов для последующих преобразований
Matrix A = a.Copy();
Matrix B = b.Copy();
int count_null_cols = 0;
// проведение исключений по формулам Жордана-Гаусса
for(int i = 0; i < m; i++)
{
// исключение по i-ой строке
// проверка возможности исключения
// по значению ведущего элемента
if(A[i, i] != 0)
{
// исключение во всех строках, кроме ведущей
for(int k = 0; k < m; k++)
{
if(k == i)
continue;
double d = A[k, i] / A[i, i];
for(int j = i; j < n; j++)
A[k, j] = A[k, j] - d * A[i, j];
B[0, k] = B[0, k] - d * B[0, i];
}
// преобразование ведущей строки
for(int j = i + 1; j < n; j++)
A[i, j] /= A[i, i];
// преобразование i-ого свободного члена
B[0, i] /= A[i, i];
A[i, i] = 1;
}
else
{
// элемент главной диагонали
// в i-ой строке равен нулю
int k;
// поиск ненулевого элемента ниже
// в i-ом столбце
for(k = i + 1; k < m; k++)
if(A[k, i] != 0)
break;
if(k == m)
{
// все элементы столбца нулевые
     Порядок следования базисных и свободных переменных будет
сохранен в специальном массиве reoder.

     // метод Жордана-Гаусса решения СЛАУ
     public void JordanGauss ()
     {
        // создание копий матрицы коэффициентов и свободных
        // членов для последующих преобразований
        Matrix A = a.Copy();
        Matrix B = b.Copy();
        int count_null_cols = 0;
        // проведение исключений по формулам Жордана-Гаусса
        for(int i = 0; i < m; i++)
        {
           // исключение по i-ой строке
           // проверка возможности исключения
           // по значению ведущего элемента
           if(A[i, i] != 0)
           {
               // исключение во всех строках, кроме ведущей
              for(int k = 0; k < m; k++)
              {
                 if(k == i)
                    continue;
                 double d = A[k, i] / A[i, i];
                 for(int j = i; j < n; j++)
                    A[k, j] = A[k, j] - d * A[i, j];
                 B[0, k] = B[0, k] - d * B[0, i];
              }
             // преобразование ведущей строки
              for(int j = i + 1; j < n; j++)
                 A[i, j] /= A[i, i];
              // преобразование i-ого свободного члена
              B[0, i] /= A[i, i];
              A[i, i] = 1;
           }
           else
           {

             // элемент главной диагонали
             // в i-ой строке равен нулю
             int k;
              // поиск ненулевого элемента ниже
              // в i-ом столбце
              for(k = i + 1; k < m; k++)
                 if(A[k, i] != 0)
                    break;
              if(k == m)
              {
                 // все элементы столбца нулевые

39