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

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

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

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

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


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

(*----------------------------------------------------------------------------*)
ЗАДАЧА^ умнСтрокиНаСтолбец-(кВектСтрока-,
                            кВектСтолбец-:крВектор.Вид;
                                            кСуммаП+:крМатем.Вид
                           );            (* кСуммаП:=кВектСтрока*кВектСтолбец *)
(*----------------------------------------------------------------------------*)
                  (* кМатр*кВход = кВыход *)
ЗАДАЧА^ умнНаВектор-(кМатр- :Вид(*крМатрица.Вид*);
                     кВход-,
                     кВыход+:крВектор.Вид
                    );
(*
 * Цель: умножение комплексной матрицы  из NxN              <кМатр>
 *          на входной комплексный временной вектор-сигнал  <кВход>
 * Результат: выходной комплексный временной вектор-спектр  <кВыход>
 *)

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

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


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


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

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

  дМатрВВ.наЭкран("^ кВектСтрока  = %20.16e",кВектСтрока);
  дМатрВВ.наЭкран("^ кВектСтолбец = %20.16e",кВектСтолбец);
*)
          кСуммаП:=крМатем.НОЛЬ;          (* накопление в кСуммаП суммы произведений по j *)
  ОТ j:=0 ДО N-1 ВЫП
    крМатем.суммаПроизведений(кВектСтрока[j],кВектСтолбец[j],кСуммаП);
  КОН;
(*ВОЗВРАТ кСуммаП*)
КОН умнСтрокиНаСтолбец;

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

  i,j:ЦЕЛ;
            N:ЦЕЛ;       (* размер вектора = рабочая длина вектора N - любая заданная *)
УКАЗ
            N:=РАЗМЕР(кВход);
  ПРОВЕРИТЬ(N > 1);                           (* и остановить работу при N<=1 *)
(*
  НаЭкран.ВсяЦепь("^ крМатрица.умнНаВектор() ^");

  крВектВВ.наЭкран("^кВход = (%20.16e;%20.16e)",кВход);
*)
  ОТ i:=0 ДО N-1 ВЫП
                                   (* накопление в Yi суммы комплексных по j  *)
    Yi:=крМатем.НОЛЬ;

    ОТ 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)",кВыход);
*)
КОН умнНаВектор;


(*============================================================================*
 * Переписывание матрицы из комплексных в виде ряда из 2-х вещ.
 *============================================================================*)

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

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

