Н.И. Яцкин - Линейная алгебра (Теоремы и алгоритмы) (1109879), страница 90
Текст из файла (страница 90)
И. Компьютерная математика(основание информатики). Ростов-на-Дону: Феникс, 2002.Список рекомендуемой литературы52722. Фаддеев Д. К. Лекции по алгебре. М.: Наука, 1984.23. Фаддеев Д. К., Фаддеева В. Н. Вычислительные методы линейной алгебры.М.: Физматгиз, 1963.24. Федорчук В. В. Курс аналитической геометрии и линейной алгебры. М.: Изд-воМГУ, 1990.25. Халмош П. Конечномерные векторные пространства. М.: Мир, 1970.26. Хорн Р., Джонсон Ч.
Матричный анализ. М.: Мир, 1989.27. Шилов Г. Е. Математический анализ. Конечномерные линейные пространства.М.: Наука, 1969.28. Шеперман Л. Б. Курс алгебры и теории чисел в задачах и упражнениях. Ч. 1,2.Минск: Вышэйшая школа, 1987.Список используемых сокращенийа.б.ф. — антисимметрическая б.ф.;а.м. — аннулирующий многочлен;БТЖ — большая теорема Жордана;б.ф.
— билинейная форма;ж.н.ф. — жорданова нормальная форма (квадратной матрицы);ж.я. — жорданов ящик;и.м. — инвариантный многочлен;к.л.п. — конечномерное линейное пространство;к.н. — канонический неразложимый (элемент в факториальном кольце);л.э. — линейный эндоморфизм;м.а.м. — минимальный а.м.;МТЖ — малая теорема Жордана;н.ж.я. — нильпотентный ж.я.;НОД — наибольший общий делитель;НОДМ — НОД миноров (матрицы);НОК — наименьшее общее кратное;НОлД — наибольший общий левый делитель;НОпД — наибольший общий правый делитель;о.б. — ортогональный базис;о.н.о.
— ортонормированный базис;о.о. — отрицательно определенная (с.б.ф.);о.п.о. — отрицательно полуопределенная (с.б.ф.);ОТА — основная теорема алгебры;ОТЛО — основная теорема о линейных отображениях;п.о. — положительно определенная (с.б.ф.);п.п.о. — положительно полуопределенная (с.б.ф.);с.б.ф. — симметрическая б.ф.;с.в. — система векторов;с.л.у. — система линейных уравнений;э.д. — элементарный делитель.Приложение 1Коды Maple-процедур1. Пакет процедур BiS(к ТР1 "Базисы в подпространствах"; п. 11.3)> restart;with(LinearAlgebra):> # Задание шести процедур,# составляющих пакет BiS (Bases in Subspaces).>####BiS[algorithm_1]:=proc(A::Matrix)Построение базиса в линейном подпространстве W(в арифметическом линейном пространстве V);подпространство W задано первым способом(как совокупность решений однородной с.л.у. Ax=0).local m,n,i,j,k,h,GA,JA,rA,pr,fr,ZA,FA,sys;m:=RowDimension(A);n:=ColumnDimension(A);# Размеры данной матрицы; n=dim(V).ZA:=ZeroMatrix(m,n);# Нулевая матрица.if Equal(A,ZA) then# Особый случай: A=O и, следовательно, W=V.# Выдается естественный базис в виде# единичной матрицы.FA:=IdentityMatrix(n);JA:=Matrix(0,n);rA:=0;# Пустая матрица.pr:=[];# Список номеров главных неизвестных пуст.fr:=[seq(k,k=1..n)];# Все неизвестные свободны.elseGA:=ReducedRowEchelonForm(A);rA:=Rank(GA);# Вид Жордана-Гаусса и ранг.JA:=SubMatrix(GA,1..rA,1..n);# Вид Жордана-Гаусса (с удаленными# нулевыми строками) для матрицы А.530Коды Maple-процедурpr:=[seq(0,k=1..rA)];# Заготовка для списка номеров главных неизвестных.for i from 1 to rA doj:=1;while JA[i,j]=0 doj:=j+1;od;pr[i]:=j;od;# Сформирован список номеров главных неизвестных.fr:=[];for k from 1 to n doif not member(k,pr) thenfr:=[fr[],k];fi;od;# Сформирован список номеров свободных неизвестных.FA:=Matrix(n,n-rA);# Заготовка для фундаментальной матрицы,# соответствующей с.л.у.
Ax=0.# Если rA=n, то W=O, и матрица FA пуста.# (Выводятся пустой базис и пустой список# номеров свободных неизвестных.)if rA<n then# Неособый случай. Подпространство W решений# однородной с.л.у. Ax=0 нетривиально.for h from 1 to n-rA doFA[ fr[h], h ]:=1;for i from 1 to rA doFA[ pr[i], h ]:=-GA[ i, fr[h] ];od;od;# Каждой свободной неизвестной# соответствует столбец# в фундаментальной матрице FA # базисное частное решение# однородной с.л.у. Ax=0,# получающееся, если эта неизвестная равна 1.fi;fi;sys:=GenerateEquations(JA,[seq(x[k],k=1..n)]);# Генерация однородной с.л.у. по матрице JA.Прил.
1Прил. 1Коды Maple-процедурRETURN(FA,n-rA,JA,sys,fr);# Возвращаются:# 1) базис подпространства W, заключенный в#фундаментальной матрице FA#для однородной с.л.у. Ax=0;# 2) размерность dim(W)=n-rA,#где rA - ранг данной матрицы;# 3) вид Жордана-Гаусса JA для A#(с удаленными нулевыми строками);# 4) однородная с.л.у. sys, соответствующая JA#("экономно" задающая W);# 5) список fr номеров свободных неизвестных.end proc;>####BiS[algorithm_2]:=proc(G::Matrix)Построение базиса в линейном подпространстве W,заданном вторым способом(как линейная оболочкастолбцов матрицы G).local n,s,i,j,k,GG,rG,pr,ZG,BG;n:=RowDimension(G);s:=ColumnDimension(G);# Размеры данной матрицы; n=dim(V).ZG:=ZeroMatrix(n,s);# Нулевая матрица.if Equal(G,ZG) then# Особый случай: G=O и, следовательно, W=O.# Выдается пустой базис.BG:=Matrix(n,0);GG:=ZG;rG:=0;pr:=[];elseGG:=GaussianElimination(G);rG:=Rank(GG);# Ступенчатый вид и ранг для матрицы G.pr:=[seq(0,k=1..rG)];# Заготовка для списка номеров главных столбцов.for i from 1 to rG doj:=1;while GG[i,j]=0 doj:=j+1;od;pr[i]:=j;od;# Сформирован список номеров главных столбцов.531532Коды Maple-процедурBG:=SubMatrix(G,1..n,pr);# Подматрица матрицы G,# составленная из базисных (главных) столбцов.fi;RETURN(BG,rG,GG,pr);# Возвращаются:# 1) базис подпространства W#в виде подматрицы BG из базисных столбцов;# 2) размерность dim(W), равная#рангу rG данной матрицы;# 3) ступенчатый вид GG данной матрицы;# 4) список pr номеров главных столбцов.end proc;>#####BiS[algorithm_3]:=proc(G::Matrix)Переход от второго способазадания линейного подпространства W(в виде линейной оболочки столбцов матрицы G)к первому (в виде подпространства решенийоднородной с.л.у.
Ax=0).local n,s,k,A,ZG,sys;n:=RowDimension(G);s:=ColumnDimension(G);# Размеры данной матрицы; n=dim(V).ZG:=ZeroMatrix(n,s);# Нулевая матрица.if Equal(G,ZG) then# Особый случай: G=O. Выдается единичная матрица,# A=E и с.л.у. [x[j]=0; j=1..n]# (все неизвестные равны нулю).A:=IdentityMatrix(n);elseA:=Transpose(algorithm_1(Transpose(G))[1]);# Данная матрица G транспонируется,# затем, с помощью процедуры algorithm_1,# решается соответствующая однородная с.л.у.,# причем из возвращаемых данных берется только# первый член последовательности # фундаментальная матрица,# которая затем транспонируется.fi;Прил.
1Прил. 1Коды Maple-процедурsys:=GenerateEquations(A,[seq(x[k],k=1..n)]);# Однородная с.л.у., задающая данное подпространство.RETURN(A,sys);# Возвращаются:# 1) матрица A, задающая данное подпространство#первым способом (как множество решений#однородной с.л.у.
Ax=0);# 2) самa этa системa (в виде списка уравнений).end proc;>########BiS[algorithm_4]:=proc(G1::Matrix,G2::Matrix)Продолжение базиса в линейном подпространстве W1(в пространстве V)до базиса в (более широком) подпространстве W2;отыскание базиса в некоторомпрямом дополнении к W1 в W2.Подпространства W1 и W2 заданы вторым способом(как линейные оболочкистолбцов матриц G1 и G2).local n,n1,n2,B1,B2,B3,C1,d1,d2,d3;n1:=RowDimension(G1);n2:=RowDimension(G2);if n1<>n2 thenERROR(`Вводимые матрицы должны иметьравное количество строк!`);elsen:=n1;fi;# Контроль совпадения размерностей по строкам# для данных матриц G1 и G2.# Размерность всего пространства: dim(V)=n.B1:=algorithm_2(G1)[1];d1:=ColumnDimension(B1);B2:=algorithm_2(G2)[1];d2:=ColumnDimension(B2);B3:=algorithm_2(<<B1|B2>>)[1];d3:=ColumnDimension(B3);# Процедура algorithm_2 применяется# к данным матрицам и к их конкатенации.if d2<>d3 thenERROR(`W1 не является подпространством в W2!`);# Отработка особого случая,# когда подпространство W1, заданное матрицей G1,# не содержится в подпространстве W2,# заданном матрицей G2.533534Коды Maple-процедурelif d1=d2 thenC1:=Matrix(n,0);# Отработка особого случая, когда W1=W2.# Прямое дополнение в этом случае является нулевым,# базис в нем, содержащийся# в матрице C1, - пустым.elseC1:=SubMatrix(B3,1..n,d1+1..d3);# Основной случай: W1 является# подпространством в W2, отличным от W2;# базис в прямом дополнении составляется# из добавочных векторов, расположенных# в "правой зоне" матрицы B3.fi;RETURN(C1,d2-d1,B3,[B1,d1],[B2,d2]);# Возвращаются:# 1) матрица C1, содержащая "добавочные" векторы#(базис в некотором прямом дополнении к W1 в W2);# 2) размерность d2-d1 этого прямого дополнения;# 3) матрица B3, содержащая базис в W2,#продолжающий некоторый базис в W1;# 4) список [B1,d1], содержащий матрицу B1,#столбцы которой образуют исходный базис в W1#и размерность d1=dim(W1).# 5) список [B2,d2], содержащий матрицу B2,#столбцы которой образуют исходный базис в W2#и размерность d2=dim(W2).end proc;>###############BiS[algorithm_5]:=proc(G1::Matrix,G2::Matrix)Построение базиса в сумме W3=W1+W2линейных подпространств W1,W2 в пространстве V.Подпространства W1,W2 заданы вторым способом(как линейные оболочки столбцов матриц G1 и G2).В подпространстве W3 находятся два базиса:базис, записанный в матрице B3[1],продолжает базис B1 в W1;базис, записанный в матрице B3[2],продолжает базис B2 в W2.Находятся также некоторые прямые дополненияк каждому из подпространств-слагаемых в их сумме(базисы для прямых дополненийзаписываются в матрицы C1,C2).Дополнительно определяется размерность d0пересечения W0 данных подпространств.Прил.
1Прил. 1Коды Maple-процедурlocal n,n1,n2,B1,B2,B3,C1,C2,d1,d2,d3,d0;n1:=RowDimension(G1); n2:=RowDimension(G2);if n1<>n2 thenERROR(`Вводимые матрицы должны иметьравное количество строк!`);elsen:=n1;fi;# Контроль совпадения размерностей по строкам# для данных матриц G1 и G2.# Размерность всего пространства: dim(V)=n.B1:=algorithm_2(G1)[1];d1:=ColumnDimension(B1);B2:=algorithm_2(G2)[1];d2:=ColumnDimension(B2);# Процедура algorithm_2 применяется# к каждой из данных матриц.# Определены (и записаны в матрицы B1 и B2)# базисы в W1 и W2;# вычислены размерности d1 и d2.B3[1]:=algorithm_2(<<B1|B2>>)[1];d3:=ColumnDimension(B3[1]);# Процедура algorithm_2 применяется# к конкатенации матриц B1 и B2.# Определен (и записан в матрицу B3[1]),# базис в сумме W3, продолжающий базис в W1,# содержащийся в матрице B1.d0:=d1+d2-d3;# Размерность пересечения данных подпространств.B3[2]:=algorithm_2(<<B2|B1>>)[1];# Процедура algorithm_2 применяется# к конкатенации матриц B2 и B1# (в противоположном порядке).# Определен (и записан в матрицу B3[2]),# другой базис в сумме W3,# продолжающий базис в W2,# содержащийся в матрице B2.if d1=d3 thenC1:=Matrix(n,0);# Отработка особого случая: d1=d3# (и, следовательно, W1=W3; W2<=W1;# прямое дополнение к W1 в W3 тривиально;# матрица С1 пуста).else535536Коды Maple-процедурC1:=SubMatrix(B3[1],1..n,d1+1..d3);# Неособый случай: d1<d3.# Определяется прямое дополнение к W1 в W3# (как линейная оболочка некоторого# базиса, записанного в матрицу C1).fi;if d2=d3 thenC2:=Matrix(n,0);# Отработка особого случая: d2=d3# (и, следовательно, W2=W3; W1<=W2;# прямое дополнение к W2 в W3 тривиально;# матрица С2 пуста).elseC2:=SubMatrix(B3[2],1..n,d2+1..d3);# Неособый случай: d2<d3.# Определяется прямое дополнение к W2 в W3# (как линейная оболочка некоторого# базиса, записанного в матрицу С2).fi;RETURN(B3[1],d3,[B1,d1,C1],[B2,d2,C2],d0);# Возвращаются:# 1) матрица B3[1], содержащая базис#в сумме W3 данных подпространств,#продолжающий (ранее определенный) базис в W1;# 2) размерность d3=dim(W3) суммы данных подпространств;# 3) список, содержащий матрицу B1,#столбцы которой составляют базис в W1,#размерность d1=dim(W1)#и матрицу C1, содержащую базис#в некотором прямом дополнении к W1 в W3;# 4) аналогичный список [B2,d2,C2]для второго слагаемого;## 5) размерность d0 пересечения W0 данных подпространств.end proc;>######BiS[algorithm_6]:=proc(A1::Matrix,A2::Matrix)Построение базиса в пересечении W0линейных подпространств W1 и W2 в пространстве V.Подпространства W1 и W2 заданы первым способом(как нуль-пространства матриц A1 и A2).Базис в подпространстве W0 записывается в матрицу B0.Кроме того, для каждого из подпространств W1, W2, W0Прил.