Справочник Ada 2012
G.3.2 Комплексные векторы и матрицы
Статическая семантика
Универсальный пакет библиотек Numerics.Generic_Complex_Arrays имеет следующее объявление:
with Ada.Numerics.Generic_Real_Arrays, Ada.Numerics.Generic_Complex_Types;
generic
with package Real_Arrays is new
Ada.Numerics.Generic_Real_Arrays (<>);
use Real_Arrays;
with package Complex_Types is new
Ada.Numerics.Generic_Complex_Types (Real);
use Complex_Types;
package Ada.Numerics.Generic_Complex_Arrays is
pragma Pure(Generic_Complex_Arrays);
generic
with package Real_Arrays is new
Ada.Numerics.Generic_Real_Arrays (<>);
use Real_Arrays;
with package Complex_Types is new
Ada.Numerics.Generic_Complex_Types (Real);
use Complex_Types;
package Ada.Numerics.Generic_Complex_Arrays is
pragma Pure(Generic_Complex_Arrays);
-- Типы
type Complex_Vector is array (Integer range <>) of Complex;
type Complex_Matrix is array (Integer range <>,
Integer range <>) of Complex;
type Complex_Matrix is array (Integer range <>,
Integer range <>) of Complex;
-- Подпрограммы для типов Complex_Vector
-- Операции выбора, преобразования и композиции Complex_Vector
function Re (X : Complex_Vector) return Real_Vector;
function Im (X : Complex_Vector) return Real_Vector;
function Im (X : Complex_Vector) return Real_Vector;
procedure Set_Re (X : in out Complex_Vector;
Re : in Real_Vector);
procedure Set_Im (X : in out Complex_Vector;
Im : in Real_Vector);
Re : in Real_Vector);
procedure Set_Im (X : in out Complex_Vector;
Im : in Real_Vector);
function Compose_From_Cartesian (Re : Real_Vector)
return Complex_Vector;
function Compose_From_Cartesian (Re, Im : Real_Vector)
return Complex_Vector;
return Complex_Vector;
function Compose_From_Cartesian (Re, Im : Real_Vector)
return Complex_Vector;
function Modulus (X : Complex_Vector) return Real_Vector;
function "abs" (Right : Complex_Vector) return Real_Vector
renames Modulus;
function Argument (X : Complex_Vector) return Real_Vector;
function Argument (X : Complex_Vector;
Cycle : Real'Base) return Real_Vector;
function "abs" (Right : Complex_Vector) return Real_Vector
renames Modulus;
function Argument (X : Complex_Vector) return Real_Vector;
function Argument (X : Complex_Vector;
Cycle : Real'Base) return Real_Vector;
function Compose_From_Polar (Modulus, Argument : Real_Vector)
return Complex_Vector;
function Compose_From_Polar (Modulus, Argument : Real_Vector;
Cycle : Real'Base)
return Complex_Vector;
return Complex_Vector;
function Compose_From_Polar (Modulus, Argument : Real_Vector;
Cycle : Real'Base)
return Complex_Vector;
-- Арифметические операции Complex_Vector
function "+" (Right : Complex_Vector) return Complex_Vector;
function "-" (Right : Complex_Vector) return Complex_Vector;
function Conjugate (X : Complex_Vector) return Complex_Vector;
function "-" (Right : Complex_Vector) return Complex_Vector;
function Conjugate (X : Complex_Vector) return Complex_Vector;
function "+" (Left, Right : Complex_Vector) return Complex_Vector;
function "-" (Left, Right : Complex_Vector) return Complex_Vector;
function "-" (Left, Right : Complex_Vector) return Complex_Vector;
function "*" (Left, Right : Complex_Vector) return Complex;
function "abs" (Right : Complex_Vector) return Real'Base;
-- Смешанные операции Real_Vector и Complex_Vector
function "+" (Left : Real_Vector;
Right : Complex_Vector) return Complex_Vector;
function "+" (Left : Complex_Vector;
Right : Real_Vector) return Complex_Vector;
function "-" (Left : Real_Vector;
Right : Complex_Vector) return Complex_Vector;
function "-" (Left : Complex_Vector;
Right : Real_Vector) return Complex_Vector;
Right : Complex_Vector) return Complex_Vector;
function "+" (Left : Complex_Vector;
Right : Real_Vector) return Complex_Vector;
function "-" (Left : Real_Vector;
Right : Complex_Vector) return Complex_Vector;
function "-" (Left : Complex_Vector;
Right : Real_Vector) return Complex_Vector;
function "*" (Left : Real_Vector; Right : Complex_Vector)
return Complex;
function "*" (Left : Complex_Vector; Right : Real_Vector)
return Complex;
return Complex;
function "*" (Left : Complex_Vector; Right : Real_Vector)
return Complex;
-- Масштабирование Complex_Vector
function "*" (Left : Complex;
Right : Complex_Vector) return Complex_Vector;
function "*" (Left : Complex_Vector;
Right : Complex) return Complex_Vector;
function "/" (Left : Complex_Vector;
Right : Complex) return Complex_Vector;
Right : Complex_Vector) return Complex_Vector;
function "*" (Left : Complex_Vector;
Right : Complex) return Complex_Vector;
function "/" (Left : Complex_Vector;
Right : Complex) return Complex_Vector;
function "*" (Left : Real'Base;
Right : Complex_Vector) return Complex_Vector;
function "*" (Left : Complex_Vector;
Right : Real'Base) return Complex_Vector;
function "/" (Left : Complex_Vector;
Right : Real'Base) return Complex_Vector;
Right : Complex_Vector) return Complex_Vector;
function "*" (Left : Complex_Vector;
Right : Real'Base) return Complex_Vector;
function "/" (Left : Complex_Vector;
Right : Real'Base) return Complex_Vector;
-- Другие операции Complex_Vector
function Unit_Vector (Index : Integer;
Order : Positive;
First : Integer := 1) return Complex_Vector;
Order : Positive;
First : Integer := 1) return Complex_Vector;
-- Подпрограммы для типов Complex_Matrix
-- Операции выбора, преобразования и композиции Complex_Matrix
function Re (X : Complex_Matrix) return Real_Matrix;
function Im (X : Complex_Matrix) return Real_Matrix;
function Im (X : Complex_Matrix) return Real_Matrix;
procedure Set_Re (X : in out Complex_Matrix;
Re : in Real_Matrix);
procedure Set_Im (X : in out Complex_Matrix;
Im : in Real_Matrix);
Re : in Real_Matrix);
procedure Set_Im (X : in out Complex_Matrix;
Im : in Real_Matrix);
function Compose_From_Cartesian (Re : Real_Matrix)
return Complex_Matrix;
function Compose_From_Cartesian (Re, Im : Real_Matrix)
return Complex_Matrix;
return Complex_Matrix;
function Compose_From_Cartesian (Re, Im : Real_Matrix)
return Complex_Matrix;
function Modulus (X : Complex_Matrix) return Real_Matrix;
function "abs" (Right : Complex_Matrix) return Real_Matrix
renames Modulus;
function "abs" (Right : Complex_Matrix) return Real_Matrix
renames Modulus;
function Argument (X : Complex_Matrix) return Real_Matrix;
function Argument (X : Complex_Matrix;
Cycle : Real'Base) return Real_Matrix;
function Argument (X : Complex_Matrix;
Cycle : Real'Base) return Real_Matrix;
function Compose_From_Polar (Modulus, Argument : Real_Matrix)
return Complex_Matrix;
function Compose_From_Polar (Modulus, Argument : Real_Matrix;
Cycle : Real'Base)
return Complex_Matrix;
return Complex_Matrix;
function Compose_From_Polar (Modulus, Argument : Real_Matrix;
Cycle : Real'Base)
return Complex_Matrix;
-- Арифметические операции Complex_Matrix
function "+" (Right : Complex_Matrix) return Complex_Matrix;
function "-" (Right : Complex_Matrix) return Complex_Matrix;
function Conjugate (X : Complex_Matrix) return Complex_Matrix;
function Transpose (X : Complex_Matrix) return Complex_Matrix;
function "-" (Right : Complex_Matrix) return Complex_Matrix;
function Conjugate (X : Complex_Matrix) return Complex_Matrix;
function Transpose (X : Complex_Matrix) return Complex_Matrix;
function "+" (Left, Right : Complex_Matrix) return Complex_Matrix;
function "-" (Left, Right : Complex_Matrix) return Complex_Matrix;
function "*" (Left, Right : Complex_Matrix) return Complex_Matrix;
function "-" (Left, Right : Complex_Matrix) return Complex_Matrix;
function "*" (Left, Right : Complex_Matrix) return Complex_Matrix;
function "*" (Left, Right : Complex_Vector) return Complex_Matrix;
function "*" (Left : Complex_Vector;
Right : Complex_Matrix) return Complex_Vector;
function "*" (Left : Complex_Matrix;
Right : Complex_Vector) return Complex_Vector;
Right : Complex_Matrix) return Complex_Vector;
function "*" (Left : Complex_Matrix;
Right : Complex_Vector) return Complex_Vector;
-- Смешанные операции Real_Matrix и Complex_Matrix
function "+" (Left : Real_Matrix;
Right : Complex_Matrix) return Complex_Matrix;
function "+" (Left : Complex_Matrix;
Right : Real_Matrix) return Complex_Matrix;
function "-" (Left : Real_Matrix;
Right : Complex_Matrix) return Complex_Matrix;
function "-" (Left : Complex_Matrix;
Right : Real_Matrix) return Complex_Matrix;
function "*" (Left : Real_Matrix;
Right : Complex_Matrix) return Complex_Matrix;
function "*" (Left : Complex_Matrix;
Right : Real_Matrix) return Complex_Matrix;
Right : Complex_Matrix) return Complex_Matrix;
function "+" (Left : Complex_Matrix;
Right : Real_Matrix) return Complex_Matrix;
function "-" (Left : Real_Matrix;
Right : Complex_Matrix) return Complex_Matrix;
function "-" (Left : Complex_Matrix;
Right : Real_Matrix) return Complex_Matrix;
function "*" (Left : Real_Matrix;
Right : Complex_Matrix) return Complex_Matrix;
function "*" (Left : Complex_Matrix;
Right : Real_Matrix) return Complex_Matrix;
function "*" (Left : Real_Vector;
Right : Complex_Vector) return Complex_Matrix;
function "*" (Left : Complex_Vector;
Right : Real_Vector) return Complex_Matrix;
Right : Complex_Vector) return Complex_Matrix;
function "*" (Left : Complex_Vector;
Right : Real_Vector) return Complex_Matrix;
function "*" (Left : Real_Vector;
Right : Complex_Matrix) return Complex_Vector;
function "*" (Left : Complex_Vector;
Right : Real_Matrix) return Complex_Vector;
function "*" (Left : Real_Matrix;
Right : Complex_Vector) return Complex_Vector;
function "*" (Left : Complex_Matrix;
Right : Real_Vector) return Complex_Vector;
Right : Complex_Matrix) return Complex_Vector;
function "*" (Left : Complex_Vector;
Right : Real_Matrix) return Complex_Vector;
function "*" (Left : Real_Matrix;
Right : Complex_Vector) return Complex_Vector;
function "*" (Left : Complex_Matrix;
Right : Real_Vector) return Complex_Vector;
-- Масштабирование Complex_Matrix
function "*" (Left : Complex;
Right : Complex_Matrix) return Complex_Matrix;
function "*" (Left : Complex_Matrix;
Right : Complex) return Complex_Matrix;
function "/" (Left : Complex_Matrix;
Right : Complex) return Complex_Matrix;
Right : Complex_Matrix) return Complex_Matrix;
function "*" (Left : Complex_Matrix;
Right : Complex) return Complex_Matrix;
function "/" (Left : Complex_Matrix;
Right : Complex) return Complex_Matrix;
function "*" (Left : Real'Base;
Right : Complex_Matrix) return Complex_Matrix;
function "*" (Left : Complex_Matrix;
Right : Real'Base) return Complex_Matrix;
function "/" (Left : Complex_Matrix;
Right : Real'Base) return Complex_Matrix;
Right : Complex_Matrix) return Complex_Matrix;
function "*" (Left : Complex_Matrix;
Right : Real'Base) return Complex_Matrix;
function "/" (Left : Complex_Matrix;
Right : Real'Base) return Complex_Matrix;
-- Обращение Complex_Matrix и связанные операции
function Solve (A : Complex_Matrix; X : Complex_Vector)
return Complex_Vector;
function Solve (A, X : Complex_Matrix) return Complex_Matrix;
function Inverse (A : Complex_Matrix) return Complex_Matrix;
function Determinant (A : Complex_Matrix) return Complex;
return Complex_Vector;
function Solve (A, X : Complex_Matrix) return Complex_Matrix;
function Inverse (A : Complex_Matrix) return Complex_Matrix;
function Determinant (A : Complex_Matrix) return Complex;
-- Собственные значения и векторы эрмитовой матрицы
function Eigenvalues(A : Complex_Matrix) return Real_Vector;
procedure Eigensystem(A : in Complex_Matrix;
Values : out Real_Vector;
Vectors : out Complex_Matrix);
Values : out Real_Vector;
Vectors : out Complex_Matrix);
-- Другие операции Complex_Matrix
function Unit_Matrix (Order : Positive;
First_1, First_2 : Integer := 1)
return Complex_Matrix;
First_1, First_2 : Integer := 1)
return Complex_Matrix;
end Ada.Numerics.Generic_Complex_Arrays;
END_OF_DOCUMENT_MARKER Пакет библиотек Numerics.Complex_Arrays объявлен чистым и определяет те же типы и подпрограммы, что и Numerics.Generic_Complex_Arrays, за исключением того, что предопределенный тип Float систематически заменяется на Real'Base, типы Real_Vector и Real_Matrix, экспортируемые Numerics.Real_Arrays, систематически заменяются на Real_Vector и Real_Matrix, а тип Complex, экспортируемый Numerics.Complex_Types, систематически заменяется на Complex, повсеместно. Аналогичным образом определены негенерические эквиваленты для каждого из других предопределенных типов с плавающей запятой с именами Numerics.Short_Complex_Arrays, Numerics.Long_Complex_Arrays и т. д.
Два типа определены и экспортированы пакетом Numerics.Generic_Complex_Arrays. Композитный тип Complex_Vector предоставляется для представления вектора с компонентами типа Complex; он определяется как одномерный массив без ограничений с индексом типа Integer. Композитный тип Complex_Matrix предоставляется для представления матрицы с компонентами типа Complex; он определяется как двумерный массив без ограничений с индексами типа Integer.
Действие различных подпрограмм описано ниже. Во многих случаях они описываются с точки зрения соответствующих скалярных операций в Numerics.Generic_Complex_Types. Любое исключение, поднятое этими операциями, распространяется подпрограммой массива. Кроме того, любые ограничения на параметры и точность результата для каждого отдельного компонента определяются для скалярной операции.
В случае операций, которые определены как включающие внутреннее произведение, может быть поднято исключение Constraint_Error, если промежуточный результат имеет компонент вне диапазона Real'Base, даже если конечный математический результат не будет.
функция Re (X : Complex_Vector) возвращает Real_Vector;
функция Im (X : Complex_Vector) возвращает Real_Vector;
функция Im (X : Complex_Vector) возвращает Real_Vector;
Каждая функция возвращает вектор указанных декартовых компонент X. Диапазон индексов результата — X'Range.
процедура Set_Re (X : вход-выход Complex_Vector; Re : вход Real_Vector);
процедура Set_Im (X : вход-выход Complex_Vector; Im : вход Real_Vector);
процедура Set_Im (X : вход-выход Complex_Vector; Im : вход Real_Vector);
Каждая процедура заменяет указанную (декартовую) компоненту каждого компонента X значением соответствующей компоненты Re или Im; другая (декартова) компонента каждого компонента остается неизменной. Constraint_Error поднимается, если X'Length не равен Re'Length или Im'Length.
функция Compose_From_Cartesian (Re : Real_Vector)
возвращает Complex_Vector;
функция Compose_From_Cartesian (Re, Im : Real_Vector)
возвращает Complex_Vector;
возвращает Complex_Vector;
функция Compose_From_Cartesian (Re, Im : Real_Vector)
возвращает Complex_Vector;
Каждая функция строит вектор комплексных результатов (в декартовом представлении), сформированный из заданных векторов декартовых компонент; при предоставлении только действительных компонент предполагаются мнимые компоненты, равные нулю. Диапазон индексов результата — Re'Range. Constraint_Error поднимается, если Re'Length не равен Im'Length.
функция Modulus (X : Complex_Vector) возвращает Real_Vector;
функция "abs" (Right : Complex_Vector) возвращает Real_Vector
переименовывает Modulus;
функция Argument (X : Complex_Vector) возвращает Real_Vector;
функция Argument (X : Complex_Vector;
Cycle : Real'Base) возвращает Real_Vector;
функция "abs" (Right : Complex_Vector) возвращает Real_Vector
переименовывает Modulus;
функция Argument (X : Complex_Vector) возвращает Real_Vector;
функция Argument (X : Complex_Vector;
Cycle : Real'Base) возвращает Real_Vector;
Каждая функция вычисляет и возвращает вектор указанных полярных компонент X или Right, используя соответствующую функцию в numerics.generic_complex_types. Диапазон индексов результата — X'Range или Right'Range.
функция Compose_From_Polar (Modulus, Argument : Real_Vector)
возвращает Complex_Vector;
функция Compose_From_Polar (Modulus, Argument : Real_Vector;
Cycle : Real'Base)
возвращает Complex_Vector;
возвращает Complex_Vector;
функция Compose_From_Polar (Modulus, Argument : Real_Vector;
Cycle : Real'Base)
возвращает Complex_Vector;
Каждая функция строит вектор комплексных результатов (в декартовом представлении), сформированный из заданных векторов полярных компонент, используя соответствующую функцию в numerics.generic_complex_types для соответствующих компонент Modulus и Argument. Диапазон индексов результата — Modulus'Range. Constraint_Error поднимается, если Modulus'Length не равен Argument'Length.
функция "+" (Right : Complex_Vector) возвращает Complex_Vector;
функция "-" (Right : Complex_Vector) возвращает Complex_Vector;
функция "-" (Right : Complex_Vector) возвращает Complex_Vector;
Каждая операция возвращает результат применения соответствующей операции в numerics.generic_complex_types к каждому компоненту Right. Диапазон индексов результата — Right'Range.
функция Conjugate (X : Complex_Vector) возвращает Complex_Vector;
Эта функция возвращает результат применения соответствующей функции Conjugate в numerics.generic_complex_types к каждому компоненту X. Диапазон индексов результата — X'Range.
функция "+" (Left, Right : Complex_Vector) возвращает Complex_Vector;
функция "-" (Left, Right : Complex_Vector) возвращает Complex_Vector;
функция "-" (Left, Right : Complex_Vector) возвращает Complex_Vector;
Каждая операция возвращает результат применения соответствующей операции в numerics.generic_complex_types к каждому компоненту Left и соответствующему компоненту Right. Диапазон индексов результата — Left'Range. Constraint_Error поднимается, если Left'Length не равен Right'Length.
функция "*" (Left, Right : Complex_Vector) возвращает Complex;
Эта операция возвращает скалярное произведение Left и Right. Constraint_Error поднимается, если Left'Length не равен Right'Length. Эта операция включает внутреннее произведение.
функция "abs" (Right : Complex_Vector) возвращает Real'Base;
Эта операция возвращает эрмитову норму L2 Right (квадратный корень из скалярного произведения вектора и его сопряжения).
функция "+" (Left : Real_Vector;
Right : Complex_Vector) возвращает Complex_Vector;
функция "+" (Left : Complex_Vector;
Right : Real_Vector) возвращает Complex_Vector;
функция "-" (Left : Real_Vector;
Right : Complex_Vector) возвращает Complex_Vector;
функция "-" (Left : Complex_Vector;
Right : Real_Vector) возвращает Complex_Vector;
Right : Complex_Vector) возвращает Complex_Vector;
функция "+" (Left : Complex_Vector;
Right : Real_Vector) возвращает Complex_Vector;
функция "-" (Left : Real_Vector;
Right : Complex_Vector) возвращает Complex_Vector;
функция "-" (Left : Complex_Vector;
Right : Real_Vector) возвращает Complex_Vector;
Каждая операция возвращает результат применения соответствующей операции в numerics.generic_complex_types к каждому компоненту Left и соответствующему компоненту Right. Диапазон индексов результата — Left'Range. Constraint_Error поднимается, если Left'Length не равен Right'Length.
функция "*" (Left : Real_Vector; Right : Complex_Vector) возвращает Complex;
функция "*" (Left : Complex_Vector; Right : Real_Vector) возвращает Complex;
функция "*" (Left : Complex_Vector; Right : Real_Vector) возвращает Complex;
Каждая операция возвращает скалярное произведение Left и Right. Constraint_Error поднимается, если Left'Length не равен Right'Length. Эти операции включают внутреннее произведение.
функция "*" (Left : Complex; Right : Complex_Vector) возвращает Complex_Vector;
Эта операция возвращает результат умножения каждого компонента Right на комплексное число Left с использованием соответствующей операции "*" в numerics.generic_complex_types. Диапазон индексов результата — Right'Range.
функция "*" (Left : Complex_Vector; Right : Complex) возвращает Complex_Vector;
функция "/" (Left : Complex_Vector; Right : Complex) возвращает Complex_Vector;
функция "/" (Left : Complex_Vector; Right : Complex) возвращает Complex_Vector;
Каждая операция возвращает результат применения соответствующей операции в numerics.generic_complex_types к каждому компоненту вектора Left и комплексному числу Right. Диапазон индексов результата — Left'Range.
функция "*" (Left : Real'Base;
Right : Complex_Vector) возвращает Complex_Vector;
Right : Complex_Vector) возвращает Complex_Vector;
Эта операция возвращает результат умножения каждого компонента Right на действительное число Left с использованием соответствующей операции "*" в numerics.generic_complex_types. Диапазон индексов результата — Right'Range.
функция "*" (Left : Complex_Vector;
Right : Real'Base) возвращает Complex_Vector;
функция "/" (Left : Complex_Vector;
Right : Real'Base) возвращает Complex_Vector;
Right : Real'Base) возвращает Complex_Vector;
функция "/" (Left : Complex_Vector;
Right : Real'Base) возвращает Complex_Vector;
Каждая операция возвращает результат применения соответствующей операции в numerics.generic_complex_types к каждому компоненту вектора Left и действительному числу Right. Диапазон индексов результата — Left'Range.
функция Unit_Vector (Index : Integer;
Order : Positive;
First : Integer := 1) возвращает Complex_Vector;
Order : Positive;
First : Integer := 1) возвращает Complex_Vector;
Эта функция возвращает единичный вектор с Order компонентами и нижней границей First. Все компоненты установлены в (0.0, 0.0), за исключением компоненты Index, которая установлена в (1.0, 0.0). Constraint_Error поднимается, если Index < First, Index > First + Order – 1 или если First + Order – 1 > Integer'Last.
функция Re (X : Complex_Matrix) возвращает Real_Matrix;
функция Im (X : Complex_Matrix) возвращает Real_Matrix;
функция Im (X : Complex_Matrix) возвращает Real_Matrix;
Каждая функция возвращает матрицу указанных декартовых компонент X. Диапазоны индексов результата — те же, что и у X.
процедура Set_Re (X : вход-выход Complex_Matrix; Re : вход Real_Matrix);
процедура Set_Im (X : вход-выход Complex_Matrix; Im : вход Real_Matrix);
процедура Set_Im (X : вход-выход Complex_Matrix; Im : вход Real_Matrix);
Каждая процедура заменяет указанную (декартовую) компоненту каждого компонента X значением соответствующей компоненты Re или Im; другая (декартова) компонента каждого компонента остается неизменной. Constraint_Error поднимается, если X'Length(1) не равен Re'Length(1) или Im'Length(1) или если X'Length(2) не равен Re'Length(2) или Im'Length(2).
функция Compose_From_Cartesian (Re : Real_Matrix)
возвращает Complex_Matrix;
функция Compose_From_Cartesian (Re, Im : Real_Matrix)
возвращает Complex_Matrix;
возвращает Complex_Matrix;
функция Compose_From_Cartesian (Re, Im : Real_Matrix)
возвращает Complex_Matrix;
Каждая функция строит матрицу комплексных результатов (в декартовом представлении), сформированную из заданных матриц декартовых компонент; при предоставлении только действительных компонент предполагаются мнимые компоненты, равные нулю. Диапазоны индексов результата — те же, что и у Re. Constraint_Error поднимается, если Re'Length(1) не равен Im'Length(1) или Re'Length(2) не равен Im'Length(2).
функция Modulus (X : Complex_Matrix) возвращает Real_Matrix;
функция "abs" (Right : Complex_Matrix) возвращает Real_Matrix
переименовывает Modulus;
функция Argument (X : Complex_Matrix) возвращает Real_Matrix;
функция Argument (X : Complex_Matrix;
Cycle : Real'Base) возвращает Real_Matrix;
функция "abs" (Right : Complex_Matrix) возвращает Real_Matrix
переименовывает Modulus;
функция Argument (X : Complex_Matrix) возвращает Real_Matrix;
функция Argument (X : Complex_Matrix;
Cycle : Real'Base) возвращает Real_Matrix;
Каждая функция вычисляет и возвращает матрицу указанных полярных компонент X или Right, используя соответствующую функцию в numerics.generic_complex_types. Диапазоны индексов результата — те же, что и у X или Right.
END_OF_DOCUMENT_MARKER
function Compose_From_Polar (Modulus, Argument : Real_Matrix)
return Complex_Matrix;
function Compose_From_Polar (Modulus, Argument : Real_Matrix;
Cycle : Real'Base)
return Complex_Matrix;
return Complex_Matrix;
function Compose_From_Polar (Modulus, Argument : Real_Matrix;
Cycle : Real'Base)
return Complex_Matrix;
Каждая функция строит матрицу комплексных результатов (в декартовом представлении), сформированную из заданных матриц полярных компонентов, используя соответствующую функцию в numerics.generic_complex_types для сопоставленных компонентов Modulus и Argument. Диапазоны индексов результата — те же, что у Modulus. Возникает ошибка Constraint_Error, если Modulus'Length(1) не равно Argument'Length(1) или Modulus'Length(2) не равно Argument'Length(2).
function "+" (Right : Complex_Matrix) return Complex_Matrix;
function "-" (Right : Complex_Matrix) return Complex_Matrix;
function "-" (Right : Complex_Matrix) return Complex_Matrix;
Каждая операция возвращает результат применения соответствующей операции в numerics.generic_complex_types к каждому компоненту Right. Диапазоны индексов результата — те же, что у Right.
function Conjugate (X : Complex_Matrix) return Complex_Matrix;
Эта функция возвращает результат применения соответствующей функции Conjugate в numerics.generic_complex_types к каждому компоненту X. Диапазоны индексов результата — те же, что у X.
function Transpose (X : Complex_Matrix) return Complex_Matrix;
Эта функция возвращает транспонированную матрицу X. Первый и второй диапазоны индексов результата — X'Range(2) и X'Range(1) соответственно.
function "+" (Left, Right : Complex_Matrix) return Complex_Matrix;
function "-" (Left, Right : Complex_Matrix) return Complex_Matrix;
function "-" (Left, Right : Complex_Matrix) return Complex_Matrix;
Каждая операция возвращает результат применения соответствующей операции в numerics.generic_complex_types к каждому компоненту Left и соответствующему компоненту Right. Диапазоны индексов результата — те же, что у Left. Возникает ошибка Constraint_Error, если Left'Length(1) не равно Right'Length(1) или Left'Length(2) не равно Right'Length(2).
function "*" (Left, Right : Complex_Matrix) return Complex_Matrix;
Эта операция предоставляет стандартную математическую операцию умножения матриц. Первый и второй диапазоны индексов результата — Left'Range(1) и Right'Range(2) соответственно. Возникает ошибка Constraint_Error, если Left'Length(2) не равно Right'Length(1). Эта операция включает внутренние произведения.
function "*" (Left, Right : Complex_Vector) return Complex_Matrix;
Эта операция возвращает внешнее произведение (столбцового) вектора Left и (строкового) вектора Right, используя соответствующую операцию "*" в numerics.generic_complex_types для вычисления отдельных компонентов. Первый и второй диапазоны индексов результата — Left'Range и Right'Range соответственно.
function "*" (Left : Complex_Vector;
Right : Complex_Matrix) return Complex_Vector;
Right : Complex_Matrix) return Complex_Vector;
Эта операция предоставляет стандартную математическую операцию умножения (строкового) вектора Left на матрицу Right. Диапазон индексов (строкового) векторного результата — Right'Range(2). Возникает ошибка Constraint_Error, если Left'Length не равен Right'Length(1). Эта операция включает внутренние произведения.
function "*" (Left : Complex_Matrix;
Right : Complex_Vector) return Complex_Vector;
Right : Complex_Vector) return Complex_Vector;
Эта операция предоставляет стандартную математическую операцию умножения матрицы Left на (столбцовый) вектор Right. Диапазон индексов (столбцового) векторного результата — Left'Range(1). Возникает ошибка Constraint_Error, если Left'Length(2) не равно Right'Length. Эта операция включает внутренние произведения.
function "+" (Left : Real_Matrix;
Right : Complex_Matrix) return Complex_Matrix;
function "+" (Left : Complex_Matrix;
Right : Real_Matrix) return Complex_Matrix;
function "-" (Left : Real_Matrix;
Right : Complex_Matrix) return Complex_Matrix;
function "-" (Left : Complex_Matrix;
Right : Real_Matrix) return Complex_Matrix;
Right : Complex_Matrix) return Complex_Matrix;
function "+" (Left : Complex_Matrix;
Right : Real_Matrix) return Complex_Matrix;
function "-" (Left : Real_Matrix;
Right : Complex_Matrix) return Complex_Matrix;
function "-" (Left : Complex_Matrix;
Right : Real_Matrix) return Complex_Matrix;
Каждая операция возвращает результат применения соответствующей операции в numerics.generic_complex_types к каждому компоненту Left и соответствующему компоненту Right. Диапазоны индексов результата — те же, что у Left. Возникает ошибка Constraint_Error, если Left'Length(1) не равно Right'Length(1) или Left'Length(2) не равно Right'Length(2).
function "*" (Left : Real_Matrix;
Right : Complex_Matrix) return Complex_Matrix;
function "*" (Left : Complex_Matrix;
Right : Real_Matrix) return Complex_Matrix;
Right : Complex_Matrix) return Complex_Matrix;
function "*" (Left : Complex_Matrix;
Right : Real_Matrix) return Complex_Matrix;
Каждая операция предоставляет стандартную математическую операцию умножения матриц. Первый и второй диапазоны индексов результата — Left'Range(1) и Right'Range(2) соответственно. Возникает ошибка Constraint_Error, если Left'Length(2) не равно Right'Length(1). Эти операции включают внутренние произведения.
function "*" (Left : Real_Vector;
Right : Complex_Vector) return Complex_Matrix;
function "*" (Left : Complex_Vector;
Right : Real_Vector) return Complex_Matrix;
Right : Complex_Vector) return Complex_Matrix;
function "*" (Left : Complex_Vector;
Right : Real_Vector) return Complex_Matrix;
Каждая операция возвращает внешнее произведение (столбцового) вектора Left и (строкового) вектора Right, используя соответствующую операцию "*" в numerics.generic_complex_types для вычисления отдельных компонентов. Первый и второй диапазоны индексов результата — Left'Range и Right'Range соответственно.
function "*" (Left : Real_Vector;
Right : Complex_Matrix) return Complex_Vector;
function "*" (Left : Complex_Vector;
Right : Real_Matrix) return Complex_Vector;
Right : Complex_Matrix) return Complex_Vector;
function "*" (Left : Complex_Vector;
Right : Real_Matrix) return Complex_Vector;
Каждая операция предоставляет стандартную математическую операцию умножения (строкового) вектора Left на матрицу Right. Диапазон индексов (строкового) векторного результата — Right'Range(2). Возникает ошибка Constraint_Error, если Left'Length не равен Right'Length(1). Эти операции включают внутренние произведения.
function "*" (Left : Real_Matrix;
Right : Complex_Vector) return Complex_Vector;
function "*" (Left : Complex_Matrix;
Right : Real_Vector) return Complex_Vector;
Right : Complex_Vector) return Complex_Vector;
function "*" (Left : Complex_Matrix;
Right : Real_Vector) return Complex_Vector;
Каждая операция предоставляет стандартную математическую операцию умножения матрицы Left на (столбцовый) вектор Right. Диапазон индексов (столбцового) векторного результата — Left'Range(1). Возникает ошибка Constraint_Error, если Left'Length(2) не равно Right'Length. Эти операции включают внутренние произведения.
function "*" (Left : Complex; Right : Complex_Matrix) return Complex_Matrix;
Эта операция возвращает результат умножения каждого компонента Right на комплексное число Left, используя соответствующую операцию "*" в numerics.generic_complex_types. Диапазоны индексов результата — те же, что у Right.
function "*" (Left : Complex_Matrix; Right : Complex) return Complex_Matrix;
function "/" (Left : Complex_Matrix; Right : Complex) return Complex_Matrix;
function "/" (Left : Complex_Matrix; Right : Complex) return Complex_Matrix;
Каждая операция возвращает результат применения соответствующей операции в numerics.generic_complex_types к каждому компоненту матрицы Left и комплексному числу Right. Диапазоны индексов результата — те же, что у Left.
function "*" (Left : Real'Base;
Right : Complex_Matrix) return Complex_Matrix;
Right : Complex_Matrix) return Complex_Matrix;
Эта операция возвращает результат умножения каждого компонента Right на вещественное число Left, используя соответствующую операцию "*" в numerics.generic_complex_types. Диапазоны индексов результата — те же, что у Right.
function "*" (Left : Complex_Matrix;
Right : Real'Base) return Complex_Matrix;
function "/" (Left : Complex_Matrix;
Right : Real'Base) return Complex_Matrix;
Right : Real'Base) return Complex_Matrix;
function "/" (Left : Complex_Matrix;
Right : Real'Base) return Complex_Matrix;
Каждая операция возвращает результат применения соответствующей операции в numerics.generic_complex_types к каждому компоненту матрицы Left и вещественному числу Right. Диапазоны индексов результата — те же, что у Left.
function Solve (A : Complex_Matrix; X : Complex_Vector) return Complex_Vector;
Эта функция возвращает вектор Y такой, что X приблизительно равен A * Y. Это стандартная математическая операция для решения одного набора линейных уравнений. Диапазон индексов результата — A'Range(2). Возникает ошибка Constraint_Error, если A'Length(1), A'Length(2) и X'Length не равны. Возникает ошибка Constraint_Error, если матрица A плохо обусловлена.
function Solve (A, X : Complex_Matrix) return Complex_Matrix;
Эта функция возвращает матрицу Y такую, что X приблизительно равен A * Y. Это стандартная математическая операция для решения нескольких наборов линейных уравнений. Диапазоны индексов результата — A'Range(2) и X'Range(2). Возникает ошибка Constraint_Error, если A'Length(1), A'Length(2) и X'Length(1) не равны. Возникает ошибка Constraint_Error, если матрица A плохо обусловлена.
function Inverse (A : Complex_Matrix) return Complex_Matrix;
Эта функция возвращает матрицу B такую, что A * B приблизительно равна единичной матрице. Диапазоны индексов результата — A'Range(2) и A'Range(1). Возникает ошибка Constraint_Error, если A'Length(1) не равно A'Length(2). Возникает ошибка Constraint_Error, если матрица A плохо обусловлена.
function Determinant (A : Complex_Matrix) return Complex;
Эта функция возвращает определитель матрицы A. Возникает ошибка Constraint_Error, если A'Length(1) не равно A'Length(2).
function Eigenvalues(A : Complex_Matrix) return Real_Vector;
Эта функция возвращает собственные значения эрмитовой матрицы A в виде отсортированного по убыванию вектора, где самое большое значение — первое. Возникает ошибка Constraint_Error, если A'Length(1) не равно A'Length(2). Диапазон индексов результата — A'Range(1). Возникает ошибка Argument_Error, если матрица A не эрмитова.
procedure Eigensystem(A : in Complex_Matrix;
Values : out Real_Vector;
Vectors : out Complex_Matrix);
Values : out Real_Vector;
Vectors : out Complex_Matrix);
Эта процедура вычисляет как собственные значения, так и собственные векторы эрмитовой матрицы A. Параметр Values (выходной) совпадает с тем, что получено вызовом функции Eigenvalues. Параметр Vectors (выходной) — матрица, столбцы которой являются собственными векторами матрицы A. Порядок столбцов соответствует порядку собственных значений. Собственные векторы взаимно ортогональны, в том числе и в случае совпадения собственных значений. Возникает ошибка Constraint_Error, если A'Length(1) не равно A'Length(2), или если Values'Range не равен A'Range(1), или если диапазоны индексов параметра Vectors не равны диапазонам индексов A. Возникает ошибка Argument_Error, если матрица A не эрмитова. Возникает ошибка Constraint_Error в условиях, определённых реализацией, если алгоритм не сходится достаточно быстро.
function Unit_Matrix (Order : Positive;
First_1, First_2 : Integer := 1)
return Complex_Matrix;
First_1, First_2 : Integer := 1)
return Complex_Matrix;
Эта функция возвращает квадратную единичную матрицу с Order**2 компонентами и нижними границами First_1 и First_2 (для первого и второго диапазонов индексов соответственно). Все компоненты установлены в (0.0, 0.0), за исключением главной диагонали, компоненты которой установлены в (1.0, 0.0). Ошибка Constraint_Error возникает, если First_1 + Order – 1 > Integer'Last или First_2 + Order – 1 > Integer'Last.
Требования к реализации
Требования к точности для подпрограмм Solve, Inverse, Determinant, Eigenvalues и Eigensystem определяются реализацией.
Для операций, не включающих внутреннее произведение, требования к точности соответствуют соответствующим операциям типа Real'Base и Complex как в строгом, так и в ослабленном режиме (см. G.2).
Для операций, включающих внутреннее произведение, требования к точности в ослабленном режиме не заданы. В строгом режиме модуль абсолютной погрешности внутреннего произведения X*Y не должен превышать g*abs(X)*abs(Y), где g определяется как
g = X'Length * Real'Machine_Radix**(1 – Real'Model_Mantissa)
для смешанных комплексных и вещественных операндов
для смешанных комплексных и вещественных операндов
g = sqrt(2.0) * X'Length * Real'Machine_Radix**(1 – Real'Model_Mantissa)
для двух комплексных операндов
для двух комплексных операндов
Для нормы L2 требования к точности в ослабленном режиме не заданы. В строгом режиме относительная погрешность нормы не должна превышать g / 2.0 + 3.0 * Real'Model_Epsilon, где g имеет определение, соответствующее двум комплексным операндам.
Требования к документации
Реализации должны документировать любые применённые методы уменьшения ошибок отмены, такие как арифметика с расширенной точностью.
Разрешения на реализацию
Негенерические эквивалентные пакеты могут, но не обязаны быть фактическими экземплярами генерического пакета для соответствующего предопределённого типа.
Хотя многие операции определены в терминах операций из numerics.generic_complex_types, они не обязаны реализовываться вызовом этих операций, при условии, что эффект остаётся таким же.
Рекомендации по реализации
Реализации должны реализовывать функции Solve и Inverse, используя устоявшиеся методы. Реализации рекомендуется уточнять результат, выполняя итерацию по остаткам; если это делается, то это должно быть задокументировано.
Не предполагается, что какие-либо особые меры должны приниматься для определения того, является ли матрица плохо обусловленной или нет. Естественно возникающее переполнение (включая деление на ноль), которое будет результатом выполнения этих функций с плохо обусловленной матрицей и, таким образом, вызовет Constraint_Error, является достаточным.
Проверка того, является ли матрица эрмитовой, должна использовать оператор равенства для сравнения вещественных компонент и отрицания, за которым следует равенство для сравнения мнимых компонент (см. G.2.1).
Реализация должна минимизировать случаи, в которых алгоритм для Eigenvalues и Eigensystem не сходится.
Реализации не должны выполнять операции со смешанными комплексными и вещественными операндами, сначала преобразуя вещественный операнд в комплексный. См. G.1.1.