Решение задач линейной алгебры
Выбери формат для чтения
Загружаем конспект в формате doc
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Лекция 5
РЕШЕНИЕ ЗАДАЧ ЛИНЕЙНОЙ АЛГЕБРЫ
Рассмотрим основные определения относящиеся к линейной алгебре.
Матрица () – прямоугольная двумерная таблица, содержащая строк и столбцов элементов, каждый из которых может быть представлен числом, константой, переменной, символьным или математическим выражением.
Квадратная матрица – матрица, у которой число строк равно числу столбцов.
Сингулярная (вырожденная) матрица – квадратная матрица, у которой детерминант (определитель) равен нулю. Линейные уравнения с почти сингулярными матрицами могут давать большие погрешности при решении.
Транспонированная матрица – матрица, у которой столбцы и строки меняются местами, т.е. элементы транспонированной матриц удовлетворяют условию .
Обратная матрица – это матрица , которая, будучи умноженной на исходную матрицу , даёт единичную матрицу .
Ранг матрицы – наибольший из порядков отличных от нуля квадратной матрицы.
Определитель матрицы – это многочлен от элементов квадратной матрицы, каждый элемент которого является произведением элементов, взятых по одному из каждых строк и каждого столбца со знаком произведения, заданным четностью перестановок: , где – определитель матрицы , полученной из матрицы вычёркиванием первой строки и -го столбца. В таком виде определитель легко получить в символьных вычислениях.
Идемпотентная матрица – матрица, отвечающая условию .
Симметричная матрица – матрица отвечающая условию .
Ортогональная матрица – матрица, отвечающая условию .
Собственные значения матрицы – корни её характеристического многочлена.
Норма – обобщенное понятие абсолютной величины числа.
Норма трёхмерного вектора – его длина.
Норма матрицы – значение .
Пакет решения задач линейной алгебры (linalg)
Maple предоставляет возможность решения задач линейной алгебры в символьном виде. Для интерактивного ввода матриц можно, определив размерность некоторого массива, использовать функцию entermatrix.
> restart;
> with(linalg):
> A:=array(1..3,1..3):
> entermatrix(A):
После ввода этих команд на экране появится окно с предложением для ввода элемента 1,1 – 400; затем появляется окно с предложением о вводе элемента 1,2 и т.д. После набора команды
> A:=(%);
на экране получим
Основные функции для задания векторов и матриц
В библиотечном файле linalg имеются следующие функции для задания векторов и матриц:
• vector(n,list) – создание вектора с элементами в списке list;
• matrix(m,n,list) – создание матрицы с числом строк и столбцов с элементами, заданными списком list.
Например:
> V:=vector(3,[12,34,56]);
> M:=matrix(2,3,[1,2,3,4]);
Функции для работы с векторами и матрицами
Для работы с векторами и матрицами имеется множество функций, входящих в пакет linalg.
Операции со структурой отдельного вектора и матрицы :
• coldim(M) – возвращает число столбцов матрицы ;
• rowdim(M) – возвращает число строк матрицы ;
• vecdim(V) – возвращает размерность вектора ;
• col(M,i) – возвращает -й столбец матрицы ;
• row(M,,j) – возвращает -ю строку матрицы ;
• minor(M,i,j) – возвращает минор матрицы для элемента с индексами и ;
• delcols(M,i..j) – удоляет столбцы матрицы от -го до -го;
• delrows(V,i..j) – удоляет строки матрицы от -й до -й;
• extend(M,m,n,x) – расширяет матрицу на строк и столбцов с применением заполнителя .
Основные векторные и матричные операции:
• dotprod(U,V) – возвращает скалярное произведение векторов и ;
• crossprod(U,V) – возвращает векторное произведение векторов и ;
• norm(V) или norm(M) – возвращает норму вектора и матрицы;
• copyinto(A,B,i,j) – копирует матрицу в для элементов последовательно от до ;
• concat(M1,M2) – возвращает объединённую матрицу с горизонтальным слиянием матриц и ;
• stack(M1,M2) – возвращает объединённую матрицу с вертикальным слиянием матриц и ;
• matadd(A,B) и evalm(A+B) – возвращает сумму матриц и
• multiply(A,B) и evalm(A*B) – возвращает произведение матриц и
• adjoint(M) или adj(M) – возвращает присоединённую матрицу, такую что даёт диагональную матрицу, определитель которой есть
• charpoly(M,lambda) – возвращает характеристический полином матрицы относительно заданной переменной lambda;
• det(M) – возвращает детерминант (определитель) матрицы ;
• Eigenvals(M,vector) – инертная форма функции, возвращающей собственные значения матрицы и (при указании необязательного параметра vector) соответствующие им собственные векторы)
• jordan(M) – возвращает матрицу в форме Жордана;
• transpose(M) – возвращает транспонированную матрицу ;
• inverse(M) или evalm(1/M) – возвращает матрицу, обратную к ;
• singularvals(A) – возвращает сингулярные значения массива или матрицы .
Решение систем линейных уравнений
Ниже приведен пример решения системы линейных уравнений с применением функций входящих в пакет linalg
> restart;
> with(linalg):
> C:=matrix(4,4,[[0.02,0.016,0.3,0.15],[-0.06,0.067,0.027,0.1], [0.45,0.133,0.08,0.139], [0.011,0.25,-0.2,0.1]]):
> A:=evalm(C);
> opr:=det(A);
> A:=evalm(C):
> B:=matrix(4,1,[0.662,0.029,2.312,0.379]);
По формулам Крамера
> A1:=copyinto(B,A,1,1);
> A:=evalm(C): A2:=copyinto(B,A,1,2);
> A:=evalm(C): A3:=copyinto(B,A,1,3);
> A:=evalm(C): A4:=copyinto(B,A,1,4);
> x1:=det(A1)/opr;
> x2:=det(A2)/opr;
> x3:=det(A3)/opr;
> x4:=det(A4)/opr;
> X:=vector(4,[x1,x2,x3,x4]);
Блочным методом
> with(linalg):
> A:=evalm(C):
> X:=multiply(inverse(A),B);
Методом простых итераций
Интерактивный ввод исходных данных
> restart:
> with(linalg):
> A:=array(1..3,1..3):
> entermatrix(A):
Последовательный ввод в окне элементов матрицы А
> A:=(%);
> B:=array(1..3,1..1):
> entermatrix(B):
Последовательный ввод в окне элементов вектора В
> B(%);
> U:=concat(B,-A);
> P0_1:=mulrow(U,1,1/A[1,1]):
> P0_2:=mulrow(P0_1,2,1/A[2,2]):
> P0:=mulrow(P0_2,3,1/A[3,3]):
> P0[1,2]:=0*P0[1,2]:P0[2,3]:=0*P0[2,3]:
P0[3,4]:=0*P0[3,4]:print(P0);
> print(P0);
Нулевое приближение
> X0:=col(P0,1);
> evalf(%);
Первое приближение
> betta:=col(P0,1):
> alpha:=submatrix(P0,1..3,2..4):
> X1:=matadd(betta,multiply(alpha,X0)):
> evalf(%);
Второе приближение
> X2:=matadd(betta,multiply(alpha,X1)):
> evalf(%);
Третье приближение
> X3:=matadd(betta,multiply(alpha,X2)):
> evalf(%);
Проводим проверку
> matadd(multiply(A,X3),-1*B):
> evalf(%);
> X:=linsolve(A,B):
> evalf(%);