Программирование, 2019, № 5, стр. 56-66

ПАКЕТ ПРОЦЕДУР ОБРАЩЕНИЯ МАТРИЦ С ЛИНЕЙНЫМИ РАЗНОСТНЫМИ ОПЕРАТОРАМИ В РОЛИ ЭЛЕМЕНТОВ

С. А. Абрамов a*, Д. Е. Хмельнов a

a Федеральный исследовательский центр “Информатика и управление” РАН
119333 Москва, ул. Вавилова, 40, Россия

* E-mail: sergeyabramov@mail.ru

Поступила в редакцию 31.08.2018
После доработки 10.09.2018
Принята к публикации 10.09.2018

Полный текст (PDF)

Аннотация

Рассматриваются матрицы, принадлежащие ${\text{Ma}}{{{\text{t}}}_{n}}(\mathbb{K}[\sigma ,{{\sigma }^{{ - 1}}}])$, т.е. кольцу $n \times n$-матриц, элементами которых являются скалярные разностные операторы с коэффициентами в разностном поле $\mathbb{K}$ характеристики 0 с автоморфизмом (“сдвигом”) $\sigma $. Обсуждается некоторое семейство алгоритмов, позволяющих проверить, существует ли для данной матрицы из ${\text{Ma}}{{{\text{t}}}_{n}}(\mathbb{K}[\sigma ,{{\sigma }^{{ - 1}}}])$ обратная в этом кольце, и если существует, то позволяющих также и построить обратную матрицу. Этим алгоритмам сопоставляются сложности по числу арифметических операций и по числу сдвигов (т.е. применений $\sigma $ и ${{\sigma }^{{ - 1}}}$) в поле $\mathbb{K}$. Алгоритмы реализованы в виде Maple-процедур. Это дает возможность экспериментального сравнения затрачиваемого времени. Выбор лучшего алгоритма на основе этих экспериментов не всегда совпадает с выбором на сложностной основе. Делается попытка выяснить причины этого несовпадения. Предлагается пакет процедур решения рассматриваемых задач; в главной процедуре можно использовать параметр, указывающий на один из реализованных алгоритмов. В отсутствие этого параметра выбирается некоторый фиксированный алгоритм, достаточно удачно выглядящий как в сложностном, так и в экспериментальном сравнении с другими.

I. ВВЕДЕНИЕ

Матрицы с элементами, принадлежащими самым разным кольцам и полям, используются во всех областях математики и в приложениях. В этой статье речь идет о матрицах, элементы которых принадлежат кольцу линейных разностных скалярных операторов над некоторым разностным полем $\mathbb{K}$ с автоморфизмом (сдвигом) $\sigma $. Предполагается, что поле $\mathbb{K}$ имеет характеристику 0. Изложение разворачивается вокруг задач проверки обратимости данной матрицы обсуждаемого типа и нахождения обратной матрицы, сколь скоро она существует. Мы даем беглый обзор известных алгоритмов, основанных на регуляризации, т.е. получении в невырожденном виде сопоставляемых исходной операторной матрице ведущих и трейлинговых матриц, элементы которых принадлежат $\mathbb{K}$. В некоторых алгоритмах регуляризируются не ведущая и трейлинговая, а фронтальная и тыльная матрицы (их элементы также принадлежат $\mathbb{K}$; в [1] использован общий термин “выявляющие матрицы”).

Таким образом, для матриц обсуждаемого вида уже предложено некоторое число алгоритмов обращения, и мы приводим перечень этих алгоритмов в пп. III, IV. Для них проведено исследование сложности, где сложность рассматривается в двух вариантах:

1) арифметическая сложность, т.е. сложность в худшем случае по числу арифметических операций в поле $\mathbb{K}$,

2) сдвиговая сложность, – тоже в худшем случае, но по числу применений $\sigma $ и ${{\sigma }^{{ - 1}}}$.

Некоторые алгоритмы этого множества уже были реализованы в виде Maple-процедур. Мы предоставляем недостающие реализации тех алгоритмов, которые имеют сравнительно небольшие сложности и проводим экспериментальное сравнение этих алгоритмов по фактическим затратам времени. Интересно, что алгоритмы, имеющие меньшую сложность, не всегда оказываются самыми быстрыми, и это, разумеется, не является ни в какой мере парадоксом, так как сложность, будь то арифметическая или сдвиговая, или даже сложность по общему числу тех и других операций в худшем случае, во-первых, не характеризует всех затрат на выполнение алгоритма, и, во-вторых, сравнение затрат в худшем случае не охватывает всех мыслимых случаев, а с “худшим случаем” мы можем сталкиваться весьма редко, и охватываемые набором тестов случаи могут не попадать в разряд худших. Нелишне еще заметить, что когда мы сравниваем сложности, исходя из их асимптотических оценок, то не всегда получаем адекватное представление о значениях той или иной сложности для данных не слишком большого (не “астрономического”) размера.

Для выбора наиболее удобного, например, – наиболее быстрого, алгоритма из некоторого множества, сложностные характеристики алгоритмов этого множества играют, естественно, немаловажную роль. Но если сложности разных алгоритмов являются близкими величинами, для которых мы располагаем лишь асимптотическими оценками, то эти оценки дадут нам возможность лишь предварительного отбора. Последующее экспериментальное сравнение (тестирование) оказывается очень желательным, особенно когда тестовые задания имеют размеры “типичные” для тех ситуаций, на которые ориентирована реализация алгоритмов.

Итак, в статье мы даем как некоторые сложностные оценки для алгоритмов рассматриваемого множества, так и результаты экспериментального сравнения этих алгоритмов.

Здесь надо сказать, что в [2] мы указывали ссылку на страницу в интернете, содержащую реализацию алгоритма с наименьшими в асимптотическом смысле арифметической и сдвиговой сложностью. Отмечалось, что в реализации было сделано некоторое отступление от самого алгоритма в части регуляризации ведущей и трейлинговой матриц с помощью некоторого специального варианта алгоритма EG ([3, 4]). Однако выбор подходящего варианта этой регуляризации оставлен в [2], фактически, “за кадром”. В настоящей статье сравнению алгоритмов на уровне реализации уделено особое внимание.

Предлагается пакет процедур решения рассматриваемых задач; в главной процедуре можно использовать параметр, указывающий на один из реализованных алгоритмов. В отсутствие этого параметра выбирается некоторый фиксированный алгоритм, достаточно удачно выглядящий как в сложностном, так и в экспериментальном сравнении с другими.

Завершим это введение в статью несколькими примечаниями и соглашениями.

Обычно в случаях операторных матриц вместо “обратимая матрица” употребляется термин унимодулярная матрица. Мы также будем пользоваться этим термином.

Алгоритмы проверки унимодулярности и построения обратной матрицы для дифференциального случая, когда $\mathbb{K}$ является дифференциальным полем характеристики 0 с дифференцированием $\delta = '$ и когда элементы матриц суть скалярные линейные дифференциальные операторы над $\mathbb{K}$, рассматривались в [5]. Для данной операторной матрицы $L$ как дифференциальные, так и обсуждаемые ниже разностные алгоритмы вычисляют размерность пространства решений ${{V}_{L}}$ соответствующей системы уравнений $L(y) = 0$. Делается это в предположении, что компоненты решений принадлежат связанному с L адекватному (см. п. II) расширению поля $\mathbb{K}$. Как было установлено ранее (см. [6]), операторная матрица L полного ранга (строки L независимы над кольцом скалярных линейных операторов) является унимодулярной, если и только если $dim{{V}_{L}} = 0$, т.е. само пространство ${{V}_{L}}$ является нулевым.

Будем в дальнейшем придерживаться следующих стандартных обозначений. Кольцо $n \times n$-матриц ($n$ – положительное целое) с элементами в некотором кольце или поле $R$ обозначается через ${\text{Ma}}{{{\text{t}}}_{n}}(R)$. Если M – некоторая $n \times n$-матрица, то обозначение ${{M}_{{i,*}}}$, $1 \leqslant i \leqslant n$, используется для $1 \times n$-матрицы, равной i-й строке матрицы M. Диагональная $n \times n$-матрица с элементами ${{r}_{1}},\; \ldots ,\;{{r}_{n}}$ на диагонали обозначается через ${\text{diag}}({{r}_{1}},\; \ldots ,\;{{r}_{n}})$, единичная $n \times n$-матрица – через ${{I}_{n}}$.

II. ПРЕДВАРИТЕЛЬНЫЕ СВЕДЕНИЯ

Напомним, что разностное кольцо – это коммутативное кольцо $\mathbb{K}$ с единицей и с автоморфизмом $\sigma $ (который мы часто будем называть сдвигом). Если при этом $\mathbb{K}$ является полем, то оно называется соответственно разностным полем. В дальнейшем разностные поля без оговорок предполагаются полями характеристики 0.

Кольцом констант разностного кольца $\mathbb{K}$ называется ${\text{Const}}(\mathbb{K}) = \{ c \in K{\text{|}}\sigma c = c\} $. В случае, когда $\mathbb{K}$ является разностным полем, ${\text{Const}}(\mathbb{K})$ будет подполем поля $\mathbb{K}$ (полем констант поля $\mathbb{K}$).

Пусть $\mathbb{K}$ – разностное поле с автоморфизмом $\sigma $, кольцо $\Lambda $ – разностное расширение поля $\mathbb{K}$ (соответствующий автоморфизм кольца $\Lambda $ совпадает на $\mathbb{K}$ с $\sigma $, для этого автоморфизма кольца $\Lambda $ используется то же самое обозначение $\sigma $).

Определение 1. Кольцо $\Lambda $, являющееся разностным расширением поля $\mathbb{K}$, представляет собой адекватное разностное расширение поля $\mathbb{K}$, если ${\text{Const}}(\Lambda )$ является полем и для произвольной системы

$\sigma y = Ay,\quad y = {{({{y}_{1}},\; \ldots ,\;{{y}_{n}})}^{T}},$
с невырожденной матрицей $A \in {\text{Ma}}{{{\text{t}}}_{n}}(\mathbb{K})$ размерность линейного над полем ${\text{Const}}(\Lambda )$ пространства принадлежащих ${{\Lambda }^{n}}$ решений равна n.

Существование некоторого адекватного разностного расширения $\Lambda $ для произвольного разностного поля доказывается достаточно элементарно – см. [7, п. 5.1]. Для произвольного адекватного расширения равенство ${\text{Const}}(\Lambda ) = {\text{Const}}(\mathbb{K})$ не гарантируется, в общем случае ${\text{Const}}(\mathbb{K})$ является для ${\text{Const}}(\Lambda )$ собственным подполем.

Примечание 1. Так называемый q-разностный случай ([8, 9]) охватывается общим разностным случаем.

Скалярный разностный оператор является элементом кольца $\mathbb{K}[\sigma ,{{\sigma }^{{ - 1}}}]$.

Определение 2. Для ненулевого скалярного оператора $f = \sum {{{a}_{i}}{{\sigma }^{i}}} $ мы определяем его ведущий и трейлинговый порядки:

$\overline {{\text{ord}}} f = max\{ i\,{\text{|}}\,{{a}_{i}} \ne 0\} ,\quad \underline {{\text{ord}}} f = \min \{ i\,{\text{|}}\,{{a}_{i}} \ne 0\} ,$
а также порядок ${\text{ord}}f\, = \,\overline {{\text{ord}}} f\, - \,\underline {{\text{ord}}} f.$ Полагаем $\overline {{\text{ord}}} 0$ = = –∞ , $\underline {{\text{ord}}} 0 = \infty $, ${\text{ord}}0 = - \infty $.

Для конечного набора $F$ скалярных операторов (вектора, матрицы, строки матрицы и т.д.) определим ведущий порядок $\overline {{\text{ord}}} F$ как максимум ведущих порядков его элементов, трейлинговый порядок $\underline {{\text{ord}}} F$ – как минимум трейлинговых порядков его элементов и полагаем ordF = $\overline {{\text{ord}}} F\, - \,\underline {{\text{ord}}} F$.

Разностная операторная матрица – это матрица, принадлежащая ${\text{Ma}}{{{\text{t}}}_{n}}(\mathbb{K}[\sigma ,{{\sigma }^{{ - 1}}}])$. Далее мы сопоставляем такой операторной матрице некоторые матрицы, принадлежащие ${\text{Ma}}{{{\text{t}}}_{n}}(\mathbb{K})$. Мы будем коротко называть операторную матрицу просто оператором.

Оператор имеет полный ранг (или: является оператором полного ранга), если его строки линейно независимы над $\mathbb{K}[\sigma ,{{\sigma }^{{ - 1}}}]$.

Если

$L \in {\text{Ma}}{{{\text{t}}}_{n}}(\mathbb{K}[\sigma ,{{\sigma }^{{ - 1}}}]),\quad l = \overline {{\text{ord}}} L,\quad t = \underline {{\text{ord}}} L,$
и $L \ne 0$, то L можно записать в развернутом виде
$L = {{A}_{l}}{{\sigma }^{l}} + {{A}_{{l - 1}}}{{\sigma }^{{l - 1}}} + \cdots + {{A}_{t}}{{\sigma }^{t}},$
где ${{A}_{l}},{{A}_{{l - 1}}},\; \ldots ,\;{{A}_{t}} \in {\text{Ma}}{{{\text{t}}}_{n}}(\mathbb{K})$, при этом матрицы Al, ${{A}_{t}}$ (ведущая и трейлинговая матрицы исходного оператора) ненулевые.

Определение 3. Пусть ведущие порядки строк оператора L равны ${{\alpha }_{1}},\; \ldots ,\;{{\alpha }_{n}}$, а трейлинговые – ${{\beta }_{1}},\; \ldots ,\;{{\beta }_{n}}$. Фронтальной матрицей оператора L назовем ведущую матрицу оператора PL, где

$P = {\text{diag}}({{\sigma }^{{l - {{\alpha }_{1}}}}},\; \ldots ,\;{{\sigma }^{{l - {{\alpha }_{n}}}}}),\quad l = \overline {{\text{ord}}} L.$

Соответственно тыльной матрицей оператора $L$ назовем трейлинговую матрицу оператора QL, где

$Q = {\text{diag}}({{\sigma }^{{t - {{\beta }_{1}}}}},\; \ldots ,\;{{\sigma }^{{t - {{\beta }_{n}}}}}),\quad t = \underline {{\text{ord}}} L.$

Мы говорим, что оператор L строго редуцирован, если невырождены как фронтальная, так и тыльная матрицы этого оператора.

Определение 4. Оператор $L \in {\text{Ma}}{{{\text{t}}}_{n}}(\mathbb{K}[\sigma ,{{\sigma }^{{ - 1}}}])$ называется унимодулярным или обратимым, если для него существует обратный ${{L}^{{ - 1}}} \in {\text{Ma}}{{{\text{t}}}_{n}}(\mathbb{K}$[σ, σ–1]): $L{{L}^{{ - 1}}} = {{L}^{{ - 1}}}L$ = In. Множество унимодулярных $n \times n$-операторов будет обозначаться через ${{\Upsilon }_{n}}$. Два оператора ${{L}_{1}},{{L}_{2}} \in {\text{Ma}}{{{\text{t}}}_{n}}(\mathbb{K}[\sigma ,{{\sigma }^{{ - 1}}}])$ назовем эквивалентными, если ${{L}_{1}} = U{{L}_{2}}$ для некоторого $U \in {{\Upsilon }_{n}}$.

Далее мы обозначаем через $\Lambda $ некоторое фиксированное адекватное разностное расширение исходного разностного поля $\mathbb{K}$ с автоморфизмом σ. Обозначение ${{V}_{L}}$ привлекается для пространства принадлежащих ${{\Lambda }^{n}}$ решений системы $L(y)$ = 0. Для краткости будем иногда говорить о ${{V}_{L}}$ как о пространстве решений оператора L.

Теорема 1. ([10]) Пусть $L \in {\text{Ma}}{{{\text{t}}}_{n}}(\mathbb{K}[\sigma ,{{\sigma }^{{ - 1}}}])$ имеет полный ранг. Тогда

(i) Если оператор $L$ строго редуцирован, то dimVL = = $\sum\nolimits_{i = 1}^n \,{\text{ord}}{{L}_{{i,*}}}.$

(ii) $L \in {{\Upsilon }_{n}} \Leftrightarrow {{V}_{L}} = 0$.

III. РЕГУЛЯРИЗАЦИЯ: СЕМЕЙСТВА АЛГОРИТМОВ EG И RR

A. Алгоритмы ${\text{E}}{{{\text{G}}}_{\sigma }}$ и ${\text{E}}{{{\text{G}}}_{{{{\sigma }^{{ - 1}}}}}}$

Для L полного ранга алгоритм ${\text{E}}{{{\text{G}}}_{\sigma }}$ (см. [3, 4, 11]) строит такой эквивалентный разностный оператор ${{L}_{ + }} \in {\text{Ma}}{{{\text{t}}}_{n}}(\mathbb{K}[\sigma ,{{\sigma }^{{ - 1}}}])$, что $\overline {{\text{ord}}} {{L}_{ + }} = \overline {{\text{ord}}} L$, $\underline {{\text{ord}}} L \geqslant \underline {{\text{ord}}} L$ и ${{L}_{ + }}$ имеет невырожденную ведущую матрицу. Если ранг L не полон, то алгоритм сообщает об этом.

Не входя в рассмотрение мелких деталей, представим основную идею этого алгоритма. Алгоритм ${\text{E}}{{{\text{G}}}_{\sigma }}$ строит ${{L}_{ + }}$ на месте L, т.е. L изменяется шаг за шагом, постепенно превращаясь в ${{L}_{ + }}$. На каждом шаге алгоритма проверяется, являются ли строки ведущей матрицы линейно зависимыми над $\mathbb{K}$, и, если являются, то из строк оператора, которым соответствуют ненулевые коэффициенты зависимости, выбирается имеющая наибольший порядок (если таких строк больше одной, то берется любая из них). Затем выбранная строка редуцируется с помощью остальных строк оператора. Если получается нулевая строка, то исходный оператор не имел полного ранга. Иначе с помощью $\sigma $ редуцированная строка сдвигается так, чтобы ее ведущий порядок сравнялся с ведущими порядками других строк оператора.

Показано, что после нескольких шагов алгоритм завершается: либо получаем нулевую строку в операторе либо приходим к оператору с невырожденной ведущей матрицей.

Аналогично, алгоритм ${\text{E}}{{{\text{G}}}_{{{{\sigma }^{{ - 1}}}}}}$ строит эквивалентный разностный оператор ${{L}_{ - }}$ с невырожденной трейлинговой матрицей.

Расширенный алгоритм ${\text{E}}{{{\text{G}}}_{\sigma }}$ (мы назовем его ${\text{ExtE}}{{{\text{G}}}_{\sigma }}$) позволяет наряду с ${{L}_{ + }}$ найти такой унимодулярный оператор $U \in {{\Upsilon }_{n}}$, что ${{L}_{ + }} = UL$. Можно соответствующим образом определить и алгоритм ${\text{ExtE}}{{{\text{G}}}_{{{{\sigma }^{{ - 1}}}}}}$.

Предложение 1. ([2, 10]) Арифметическая сложность каждого из алгоритмов ${\text{E}}{{{\text{G}}}_{\sigma }}$ и ${\text{E}}{{{\text{G}}}_{{{{\sigma }^{{ - 1}}}}}}$ допускает оценку11

$\Theta ({{n}^{{\omega + 1}}}d + {{n}^{3}}{{d}^{2}}),$
где $\omega $показатель матричного умножения, $2 < \omega \leqslant 3$. Для сдвиговой сложности имеет место оценка

$\Theta ({{n}^{2}}{{d}^{2}}).$

Арифметическая и сдвиговая сложности алгоритмов ${\text{ExtE}}{{{\text{G}}}_{\sigma }}$ и ${\text{ExtE}}{{{\text{G}}}_{{{{\sigma }^{{ - 1}}}}}}$ допускают оценки

$\Theta ({{n}^{4}}{{d}^{2}}),\quad \Theta ({{n}^{4}}{{d}^{2}}).$

B. Алгоритмы ${\text{R}}{{{\text{R}}}_{\sigma }}$ и ${\text{R}}{{{\text{R}}}_{{{{\sigma }^{{ - 1}}}}}}$

Для $L$ полного ранга алгоритм ${\text{R}}{{{\text{R}}}_{\sigma }}$ (см. [14, 15]) строит такой эквивалентный оператор ${{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{L} }_{ + }}$ ∈ ∈ ${\text{Ma}}{{{\text{t}}}_{n}}(\mathbb{K}$[σ, σ–1]), что $\overline {{\text{ord}}} {{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{L} }_{ + }} \leqslant \overline {{\text{ord}}} L$, $\underline {{\text{ord}}} {{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{L} }_{ + }}\, \geqslant \,\underline {{\text{ord}}} L$, ${{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{L} }_{ + }}$ имеет невырожденную фронтальную матрицу. Если ранг L не полон, то алгоритм сообщает об этом.

В основе алгоритма ${\text{R}}{{{\text{R}}}_{\sigma }}$ также лежит идея поиска линейной зависимости строк матрицы (но не ведущей, а фронтальной) и выполнения сдвигов.

Расширенный алгоритм ExtRRσ позволяет наряду с ${{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{L} }_{ + }}$ найти такой унимодулярный оператор $U \in {{\Upsilon }_{n}}$, что ${{L}_{ + }} = UL$.По аналогии с RRσ алгоритм ${\text{R}}{{{\text{R}}}_{{{{\sigma }^{{ - 1}}}}}}$ строит эквивалентный оператор ${{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{L} }_{ - }}$ с невырожденной тыльной матрицей.

Расширенный вариант алгоритма ${\text{R}}{{{\text{R}}}_{{{{\sigma }^{{ - 1}}}}}}$ мы назовем ${\text{ExtR}}{{{\text{R}}}_{{{{\sigma }^{{ - 1}}}}}}$.

Предложение 2. ([10]) Арифметическая сложность каждого из алгоритмов ${\text{R}}{{{\text{R}}}_{\sigma }}$ и ${\text{R}}{{{\text{R}}}_{{{{\sigma }^{{ - 1}}}}}}$ допускает оценку

$\Theta ({{n}^{{\omega + 1}}}d + {{n}^{3}}{{d}^{2}}).$

Для сдвиговой сложности имеет место оценка

$\Theta ({{n}^{3}}{{d}^{3}}),$
если не прибегать к хранению результатов всех сдвигов строк. Если же все результаты сдвигов сохраняются, то (1) заменяется на $\Theta ({{n}^{2}}{{d}^{3}})$.

Арифметическая и сдвиговая сложности алгоритмов ${\text{ExtR}}{{{\text{R}}}_{\sigma }}$ и ${\text{ExtR}}{{{\text{R}}}_{{{{\sigma }^{{ - 1}}}}}}$ допускают оценки

$\Theta ({{n}^{4}}{{d}^{2}}),\quad \Theta ({{n}^{5}}{{d}^{3}}),$
если не хранить результаты всех сдвигов строк. Когда эти результаты сохраняются, сложности допускают оценки

$\Theta ({{n}^{4}}{{d}^{2}}),\quad O({{n}^{4}}{{d}^{3}}).$

C. Алгоритмы $\Delta {\text{E}}{{{\text{G}}}_{\sigma }}$, $\Delta {\text{E}}{{{\text{G}}}_{{{{\sigma }^{{ - 1}}}}}}$

Определение 5. Пусть i-я строка ведущей матрицы оператора L имеет вид

$(\underbrace {0,\; \ldots ,\;0}_{k - 1},\;a,\; \ldots ,\;b),$
$1 \leqslant k \leqslant n$, $a \ne 0$. Тогда число k будем называть отступом i-й строки оператора L. Если $i$-я строка оператора L нулевая, то ее отступ равен $ - \infty $.

Если строки L имеют попарно различные положительные отступы, то ведущая матрица невырождена: с точностью до порядка строк она будет треугольной с ненулевыми диагональными элементами. Допустим, что строки ${{r}_{1}} = {{L}_{{i,*}}}$ и ${{r}_{2}} = {{L}_{{j,*}}}$ имеют одинаковые положительные отступы, равные k, и при этом $\overline {{\text{ord}}} {{L}_{{i,*}}} = \overline {{\text{ord}}} {{L}_{{j,*}}} = d$. Выполнив одну арифметическую операцию в $\mathbb{K}$, можно найти $v \in \mathbb{K}$ такое, что строка

${{r}_{2}} - v{{r}_{1}}$
имеет или больший, чем k, отступ, или меньший, чем d, ведущий порядок (возможно и то, и другое вместе). Та из строк ${{r}_{1}},\;{{r}_{2}}$, которая имеет меньший трейлинговый порядок, заменяется в L строкой (2); когда порядки этих строк равны, заменяется любая из них. Если L имеет полный ранг, то ведущая матрица после не более, чем $n \cdot nd$ таких унимодулярных преобразований (каждое из них эквивалентно умножению слева на унимодулярный оператор), станет треугольной. Этот прием может использоваться вместо поиска линейной зависимости строк ведущей матрицы.

Примечание 2. В предположении, что $\mathbb{K}$ есть поле рациональных функций от $x$ с автоморфизмом $x \to x + 1$, этот прием был использован в [3] в первой версии алгоритма EG (см. также [16]).

Использование этого приема приводит к алгоритмам $\Delta {\text{E}}{{{\text{G}}}_{\sigma }}$, $\Delta {\text{E}}{{{\text{G}}}_{{{{\sigma }^{{ - 1}}}}}}$  для получения эквивалентного оператора с невырожденной ведущей или соответственно трейлинговой матрицей.

Примечание 3. Если один из алгоритмов ${\text{E}}{{{\text{G}}}_{\sigma }}$, $\Delta {\text{E}}{{{\text{G}}}_{\sigma }}$ применяется к оператору с невырожденной тыльной матрицей, то в результате получим оператор, который помимо невырожденной ведущей матрицы будет иметь невырожденную тыльную матрицу. Это является следствием используемого правила замены “Та из строк ${{r}_{1}},\;{{r}_{2}}$, которая имеет меньший нижний порядок, заменяется в L строкой (2); когда нижние порядки этих строк равны, заменяется любая из них”.

Предложение 3. ([2]) Для $\Delta {\text{EG}}$-алгоритмов арифметическая сложность допускает оценку

$\Theta ({{n}^{3}}{{d}^{2}}).$

Сдвиговая сложность допускает оценку

$\Theta ({{n}^{2}}{{d}^{2}}).$
Для ${\text{Ext}}\Delta {\text{E}}{{{\text{G}}}_{\sigma }}$, ${\text{Ext}}\Delta {\text{E}}{{{\text{G}}}_{{{{\sigma }^{{ - 1}}}}}}$ как арифметическая, так и сдвиговая сложность допускает оценку

$O({{n}^{4}}{{d}^{2}}).$

Примечание 4. В дифференциальном случае EG-исключения, вообще говоря, приводят к оператору, неэквивалентному исходному. Получаемый оператор имеет все решения, которые имел исходный оператор, но, возможно, имеет и некоторые дополнительные решения. Это послужило причиной того, что в дифференциальном случае как алгоритм проверки унимодулярности, так и алгоритм построения обратного оператора были основаны в [5] на ${\text{R}}{{{\text{R}}}_{\delta }}$. Первый разностный алгоритм ([10]) был аналогичен по своей конструкции дифференциальному алгоритму. Именно последующий переход к алгоритмам ${\text{E}}{{{\text{G}}}_{\sigma }}$, ${\text{E}}{{{\text{G}}}_{{{{\sigma }^{{ - 1}}}}}}$ как основе алгоритмов проверки унимодулярности и построения обратного оператора позволил в разностном случае понизить сдвиговую сложность.

IV. ПРОВЕРКА УНИМОДУЛЯРНОСТИ, ОБРАЩЕНИЕ ОПЕРАТОРОВ

В основе имеющихся алгоритмов проверки унимодулярности оператора L и построения обратного оператора ${{L}^{{ - 1}}}$ в случае его существования, лежит вычисление $dim{{V}_{L}}$. Такое вычисление, в свою очередь, основывается на алгоритмах регуляризации (см. п. III и примечание 3).

Эквивалентные оператору L операторы

${\text{E}}{{{\text{G}}}_{\sigma }}({\text{E}}{{{\text{G}}}_{{{{\sigma }^{{ - {\text{1}}}}}}}}(L)),\quad \Delta {\text{E}}{{{\text{G}}}_{\sigma }}(\Delta {\text{E}}{{{\text{G}}}_{{{{\sigma }^{{ - 1}}}}}}(L))$
в силу примечания 3 являются строго редуцированным. По теореме 1 мы можем вычислить ${\text{dim}}{{V}_{L}}$ и установить, является ли L унимодулярным. Если $dim{{V}_{L}} = 0$, то в силу теоремы 1(i) соответствующий оператор из (5) принадлежит ${\text{Ma}}{{{\text{t}}}_{n}}(\mathbb{K})$, и ${{L}^{{ - 1}}}$ вычисляется легко.

Алгоритмы из [10] разработаны по образцу алгоритмов для дифференциального случая [5] с использованием RR, в то время как алгоритм из [2] построен на $\Delta {\text{EG}}$, это позволило снизить сдвиговую сложность – см. примечание 4. В [2] предложены алгоритмы Unimodularity Testing и Inverse Operator, сложности которых (арифметическая и сдвиговая) суть (3), (4) и соответственно

$O({{n}^{4}}{{d}^{2}}),\quad O({{n}^{3}}{{d}^{2}}).$

Построение обратного оператора выполняется с привлечением расширенных версий основных алгоритмов, в то время как проверка унимодулярности обходится основными версиями этих же алгоритмов.

Как показано в [10], основанные на RR алгоритмы имеют сложности $\Theta ({{n}^{4}}{{d}^{2}})$ и $\Theta ({{n}^{4}}{{d}^{3}})$ (если сохранять результаты всех сдвигов, иначе сдвиговая сложность будет $\Theta ({{n}^{4}}{{d}^{5}})$. Для алгоритмов, основанных на EG, сложности равны $\Theta ({{n}^{4}}{{d}^{2}})$, $\Theta ({{n}^{4}}{{d}^{2}})$).

V. РЕАЛИЗАЦИЯ, ЭКСПЕРИМЕНТАЛЬНОЕ СРАВНЕНИЕ

Реализация рассматриваемых алгоритмов22 выполнена в среде Maple [17] (предварительная версия реализации представлена в [2]). За основу взята описанная в [1] реализация алгоритмов EG, ΔEG, RR для дифференциального случая. Процедуры переработаны для использования в разностном случае, и дополнены реализацией расширенных версий алгоритмов. Также реализован алгоритм проверки унимодулярности оператора и построения обратного оператора, использующий в качестве базового алгоритма один из алгоритмов EG, ΔEG, RR по выбору пользователя. В этой реализации сдвиг определен как $\sigma y(x) = y(x - 1)$ и требуется специальный выбор заменяемого уравнения при выполнении шага исключения в алгоритмах EG, ΔEG для гарантии завершения работы. Существует вариант этих алгоритмов, который не требует такого специального выбора заменяемого уравнения. В этом варианте для шага сдвига используется оператор $\sigma - 1$ (использование аналогичного варианта алгоритма EG для q-разностного случая упомянуто в [18, примеч. 3]). Но при использовании алгоритмов EG, ΔEG для реализации алгоритма проверки унимодулярности оператора и поиска обратного оператора существенно использование именно версии с контролем порядка исключений (см. примечание 3).

Алгоритмы реализованы в виде процедур нового пакета EGRRext. Пакет предоставляет процедуры:

EG – реализует алгоритм EG и его расширенную версию ExtEG;

RR – реализует алгоритм RR и его расширенную версию ExtRR;

TriangleEG – реализует алгоритм ΔEG и его расширенную версию ExtΔEG;

IsUnimodular – реализует алгоритмы Unimodularity Testing и Inverse Operator.

Оператор $L = {{A}_{l}}{{\sigma }^{l}} + {{A}_{{l - 1}}}{{\sigma }^{{l - 1}}} + \cdots + {{A}_{t}}{{\sigma }^{t}}$ во входных параметрах процедур представляется в виде списка

$[A,l,t],$
где Aявная матрица
$A = ({{A}_{l}}{\text{|}}{{A}_{{l - 1}}}{\text{|}}\; \ldots \;{\text{|}}{{A}_{t}})$
размера $n \times n(l - t + 1)$. Явная матрица A представляется в виде стандартного Maple-объекта Matrix. Элементами явной матрицы являются рациональные функции одной переменной, которые в свою очередь представляются стандартным образом. Если t = 0, то оператор может быть также представлен только одной явной матрицей A.

Процедура IsUnimodular возвращает true или false в качестве результата проверки унимодулярности данного на вход оператора. Если указан необязательный входной параметр процедуры – имя переменной, то также вычисляется соответствующий обратный оператор в случае его существования, и вычисленный обратный оператор присваивается этой переменной. Обратный оператор также представляется в виде списка из его явной матрицы и его ведущего и трейлингового порядков. Если необязательное имя переменной не задано, то процедура использует алгоритм Unimodularity Testing, иначе – алгоритм Inverse Operator (см. п. IV). При этом процедура имеет еще один необязательный параметр method, который может принимать значения EG, TEG или RR и позволяет указать какой из алгоритмов EG, ΔEG, RR, соответственно, использовать в качестве базового (если этот параметр не указан, то используется EG). В первой версии реализации, представленной в [2], в качестве базового алгоритма использовался только EG.

Пример 1. Рассмотрим применение процедуры IsUnimodular к оператору

$L = \left( {\begin{array}{*{20}{c}} 1&{ - \frac{1}{x}\sigma } \\ {\frac{{{{x}^{2}}}}{2}}&{ - \frac{x}{2}\sigma + 1} \end{array}} \right) = \left( {\begin{array}{*{20}{c}} 0&{ - \frac{1}{x}} \\ 0&{ - \frac{x}{2}} \end{array}} \right)\sigma + \left( {\begin{array}{*{20}{c}} 1&0 \\ {\frac{{{{x}^{2}}}}{2}}&1 \end{array}} \right).$

Явная матрица оператора равна

$\left( {\begin{array}{*{20}{c}} 0&{ - \frac{1}{x}}&1&0 \\ 0&{ - \frac{x}{2}}&{\frac{{{{x}^{2}}}}{2}}&1 \end{array}} \right),$
с $l = 1$ и t = 0. Процедура вызывается дважды для каждого из методов: первый раз только для проверки унимодулярности, а во второй раз и для построения обратного оператора. Дополнительно выведено и время вычислений:

> L := Matrix([[0, –1/x, 1, 0],

          [0, –x/2, x^2/2, 1]]);

$L: = \left[ {\begin{array}{*{20}{c}} 0&{ - \frac{1}{x}}&1&0 \\ 0&{ - \frac{x}{2}}&{\frac{{{{x}^{2}}}}{2}}&1 \end{array}} \right]$

> st:=time():

  IsUnimodular(L, x, ’method’=’EG’);

  time()-st;

$true$
$0.021$

> st:=time():

  IsUnimodular(L, x, ’InvL_EG',

                         ’method’=’EG’);

  time()-st;

$true$
$0.026$

> InvL_EG;

$\left[ {\left[ {\begin{array}{*{20}{c}} { - \frac{{{{{(x + 1)}}^{2}}}}{{2x}}}&{\frac{1}{x}}&1&0 \\ 0&0&{ - \frac{{{{x}^{2}}}}{2}}&1 \end{array}} \right],1,0} \right]$

> st:=time():

  IsUnimodular(L, x, ’method’=’TEG’);

  time()-st;

$true$
$0.003$

> st:=time():

  IsUnimodular(L, x, ’InvL_TEG',

             ’method’=’TEG’);

  time()-st;

$true$
$0.008$

> InvL_TEG

$\left[ {\left[ {\begin{array}{*{20}{c}} { - \frac{{{{{(x + 1)}}^{2}}}}{{2x}}}&{\frac{1}{x}}&1&0 \\ 0&0&{ - \frac{{{{x}^{2}}}}{2}}&1 \end{array}} \right],1,0} \right]$

> st:=time():

 IsUnimodular(L, x, ’method’=’RR’);

 time()-st;

$true$
$0.032$

> st:=time():

  IsUnimodular(L, x, ’InvL_RR',

                       ’method’=’RR’);

  time()-st;

$true$
$0.040$

> InvL_RR;

$\left[ {\left[ {\begin{array}{*{20}{c}} { - \frac{{{{{(x + 1)}}^{2}}}}{{2x}}}&{\frac{1}{x}}&1&0 \\ 0&0&{ - \frac{{{{x}^{2}}}}{2}}&1 \end{array}} \right],1,0} \right]$

Таким образом

${{L}^{{ - 1}}} = \left( {\begin{array}{*{20}{c}} {1 - \frac{{{{{(x + 1)}}^{2}}}}{{2x}}\sigma }&{\frac{1}{x}\sigma } \\ { - \frac{{{{x}^{2}}}}{2}}&1 \end{array}} \right).$

Пример 2. Оператор

$M = \left( {\begin{array}{*{20}{c}} {{{I}_{n}}}&{{{M}_{1}}}&{{{0}_{n}}} \\ {{{0}_{n}}}&{{{I}_{n}}}&{{{M}_{2}}} \\ {{{0}_{n}}}&{{{0}_{n}}}&{{{I}_{n}}} \end{array}} \right),$
где 0n – нулевая матрица размера $n \times n$, M1, ${{M}_{2}} \in {\text{Ma}}{{{\text{t}}}_{n}}(\mathbb{K}[\sigma ,{{\sigma }^{{ - 1}}}])$ – произвольные операторы, является унимодулярным для любых ${{M}_{1}}$ and ${{M}_{2}}$. Обратный оператор равен

${{M}^{{ - 1}}} = \left( {\begin{array}{*{20}{c}} {{{I}_{n}}}&{ - {{M}_{1}}}&{{{M}_{1}}{{M}_{2}}} \\ {{{0}_{n}}}&{{{I}_{n}}}&{ - {{M}_{2}}} \\ {{{0}_{n}}}&{{{0}_{n}}}&{{{I}_{n}}} \end{array}} \right).$

Выполнена серия экспериментов. Для каждого из них генерировалась пара из разреженных на 50% операторов ${{M}_{1}}$ и ${{M}_{2}}$ с элементами в виде случайных полиномов степени не больше 2. Затем для (2) находился обратный оператор. Операторы ${{M}_{1}}$ и ${{M}_{2}}$ имели одинаковое число строк, оператор ${{M}_{1}}$ имел порядок 2, а порядок оператора ${{M}_{2}}$ принимал значения $d = 3,5,7,9,11$ (тот же порядок имел и оператор M). Число строк ${{M}_{1}}$ и ${{M}_{2}}$ равнялось $n = 2,3,4$ (соответственно, число строк M равнялось $k = 4,6,8$). Обратный оператор M в каждом эксперименте вычислялся всеми тремя методами. Полученные результаты представлены в табл. 1. Использование метода, основанного на RR, в ряде экспериментов не дало возможности получить результат – вычисления были принудительно остановлены, когда был исчерпан доступный объем физической памяти используемого компьютера. Это помечено в таблице знаком $ > $ с указанием времени до принудительной остановки вычислений.

Таблица 1.

Результаты экспериментов, в секундах

    d = 3 d = 7 d = 11 d = 15
k = 6 EG 0.172 0.297 0.500 0.672
  TEG 0.125 0.375 1.032 2.563
  RR 0.937 3.844 5.844 11.500
k = 9 EG 0.610 2.562 6.813 21.422
  TEG 0.985 4.594 11.859 26.469
  RR 4.625 82.953 >5100 >6000
k = 12 EG 1.125 5.319 31.953 17.422
  TEG 3.219 15.735 36.312 59.312
  RR 18.250 170.078 >8300 >19 100
k = 15 EG 3.657 49.219 215.329 908.984
  TEG 8.047 41.516 90.531 213.032
  RR 1031.422 >20 200 >6100 >21 100

VI. АНАЛИЗ РАСХОЖДЕНИЙ

Из табл. 1 видно, что результаты в целом соответствуют теоретическим оценкам сложности. При этом относительный рост времени вычислений с ростом числа строк и порядка оператора происходит заметно быстрее, чем это можно было ожидать, исходя из этих теоретических оценок. Чтобы понять причину этих расхождений нами был реализован режим работы процедуры IsUnimodular, в котором дополнительно выводятся характеристические параметры промежуточных результатов вычислений. Эти параметры выводятся после каждого появления нулевой строки в выявляющей матрице (после выполнения редукции в алгоритмах EG и RR или после выполнения одной или нескольких замен строк в алгоритме ΔΕΓ). В качестве таких параметров используются параметры строки оператора, в которой появилась нулевая строка в выявляющей матрице, а именно объем данных в представлении этой строки: используется стандартная Maple-функция length, а также максимум сумм степеней числителя и знаменателя коэффициентов в этой строке оператора. Эти дополнительные данные показали, что в ходе промежуточных вычислений коэффициенты оператора значительно “распухают”. Несмотря на то, что в эксперименте суммы степеней числителей и знаменателей коэффициентов в исходном операторе M не превышает 2, а в обратном к нему не превышает 4, в промежуточных вычислениях эта величина достигала сотен и даже тысяч. Столь же значительно рос и объем данных.

В табл. 2 представлены сводные данные по тем же экспериментам, которые представлены в 1. Для каждого эксперимента представлено пять параметров:

• максимальный среди всех промежуточных строк объем используемых данных,

• максимальная среди всех промежуточных строк величина максимума суммы степеней числителя и знаменателя,

• число промежуточных строк,

• средний по всем промежуточным строкам объем используемых данных,

• средняя по всем промежуточным строкам величина максимума суммы степеней числителя и знаменателя.

Для тех экспериментов, которые были принудительно остановлены, указываются параметры, вычисленные для промежуточных результатов, полученных до остановки вычислений.

Представленный в табл. 1 значительный рост времени вычислений в экспериментах с ростом числа строк и порядка оператора согласуется с “распуханием” коэффициентов в промежуточных вычислениях, представленных в табл. 2 характеристическими параметрами. В результате такого “распухания” фактические вычислительные затраты на выполнение одной арифметической операции, как и операции сдвига, начинают существенно расти, и этот рост оказывается более существенным в сравнении с ростом числа самих таких операций, отраженных в сложности алгоритмов. Для разных методов, это “распухание” происходит с разной скоростью. В наших экспериментах с этой точки зрения особенно плохо проявил себя алгоритм RR. Это согласуется с результатами сравнения аналогичных алгоритмов в дифференциальном случае, представленными в [1]. Отметим также, что в условиях, когда “распухание” в разных алгоритмах имеет схожие характеристики, то есть затраты на выполнения одной операции в каждом алгоритме сопоставимы, то на первый план снова выходит число этих операций, и относительное время вычислений больше соответствует теоретическим оценкам сложности.

Таблица 2.

Характеристические параметры промежуточных вычислений в экспериментах

    d = 3 d = 7 d = 11 d = 15
k = 6 EG 88 151 227 294
2 2 2 2
    11 17 25 30
    63 105 154 201
    1 1 1 2
  TEG 138 1169 11 188 52 729
    3 10 28 51
    8 14 23 31
    85 333 1870 11 334
    2 4 9 18
  RR 843 10 488 18 719 42 013
    17 39 46 58
    9 17 23 31
    281 2162 2757 9759
    6 15 12 22
k = 9 EG 1779 36 697 174 632 556 987
    20 145 82 122
    21 33 45 57
    291 6134 32615  116 131
    4 26 28 46
  TEG 3411 29 855 161 977 411 703
    31 54 94 129
    15 27 39 51
    1132 11 140 51 255 114 004
    13 30 46 68
  RR 3702 363 550 >80 150 107 >186 956 920
    27 245 >2532 >2870
    15 27 >19 >14
    1379 119 074 12 653 623 28 598 185
    16 119 601 693
k = 12 EG 1460 64 793 458 748 332 049
    8 56 113 88
    27 43 59 74
    261 11 011 84 783 50 312
    2 15 38 24
  TEG 9414 63 490 202 193 340 476
    54 96 96 117
    20 36 52 67
    2872 27 979 88 520 121 198
    19 44 64 69
  RR 26 360 460957 >190 475 287 >168 181 419
    58 190 >2902 >2303
    20 36 >20 >33
    6169 95 011 23 245 248 24 965 627
    29 74 611 539
k = 15 EG 24 060 346 779 1 383 502 3 938 486
    39 110 170 236
    34 54 74 94
    3023 58 838 259 553 831 962
    10 35 62 93
  TEG 58 343 131 895 400 249 20 66 923
    110 114 112 222
    24 44 64 84
    11 782 60 119 115 177 600 333
    37 66 74 119
  RR 981 268 >87 692 555 >307 185 043 >472 458 234
    692 >2130 >2944 >2800
    24 >16 >11 >15
    137 728 17 253 891 39 424 269 59 156 406
    157 643 599 595

И отметим еще одну особенность алгоритмов EG и RR. Для выполнения редукции в этих алгоритмах используется поиск линейных зависимостей в выявляющих матрицах. В реализации для этого используется процедура NullSpace пакета LinearAlgebra системы Maple. Эта процедура может найти более чем одну линейную зависимость, что дает возможность различного продолжения вычислений, в зависимости от выбора для исключений той или иной из найденных линейных зависимостей. В нашей реализации выбиралась первая из найденных линейных зависимостей после их сортировки с помощью процедуры ComplexitySort пакета SolveTools. В табл. 3, 4 представлены результаты вычислений для части тех же тестовых систем, что и в табл. 3, 4, табл. 1, 2, но с использованием выбора не первой, а последней линейной зависимости после сортировки. Представленные результаты показывают, что порядок исключений также существенно влияет на “распухание” коэффициентов в промежуточных вычислениях, а значит и на общее время вычислений. Этот фактор также не принимается во внимание в оценках сложности, однако с практической точки зрения является весьма существенным.

Таблица 3.

Результаты экспериментов с другим выбором линейной зависимости, в секундах

    d = 3 d = 7
k = 6 EG 0.187 0.359
  RR 0.500 2.406
k = 9 EG 0.829 20.062
  RR 4.047 29.688
k = 15 EG 19.906 16645.953
  RR 29.547 14979.109
Таблица 4.

Характеристические параметры промежуточных вычислений в экспериментах с другим выбором линейной зависимости

    d = 3 d = 7
k = 6 EG 88 460
2 4
    11 19
    63 155
    1 2
  RR 87 438
    2 4
    6 14
    65 172
    1 2
k = 9 EG 4178 186 239
    23 174
    21 28
    570 19 817
    5 39
  RR 3717 165 811
    23 174
    15 20
    695 24 107
    7 54
k = 12 EG 186 239 18 578 353
    174 1096
    28 44
    19 817 2 422 729
    39 233
  RR 165 811 15 621 336
    174 1096
    20 36
    24 107 2 512 118
    54 284

Исходя из проведенных экспериментов, а также из ранее проведенных экспериментов для дифференциального случая ([1]), с практической точки зрения разумно использовать версию алгоритмов Unimodularity Testing и Inverse Operator, основанных на алгоритме EG. Именно поэтому такой вариант реализации был представлен в [2] и используется по умолчанию (если не указан параметер method) в реализации в этой работе. Эти эксперименты также показывают, что с практической точки зрения полезно иметь реализации различных алгоритмов. Для конкретного примера более эффективным может оказаться алгоритм, уступающий другим в сложностном отношении или времени счета в других примерах. Поэтому в нашей реализации оставлена возможность использования и других алгоритмов по выбору пользователя.

БЛАГОДАРНОСТИ

Работа выполнена при частичной поддержке РФФИ, грант № 19-01-00032-a.

Авторы благодарны А.А. Рябенко за замечания по первому варианту статьи и полезные советы.

Список литературы

  1. АбрамовС.А., Рябенко А.А., Хмельнов Д.Е. Выявляющие матрицы линейных дифференциальных систем произвольного порядка. Программирование. 2017. № 2. С. 7–16.

  2. Abramov S.A., Khmelnov D.E. On unimodular matrices of difference operators, CASC. 2018. Proceedings. 2018. V. 11077. P. 18–31.

  3. Abramov S. EG–Eliminations, Journal of Difference Equations and Applications. 1999. V. 5. P. 393–433.

  4. Abramov S., Bronstein M. Linear algebra for skew-polynomial matrices. Rapport de Recherche INRIA RR-4420, March 2002. http://www.inria.fr/RRRT/ RR-4420.html

  5. Abramov S. On the Differential and Full Algebraic Complexities of Operator Matrices Transformations, CASC 2016, Proceedings, LNCS. 2016. V. 9890. P. 1–14.

  6. Abramov S., Barkatou M. On the dimension of solution spaces of full rank linear differential systems, CASC 2013, Proceedings, LNCS. 2013. V. 8136. P. 1–9.

  7. Abramov S., Barkatou M. On solution spaces of products of linear differential or difference operators. ACM Communications in Computer Algebra. 2014. V. 4. P. 155–165.

  8. Кац В.Г., Чен П. Квантовый анализ. М.: МЦHМО, 2005.

  9. Andrews G.E. $q$-Series: their development and application in analysis, number theory, combinatorics, physics, and computer algebra, Pennsylvania: CBMS Regional Conference Series, AMS, R.I., 1986. V. 66.

  10. Абрамов С.А. Обратные линейные разностные операторы. Журнал вычислительной математики и математической физики. 2017. Т. 57. № 12. С. 1933–1945.

  11. Abramov S., Bronstein M. On solutions of linear functional systems. ISSAC’2001 Proceedings. 2001. P. 1–6.

  12. Knuth D.E. Big omicron and big omega and big theta, ACM SIGACT News. 1976. V. 8. № 2. P. 18–23.

  13. Абрамов С.А. Лекции о сложности алгоритмов. Издание второе, переработанное. М.: МЦНМО, 2012.

  14. Barkatou M.A., El Bacha C., Labahn G., Pflügel E. On simultaneous row and column reduction of higher-order linear differential systems, Journal of Symbolic Computation. 2013. V. 49. № 1. P. 45–64.

  15. Beckermann B., Cheng H., Labahn G. Fraction-free row reduction of matrices of Ore polynomials, Journal of Symbolic Computation. 2006. V. 41. P. 513–543.

  16. Mulders T., Storjohann A. On lattice reduction for polynomial matrices, Journal of Symbolic Computation. 2004. V. 37. № 4. pp. 485–510.

  17. Maple online help: https://www.maplesoft.com/support/help/

  18. Абрамов С.А., Рябенко А.А., Хмельнов Д.Е. Лорановы, рациональные и гипергеометрические решения линейных q-разностных систем произвольного порядка с полиномиальными коэффициентами. Программирование. 2018. № 2. С. 60–73.

Дополнительные материалы отсутствуют.