(*~\Глагол\ПриложенияЛинАл\32\д\СистЛАУдейств\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                                    ОТДЕЛ ПроГаусс+;
(*============================================================================*
 * НАЗНАЧЕНИЕ:
 *   решение систем линейных уравнений (A*x=b) методом исключений Гаусса
 * ПРИМЕЧАНИЯ: 
 *     В данном приложении метод применяется для решения последовательности
 *  систем Гильберта увеличивающегося порядка. Системы Гильберта имеют
 *  плохо обусловленные матрицы (определитель близок к 0), поэтому, при
 *  существующей точности вычислений, начиная с некоторого порядка системы
 *  такие матрицы будут рассматриваться алгоритмом, как вырожденные. Это
 *  произойдет после того, как определитель системы станет меньше чем
 *  Матем.МашинEps
 *============================================================================*)

ИСПОЛЬЗУЕТ
(*
 дМатем   ИЗ "..\..\..\..\Отделы\ЧисАн\32\д\",
*)
 дВектор  ИЗ "..\..\..\..\Отделы\ЧисАн\32\д\",
 дМатрица ИЗ "..\..\..\..\Отделы\ЧисАн\32\д\",

 дВектВВ  ИЗ "..\..\..\..\Отделы\ЧисАн\32\д\ВводВывод\",
 дМатрВВ  ИЗ "..\..\..\..\Отделы\ЧисАн\32\д\ВводВывод\",

 дСистЛАУ ИЗ "..\..\..\..\Отделы\ЛинАл\32\д\",

  НаЭкран ИЗ "..\..\..\..\Отделы\Обмен\ВводВывод\";

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Голова;
ПЕР 
  n:ЦЕЛ;              (* порядок системы         *) 
  A :дМатрица.Доступ; (* матрица системы         *) 
  Ao:дМатрица.Доступ; (* обратная матрица        *) 
  b : дВектор.Доступ; (* вектор свободных членов *) 
  x : дВектор.Доступ; (* вектор решения          *) 
УКАЗ
  n:=2; 
  КОЛЬЦО
    НаЭкран.Цел4числа("^Порядок системы: %d^",n,0,0,0);

    СОЗДАТЬ(A,n,n);
    СОЗДАТЬ(Ao,n,n);
    СОЗДАТЬ(b,n);
    СОЗДАТЬ(x,n);

    дСистЛАУ.ГильбертСистема(A^,b^);

    ЕСЛИ n < 7 ТО
      НаЭкран.ВсяЦепь("^Матрица системы:^");

      дМатрВВ.наЭкран("%8.4f",A^);

      НаЭкран.ВсяЦепь("^Свободные члены:^");

      дВектВВ.наЭкран("%8.4f",b^)
    КОН;
    ЕСЛИ дСистЛАУ.МетодГаусса(A^,b^,Ao^,x^) = 0 ТО

      НаЭкран.ВсяЦепь("^Вектор решения:^");

      дВектВВ.наЭкран("%8.4f",x^);
    ИНАЧЕ

      НаЭкран.ВсяЦепь("^Вырожденная матрица!^");

      ВЫХОД
    КОН;
    УВЕЛИЧИТЬ(n)
  КОН
КОН Голова;

(*-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-*)
УКАЗ
  Голова
КОН ПроГаусс. 
 