Линейная алгебра. Теоремы и алгоритмы. Яцкин Н.И. - 548 стр.

UptoLike

Составители: 

548 Коды Maple-процедур Прил. 1
# Рассматриваются три случая расположения этажа:
# 1) верхний этаж;
# 2) промежуточные этажи;
# 3) нижний этаж.
if k:=l[i] then
# Определение векторов верхнего этажа
# столбчатой диаграммы.
# Формирование матрицы-конкатенации,
# содержащей базисы
# в предстабильном и в стабильном ядрах,
# приведение этой матрицы
# к ступенчатому виду
# и печать результатов.
M[i][k]:=<F[i][k-1]|F[i][k]>;
MG[i][k]:=GaussianElimination(M[i][k]);
print(evaln(M[i][k])=M[i][k],evaln(MG[i][k])=MG[i][k]);
# Формирование списка blist
# номеров добавочных базисных векторов,
# из правой зоны матрицы M[i][k],
# дополняющих базис в предстабильном ядре N[i][l[i]-1]
# до базиса в стабильном ядре N[i][l[i]]
# (корневом подпространстве, отвечающем lambda[i]).
# Изначально этот список пуст.
blist:=[];
# Номер первого столбца во второй зоне
# матрицы-конкатенации M[i][k] (где k=l[i]).
v:=d[i][k-1]+1;
# Цикл по номеру строки в ступенчатой матрице MG[i][k],
# начиная с первой
строки, являющейся
# чисто нулевой в первой (левой) зоне конкатенации,
# и заканчивая последней ненулевой строкой
# во всей матрице.
for u from d[i][k-1]+1 to d[i][k] do
# Просматриваем (слева направо) строку с номером u,
# пока не встретим первый ненулевой элемент.
# (При этом работает счетчик столбцов.)
while MG[i][k][u,v]=0 do
v:=v+1;
od;
# Встретив в строке с номером u,
# в столбце с номером v
# первый ненулевой элемент,
# мы добавляем номер v к списку blist
# и переходим к следующей строке.
548                         Коды Maple-процедур                Прил. 1

      #   Рассматриваются три случая расположения этажа:
      #   1) верхний этаж;
      #   2) промежуточные этажи;
      #   3) нижний этаж.

      if k:=l[i] then
        # Определение векторов верхнего этажа
        # столбчатой диаграммы.

          # Формирование матрицы-конкатенации,
          # содержащей базисы
          # в предстабильном и в стабильном ядрах,
          # приведение этой матрицы
          # к ступенчатому виду
          # и печать результатов.
          M[i][k]:=;
          MG[i][k]:=GaussianElimination(M[i][k]);

          print(evaln(M[i][k])=M[i][k],evaln(MG[i][k])=MG[i][k]);

          #   Формирование списка blist
          #   номеров добавочных базисных векторов,
          #   из правой зоны матрицы M[i][k],
          #   дополняющих базис в предстабильном ядре N[i][l[i]-1]
          #   до базиса в стабильном ядре N[i][l[i]]
          #   (корневом подпространстве, отвечающем lambda[i]).

          # Изначально этот список пуст.
          blist:=[];

          # Номер первого столбца во второй зоне
          # матрицы-конкатенации M[i][k] (где k=l[i]).
          v:=d[i][k-1]+1;

          # Цикл по номеру строки в ступенчатой матрице MG[i][k],
          # начиная с первой строки, являющейся
          # чисто нулевой в первой (левой) зоне конкатенации,
          # и заканчивая последней ненулевой строкой
          # во всей матрице.
          for u from d[i][k-1]+1 to d[i][k] do

              # Просматриваем (слева направо) строку с номером u,
              # пока не встретим первый ненулевой элемент.
              # (При этом работает счетчик столбцов.)
              while MG[i][k][u,v]=0 do
                v:=v+1;
              od;
              # Встретив в строке с номером u,
              # в столбце с номером v
              # первый ненулевой элемент,
              # мы добавляем номер v к списку blist
              # и переходим к следующей строке.