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

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

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

 дСистЛАУ ИЗ "..\..\..\..\..\Отделы\ЛинАл\32\д\",
кнСистЛАУ ИЗ "..\..\..\..\..\Отделы\ЛинАл\32\к\Набор\",

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


(*=рррррррррррррррррррррррр= реализация задач =рррррррррррррррррррррррррррррр=*)


(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Голова;
ПЕР
  строк,       (* число  векторов-строк свободных членов или размер столбца в матрице *)
  столбцов:ЦЕЛ;(* число столбцов в матрице или размер вектора-строки свободных членов *)
         кИсхМатД,                         (* доступ к исх.компл.матрице системы *)
          кСЧматД,                         (* доступ к     компл.матрице/ряду из векторов Свободных Членов *)
         кРешМатД:кнМатрица.Доступ;        (* доступ к     компл.матрице/ряду из векторов Решений *)
  i:ЦЕЛ; 
    строкиНомеровД:дСистЛАУ.ДкРядуПерестановок;(* доступ к ряду номеров Перестановок строк для обратного хода *)

  ч:ИзФайла.ДкПотоку;
УКАЗ
         ч:=кнМатрВВ.ОткрытиеФайла("ПроКомплLU.дан");
  кИсхМатД:=кнМатрВВ.изФайла(ч);
   кСЧматД:=кнМатрВВ.изФайла(ч);
             ИзФайла.Закрыть(ч);

     строк:=РАЗМЕР(кСЧматД^,0);
  столбцов:=РАЗМЕР(кСЧматД^,1);

  СОЗДАТЬ(кРешМатД,строк,столбцов);

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

    кнМатрВВ.наЭкран(" (%5.2f;%5.2f)",кИсхМатД^);

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

  ОТ i:=0 ДО строк-1 ВЫП
    кнВектВВ.наЭкран(" (%5.2f;%5.2f)",кСЧматД[i])
  КОН;
(* После выполнения РазложитьНаLU() матрицы L и U оказываются на месте
                                                       матрицы кИсхМатД *)
  ЕСЛИ
      кнСистЛАУ.РазложитьНаLU(кИсхМатД^,строкиНомеровД) = 0
  ТО
           (* решаем систему для каждого i-го вектора свободных членов
                                                            кСЧматрД[i] *)
    НаЭкран.ВсяЦепь("^Вектора решения комплексные:^");

    ОТ i:=0 ДО строк-1 ВЫП
      кнСистЛАУ.РешитьИзLU( кИсхМатД^,
                             кСЧматД[i],
        строкиНомеровД,
                                        кРешМатД[i]); 
      кнВектВВ.наЭкран(" (%5.2f;%5.2f)",кРешМатД[i])
    КОН
  ИНАЧЕ
    НаЭкран.ВсяЦепь("^Вырожденная матрица!^")
  КОН
КОН Голова;

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