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

ИСПОЛЬЗУЕТ
 дМатем   ИЗ "..\..\..\..\Отделы\ЧисАн\32\д\",

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

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

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

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Голова;
ПЕР
  n:ЦЕЛ;             (* размер матрицы *)

  A:дМатрица.Доступ; (* доступ к исходной матрице A *)
  L:дМатрица.Доступ; (* доступ к          матрице L *)

  ч:ИзФайла.ДкПотоку;
УКАЗ
  ч:=дМатрВВ.ОткрытиеФайла("ПроМатр4.дан");
  A:=дМатрВВ.изФайла(ч);
             ИзФайла.Закрыть(ч);
  n:=РАЗМЕР(A^);

  СОЗДАТЬ(L,n,n);

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

    дМатрВВ.наЭкран("%10.5f",A^);
  ЕСЛИ
       дСистЛАУ.РазложитьНаLL(A^,L^) = 0
  ТО
    НаЭкран.ВсяЦепь("^L матрица:^");

    дМатрВВ.наЭкран("%10.5f",L^);
    дМатрица.Перемножить(L^,A^);

    НаЭкран.ВсяЦепь("^L*L' матрица:^");

    дМатрВВ.наЭкран("%10.5f",A^)
  ИНАЧЕ
    НаЭкран.ВсяЦепь("^Матрица не является положительно определенной!^")
  КОН
КОН Голова;

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