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

UptoLike

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

Прил. 1 Коды Maple-процедур 577
if not Equal(SubMatrix(B,k..n,k..n),ZeroMatrix(n-k+1)) then
# Если юго-восточный блок
# (по отношению к данной диагональной позиции)
# ненулевой, то - работаем...
if Equal(Diagonal(SubMatrix(B,k..n,k..n)),ZeroVector(n-k+1))
then
# Если диагональ юго-восточного блока нулевая,
# то применяем второй прием Лагранжа.
if B[k,k+1]=0 then
# Если в позиции (k,k+1) находится нуль,
# то предварительно переставляем в эту позицию
# ненулевой (внедиагональный) элемент.
signal:=false;
# Сигнал для фиксации обнаружения ненулевого элемента,
# с выходом из цикла поиска.
for j from k+2 to n do
if B[k,j]<>0 then
# Ненулевой элемент обнаружен
# в текущей строке.
signal:=true;
break;
fi;
od;
if signal then
U:=ColumnOperation(E,[k+1,j],inplace=false);
# Перестановка ненулевого элемента
# в нужную позицию.
print(`U=`,U);
T:=T.U;
# Накопление элементарных преобразований
# в матрице перехода.
B:=Transpose(U).B.U;
# Пересчет матрицы квадратичной формы.
print(`B=`,B);
else
for j from k+2 to n do
if B[k+1,j]<>0 then
# Ненулевой элемент обнаружен
# в строке, следующей за текущей.
signal:=true;
break:
fi;
od;
Прил. 1                     Коды Maple-процедур                     577

  if not Equal(SubMatrix(B,k..n,k..n),ZeroMatrix(n-k+1)) then
  # Если юго-восточный блок
  # (по отношению к данной диагональной позиции)
  # ненулевой, то - работаем...

    if Equal(Diagonal(SubMatrix(B,k..n,k..n)),ZeroVector(n-k+1))
      then
    # Если диагональ юго-восточного блока нулевая,
    # то применяем второй прием Лагранжа.

          if B[k,k+1]=0 then
          # Если в позиции (k,k+1) находится нуль,
          # то предварительно переставляем в эту позицию
          # ненулевой (внедиагональный) элемент.

           signal:=false;
           # Сигнал для фиксации обнаружения ненулевого элемента,
           # с выходом из цикла поиска.

           for j from k+2 to n do
             if B[k,j]<>0 then
             # Ненулевой элемент обнаружен
             # в текущей строке.
               signal:=true;
               break;
             fi;
           od;

           if signal then
             U:=ColumnOperation(E,[k+1,j],inplace=false);
             # Перестановка ненулевого элемента
             # в нужную позицию.

             print(`U=`,U);
             T:=T.U;
             # Накопление элементарных преобразований
             # в матрице перехода.
             B:=Transpose(U).B.U;
             # Пересчет матрицы квадратичной формы.
             print(`B=`,B);

           else

             for j from k+2 to n do
               if B[k+1,j]<>0 then
               # Ненулевой элемент обнаружен
               # в строке, следующей за текущей.
                 signal:=true;
                 break:
               fi;
             od;