ВУЗ:
Составители:
Рубрика:
Прил. 1 Коды Maple-процедур 555
else
# Если полного жорданова базиса
# не существует,
# то мы дополняем жорданов базис в корневой сумме,
# содержащийся в матрице GS,
# до (частично жорданова) базиса
# во всем пространстве.
# Составляем и приводим к ступенчатому виду
# матрицу GSE, являющуюся конкатенацией
# матрицы GS и единичной матрицы E.
GSE:=<GS|E>;
GSEG:=GaussianElimination(GSE);
print(evaln(GSE)=GSE);
print(evaln(GSEG)=GSEG);
# Выбираем (по ступенькам в правой
зоне
# матрицы GSEG) добавочные векторы
# из правой зоны матрицы GSE
# и приписываем их к GS.
for i from ms+1 to n do
for j from ms+1 to n do
if GSEG[i,j]<>0 then
T:=<T|SubMatrix(GSE,1..n,j..j)>;
break;
fi;
od;
od;
# В итоге формируется квадратная
# матрица T размера n на n,
# содержащая частично жорданов базис.
# Избыточная проверка:
# контролируем отличие от нуля
# определителя det(T).
dt:=Determinant(T);
if dt=0 then
ERROR(`Матрица T необратима!`);
fi;
# Вычисляем частично жорданову форму J
# для
матрицы A,
# пользуясь T как матрицей перехода.
J:=MatrixInverse(T).A.T;
# Еще одна избыточная проверка:
Прил. 1 Коды Maple-процедур 555 else # Если полного жорданова базиса # не существует, # то мы дополняем жорданов базис в корневой сумме, # содержащийся в матрице GS, # до (частично жорданова) базиса # во всем пространстве. # Составляем и приводим к ступенчатому виду # матрицу GSE, являющуюся конкатенацией # матрицы GS и единичной матрицы E. GSE:=; GSEG:=GaussianElimination(GSE); print(evaln(GSE)=GSE); print(evaln(GSEG)=GSEG); # Выбираем (по ступенькам в правой зоне # матрицы GSEG) добавочные векторы # из правой зоны матрицы GSE # и приписываем их к GS. for i from ms+1 to n do for j from ms+1 to n do if GSEG[i,j]<>0 then T:= ; break; fi; od; od; # В итоге формируется квадратная # матрица T размера n на n, # содержащая частично жорданов базис. # Избыточная проверка: # контролируем отличие от нуля # определителя det(T). dt:=Determinant(T); if dt=0 then ERROR(`Матрица T необратима!`); fi; # Вычисляем частично жорданову форму J # для матрицы A, # пользуясь T как матрицей перехода. J:=MatrixInverse(T).A.T; # Еще одна избыточная проверка:
Страницы
- « первая
- ‹ предыдущая
- …
- 553
- 554
- 555
- 556
- 557
- …
- следующая ›
- последняя »
