Объектно-ориентированное программирование на C++. Андрианова А.А - 224 стр.

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
// функция решения СЛАУ методом Жордана-Гаусса
template <class T> void Slau<T>::JordanGauss()
{
Matrix<T> A = a;
Matrix<T> B = b;
bool code = true;
int count_null_cols = 0;
for(int i = 0; i < m; i++)
{
if(A[i][i] != 0.0)
{
for(int k = 0; k < m; k++)
{
if(k == i)
continue;
T 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][j] / A[i][i];
B[0][i] = B[0][i] / A[i][i];
A[i][i] = 1;
}
else
{
int k;
for(k = i + 1; k < m; k++)
if(A[k][i] != 0.0)
break;
if(k == m)
{
if(i == n – 1 - count_null_cols)
{
count_null_cols++;
code = false;
break;
}
for(int j = 0; j < m; j++)
{
T t = A[j][i];
A[j][i] =
A[j][n-count_null_cols-1];
A[j][n-count_null_cols-1] = t;
}
int t = reoder[i];
reoder[i] =
224
                               Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.

      // функция решения СЛАУ методом Жордана-Гаусса
      template  void Slau::JordanGauss()
      {
           Matrix A = a;
           Matrix B = b;
           bool code = true;
           int count_null_cols = 0;
           for(int i = 0; i < m; i++)
           {
                if(A[i][i] != 0.0)
                {
                     for(int k = 0; k < m; k++)
                     {
                          if(k == i)
                               continue;
                          T 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][j] / A[i][i];
                     B[0][i] = B[0][i] / A[i][i];
                     A[i][i] = 1;
                }
                else
                {
                     int k;
                     for(k = i + 1; k < m; k++)
                          if(A[k][i] != 0.0)
                                    break;
                     if(k == m)
                     {
                          if(i == n – 1 - count_null_cols)
                          {
                               count_null_cols++;
                               code = false;
                               break;
                          }
                          for(int j = 0; j < m; j++)
                          {
                               T t = A[j][i];
                               A[j][i] =
                                    A[j][n-count_null_cols-1];
                               A[j][n-count_null_cols-1] = t;
                          }
                          int t = reoder[i];
                          reoder[i] =

224