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

UptoLike

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

550 Коды Maple-процедур Прил. 1
# Приведение к ступенчатому виду матрицы 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],
# дополняющих до базиса в k-м ядре N[i][k]
# базис в прямой сумме
# (k-1)-го ядра N[i][k-1]
# и образа B[i](C[i][k+1]).
# Изначально этот список пуст.
blist:=[];
# Номер первого столбца в третьей зоне
# матрицы-конкатенации M[i][k].
v:=d[i][k-1]+p[i][k+1]+1;
# Цикл по номеру строки
# в ступенчатой матрице MG[i][k],
# начиная с первой строки, являющейся
# чисто нулевой в первых двух зонах конкатенации,
# и заканчивая последней ненулевой строкой
# во всей матрице.
for u from d[i][k-1]+p[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
# и переходим к следующей строке.
blist:=[blist[],v];
od;
# Формируем матрицу H[i][k], отвечающую
# ступеньке уровня k
# (т. е. содержащую базис в D[i][k])
# как подматрицу в исходной конкатенации M[i][k],
# содержащую столбцы, номера которых
# входят в список blist.
H[i][k]:=SubMatrix(M[i][k],1..n,blist);
# Формируем матрицу G[i][k], отвечающую
# всему k-му уровню
550                 Коды Maple-процедур                   Прил. 1

      # Приведение к ступенчатому виду матрицы 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],
      # дополняющих до базиса в k-м ядре N[i][k]
      # базис в прямой сумме
      # (k-1)-го ядра N[i][k-1]
      # и образа B[i](C[i][k+1]).

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

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

      # Цикл по номеру строки
      # в ступенчатой матрице MG[i][k],
      # начиная с первой строки, являющейся
      # чисто нулевой в первых двух зонах конкатенации,
      # и заканчивая последней ненулевой строкой
      # во всей матрице.
      for u from d[i][k-1]+p[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
        # и переходим к следующей строке.
        blist:=[blist[],v];
      od;

      # Формируем матрицу H[i][k], отвечающую
      # ступеньке уровня k
      # (т. е. содержащую базис в D[i][k])
      # как подматрицу в исходной конкатенации M[i][k],
      # содержащую столбцы, номера которых
      # входят в список blist.
      H[i][k]:=SubMatrix(M[i][k],1..n,blist);

      # Формируем матрицу G[i][k], отвечающую
      # всему k-му уровню