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

UptoLike

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

554 Коды Maple-процедур Прил. 1
# Формирование матрицы перехода T
# от исходного (естественного) базиса
# к жорданову (или частично жорданову) базису,
# а также формирование (частичной или полной)
# жодановой нормальной формы J для матрицы А.
if exist_jbas then
# Если существует полный жорданов базис
# (во всем пространстве),
# то матрица GS является квадратной,
# содержит полный жорданов базис
# и совпадает с искомой матрицей перехода Т.
# Полная ж.н.ф. матрицы A совпадает
# с (ранее вычисленной) матрицей JS.
T:=GS;J:=JS;
# Выводим на печать матрицы J и T.
print(evaln(J)=J);
print(evaln(T)=T);
print(str);print(str);
# Организуем "избыточную" проверку
# (логически она является излишней,
# но при отладке программы
# или при ручной работеполезна).
# Вычисляем и выдаем на печать
# определитель det(T);
# он должен быть ненулевым.
# Если это не так, то
# выдается сообщение об ошибке.
dt:=Determinant(T);
print(evaln(det('T'))=dt);
if dt=0 then
ERROR(`Матрица T необратима!`);
fi;
# Еще одна избыточная проверка:
# контролируем выполнение равенства
# T.J=A.T
# и генерируем сообщение об ошибке,
# если оно нарушается.
if not Equal(T.J,A.T) then
ERROR(`Равенство T*J=A*T не выполняется!`);
fi;
print(str);print(str);
554                          Коды Maple-процедур    Прил. 1

#   Формирование матрицы перехода T
#   от исходного (естественного) базиса
#   к жорданову (или частично жорданову) базису,
#   а также формирование (частичной или полной)
#   жодановой нормальной формы J для матрицы А.

if exist_jbas then
  # Если существует полный жорданов базис
  # (во всем пространстве),
  # то матрица GS является квадратной,
  # содержит полный жорданов базис
  # и совпадает с искомой матрицей перехода Т.

    # Полная ж.н.ф. матрицы A совпадает
    # с (ранее вычисленной) матрицей JS.

    T:=GS;J:=JS;

    # Выводим на печать матрицы J и T.
    print(evaln(J)=J);
    print(evaln(T)=T);
    print(str);print(str);

    #   Организуем "избыточную" проверку
    #   (логически она является излишней,
    #   но при отладке программы
    #   или при ручной работе – полезна).

    #   Вычисляем и выдаем на печать
    #   определитель det(T);
    #   он должен быть ненулевым.
    #   Если это не так, то
    #   выдается сообщение об ошибке.

    dt:=Determinant(T);
    print(evaln(det('T'))=dt);
    if dt=0 then
      ERROR(`Матрица T необратима!`);
    fi;

    #   Еще одна избыточная проверка:
    #   контролируем выполнение равенства
    #   T.J=A.T
    #   и генерируем сообщение об ошибке,
    #   если оно нарушается.

    if not Equal(T.J,A.T) then
      ERROR(`Равенство T*J=A*T не выполняется!`);
    fi;

    print(str);print(str);