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

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

кнЦОС     ИЗ "..\..\..\..\..\Отделы\ЦОС\64\к\Набор\";

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

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

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


(*----------------------------------------------------------------------------*
 * арифметические действия над матрицами из комплексных в виде набора
 *----------------------------------------------------------------------------*)
                                         (* кСуммаП:=кВектСтрока*кВектСтолбец *)
ЗАДАЧА^ умнСтрокиНаСтолбец-(кВектСтрока-,
                            кВектСтолбец-:кнВектор.Вид;
                                            кСуммаП+:кнМатем.Вид; N-:ЦЕЛ);
                  (* кМатр*кВход = кВыход *)
ЗАДАЧА^ умнНаВектор-(кМатр- :кнМатрица.Вид; 
                     кВход-,
                     кВыход+:кнВектор.Вид; N-:ЦЕЛ);

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

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


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


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

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

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
                 (* кМатр*кВход = кВыход *)
ЗАДАЧА умнНаВектор-(кМатр- :кнМатрица.Вид; 
                    кВход-,
                    кВыход+:кнВектор.Вид; N-:ЦЕЛ);
(*
 * Цель: умножение квадратной комплексной матрицы <кМатр> на комплексный вектор <кВход>
 *                <кВыход>:=<кМатр>*<кВход>;
 *----------------------------------------------------------------------------*
 * До:     <кМатр> -  входная комплексная матрица из NxN
 *         <кВход> -  входной комплексный временной вектор-сигнал из N, Y=X*Mij
 * После: <кВыход> - выходной комплексный частотный вектор-спектр из N       
 *)
ПЕР
  Yi,XjМij:кнМатем.Вид;  (* временные комплексные *)
  i,j:ЦЕЛ;
         (* N:ЦЕЛ; *)    (* размер вектора >= рабочая длина вектора N - любая заданная *)
УКАЗ
         (* N<=РАЗМЕР(кВход); *)
  ПРОВЕРИТЬ(N > 1);                           (* и остановить работу при N<=1 *)
(*
  кнВектВВ.наЭкран("^кВход = (%20.16e;%20.16e)",кВход,N);
*)
  ОТ 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)",кВыход,N);
*)
КОН умнНаВектор;


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

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Списать-( кВхМатр-,
                кВыхМатр+:кнМатрица.Вид; N0-,N1-:ЦЕЛ);
ПЕР
          (* N0,N1,*)(* размеры вх.матрицы >= рабочие размеры вх.матрицы N0xN1 - любые заданные *)
  i,j:ЦЕЛ;
УКАЗ      (* N0:=РАЗМЕР(кВхМатр,0); *)
            (* N1:=РАЗМЕР(кВхМатр,1); *)
  ОТ i:=0 ДО N0(*РАЗМЕР(кВхМатр,0)*)-1 ВЫП
    ОТ j:=0 ДО N1(*РАЗМЕР(кВхМатр,1)*)-1 ВЫП
       кВыхМатр[i,j]:=кВхМатр[i,j]
    КОН
  КОН
КОН Списать;

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

