(*~\Глагол\Отделы\ЧисАн\32\к\Набор\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                         ОТДЕЛ кнМатрица;
(*============================================================================*
 * НАЗНАЧЕНИЕ: определение матриц из комплексных чисел,
 *          представленных в виде набора из 2-х действительных вида Матем.Вещ
 *                                  и основные вычисления над этими матрицами
 *============================================================================*)

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

кнЦОС     ИЗ "..\..\..\..\..\Отделы\ЦОС\32\к\Набор\";
*)
(*
  НаЭкран ИЗ "..\..\..\..\..\Отделы\Обмен\ВводВывод\";
*)

ВИД
  Доступ- = ДОСТУП К Вид;
  Вид-    = РЯД ИЗ кнВектор.Вид;
(*
        (* вид Вещ - это удвоенная точность 32 разряда (6 десятичных знаков)  *)
  Вещ = дМатем.Вещ;                   (* локально *)
*)

(*-оооооооооооооо- опережающие определения/заготовки задач -ооооооооооооооооо-*)


(*----------------------------------------------------------------------------*
 * арифметические действия над матрицами из комплексных в виде набора
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ умнСтрокиНаСтолбец-(кВектСтрока-,(* кСуммаП:=кВектСтрока*кВектСтолбец *)
                            кВектСтолбец-:кнВектор.Вид;
                            кСуммаП+:кнМатем.Вид);
ЗАДАЧА^ умнНаВектор-(кМатр- :кнМатрица.Вид;           (* кМатр*кВход = кВыход *)
                     кВход-,
                     кВыход+:кнВектор.Вид);

(*----------------------------------------------------------------------------*
 * Переписывание матриц из комплексных в виде набора
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ Списать-( кВхМатр-,
                 кВыхМатр+:кнМатрица.Вид);


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


(*============================================================================*
 * арифметические действия над матрицами из комплексных в виде набора
 *============================================================================*)

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА умнСтрокиНаСтолбец-(кВектСтрока-, (* кСуммаП:=кВектСтрока*кВектСтолбец *)
                           кВектСтолбец-:кнВектор.Вид;
                           кСуммаП+:кнМатем.Вид);
(* Цель: умножение вектора-строки на вектор-столбец
 *----------------------------------------------------------------------------*
 * До:    <кВектСтрока>  - входная действ. вектор-строка
 *        <кВектСтолбец> - входной действ. вектор-столбец
 * После: <кСуммаП> - комплексная сумма произведений элементов входных векторов *)
ПЕР
  N,                                               (* длина вектора N - любая *)
  j:ЦЕЛ;
(*кСуммаП,*)
        Произведение:кнМатем.Вид;  (* временные комплексные *)
УКАЗ
(*-
НаЭкран.ВсяЦепь("^ кнМатрица.умнСтрокиНаСтолбец() ^");
-*)
  N:=РАЗМЕР(кВектСтолбец);
  ПРОВЕРИТЬ(N > 1);                           (* и остановить работу при N<=1 *)
(*
  дМатрВВ.наЭкран("^ кВектСтрока = %20.16e",кВектСтрока);
  дМатрВВ.наЭкран("^кВектСтолбец = %20.16e",кВектСтолбец);
*)
          кСуммаП:=кнМатем.НОЛЬ;          (* накопление в кСуммаП суммы произведений по j *)
  ОТ j:=0 ДО N-1 ВЫП
 кнМатем.суммаПроизведений(кВектСтрока[j],кВектСтолбец[j],кСуммаП);
  КОН;
(*ВОЗВРАТ кСуммаП*)
КОН умнСтрокиНаСтолбец;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА умнНаВектор-(кМатр- :кнМатрица.Вид;
                   кВход-,
                   кВыход+:кнВектор.Вид);
(* Цель: умножение комплексной матрицы <кМатр> на комплексный вектор <кВход>
 *                <кВыход>:=<кМатр>*<кВход>;
 *----------------------------------------------------------------------------*
 * До:      <кМатр> - входная комплексная матрица из NxN
 *          <кВход> - входной комплексный временной вектор-сигнал из N, Y=X*Mij
 * После: <кВыход> - выходной комплексный частотный вектор-спектр из N        *)
ПЕР
  N,                                               (* длина вектора N - любая *)
  i,j:ЦЕЛ;

  Yi,XjМij:кнМатем.Вид;  (* временные комплексные *)
УКАЗ
(*-
НаЭкран.ВсяЦепь("^ кнМатрица.умнНаВектор() ^");
-*)
  N:=РАЗМЕР(кВход);
  ПРОВЕРИТЬ(N > 1);                           (* и остановить работу при N<=1 *)
(*
  кнВектВВ.наЭкран("^кВход = (%20.16e;%20.16e)",кВход);
*)
  ОТ i:=0 ДО N-1 ВЫП
    Yi:=кнМатем.НОЛЬ;              (* накопление в Yi суммы комплексных по j  *)
    ОТ j:=0 ДО N-1 ВЫП
 кнМатем.суммаПроизведений(кМатр[i,j],кВход[j],    Yi);
(*
 кнМатем.умножить(кВход[j],кМатр[i,j],XjМij);  (* XjМij = кВход[j]*кМатр[i,j] *)
      (* накопление по j  в Yi суммы произведений XjМij = кВход[j]*кМатр[i,j] *)
 кнМатем.добавить(                    XjМij,Yi)   (* Yi = Yi + XjМij *)
*)
(*-
НаЭкран.Вещ4числа("^XjМij.д= %20.16e, XjМij.м= %20.16e, Yi.д= %20.16e, Yi.м= %20.16e",
                    XjМij.д,          XjМij.м,
                                                        Yi.д,          Yi.м
                 );
-*)
    КОН;
    кВыход[i]:=Yi
  КОН;
(*
  кнВектВВ.наЭкран("^кВыход = (%20.16e;%20.16e)",кВыход);
*)
КОН умнНаВектор;


(*============================================================================*
 * Переписывание матриц из комплексных в виде набора
 *============================================================================*)

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Списать-( кВхМатр-,
                кВыхМатр+:кнМатрица.Вид);
ПЕР
  i,j:ЦЕЛ;
УКАЗ
  ОТ i:=0 ДО РАЗМЕР(кВхМатр,0)-1 ВЫП
    ОТ j:=0 ДО РАЗМЕР(кВхМатр,1)-1 ВЫП
       кВыхМатр[i,j]:=кВхМатр[i,j]
    КОН
  КОН
КОН Списать;

КОН кнМатрица.

