Иллюстрированный самоучитель по Mathematica
Линейная алгебра— пакет LinearAlgebra
Пакет расширения
LinearAlgebra добавляет ряд новых функций, полезных при решении сложных задач
линейной алгебры.
Декомпозиция Холесского — Cholesky
Подпакет
Cholesky содержит единственную функцию HoleskyDecomposition
[m], которая вычисляет
декомпозицию (факторизацию, разложение) Холесского для симметричной положительно
определенной матрицы т.
Примеры выполнения
декомпозиции Холесского даны ниже:
<<LinearAlgebra`Cholesky`
hil = Tablet
l/(i + j - 1) , {i, 1, 4}, {j, 1, 4}]
Eigenvalues[ N[hil] ]
{1.50021, 0.169141,
0.00673827, 0.0000967023}
u = CholeskyDecomposition[hil]
MatrixForm[Transpose[u]
. u]
Метод исключения Гаусса — GaussianElimination
Следующие
функции обеспечивают реализацию метода исключения Гаусса при решении
линейного уравнения вида А-x =b:
-
LUFactor [m] — возвращает
LU-декомпозицию матрицы m;
-
LUSolve [lu, b] —
решает систему линейных уравнений с матрицей коэффициентов lu и вектором свободных
членов b методом исключения переменных Гаусса;
-
LU [a, pivots] — создает
объект, используемый в LUSolve. Применение этих функций поясняют примеры,
показанные ниже:
<<LinearAlgebra`GaussianElimination`
MatrixForm[a
= {{1, 2, 3}, {4, 5, 6}, {-1, 5, -5}}]
lu
= LUFactor[a]
b = {10,
-3, 12}
{10, -3, 12}
LUSolve[lu, b]
Метод исключения
Гаусса является хорошо апробированным методом решения систем линейных уравнений,
что делает реализацию описанных функций полезным дополнением к встроенным функциям
линейной алгебры.
Операции с матрицами — MatrixManipulation
Подпакет
MatrixManipulation добавляет к матричным функциям ядра системы Ма-thematica
ряд новых функций. Начнем с функций объединения матриц:
-
AppendColumns [ml,m2,...]
— объединяет по столбцам матрицы ml,m2,...;
-
AppendRows [ml,m2,...]
— объединяет по строкам матрицы ml,m2,...;
-
BlockMatrix [blocks]
— объединяет по строкам и столбцам блоки
blocks, создавая новую матрицу.
Данные операции
с матрицами иллюстрируют следующие примеры:
<<
LinearAlgebra`MatrixManipulation`
a = {{a11,
a12}, {a21, a22}}; MatrixFormfa]
b = {{b11,
b12}, {b21, b22}}; MatrixForm[b]
MatrixForm[AppendColumns[a, b] ]
AppendRows[a, b] //MatrixForm
BlockMatrix[{{a, b}, {b, {{0, 0}, {0, 0}}}}] //MatrixForm
Следующая
группа функций вставляет или удаляет столбцы или строки матриц:
-
TakeRows [mat, n]
— вставляет в матрицу mat n-ю строку;
-
TakeRows [mat, -n]
— удаляет из матрицы mat п-ю строку;
-
TakeRows [mat, {m,n}
] — вставляет в матрицу mat строки от m до n;
-
TakeColumns [mat, n] — вставляет в матрицу mat п-й столбец;
-
TakeColumns [mat, -n] — удаляет из матрицы mat п-й столбец;
-
TakeColumns [mat, {m,
n} ] — вставляет в матрицу mat столбцы от m до п.
Действие
функции иллюстрируется следующими примерами:
mat
= Array[m, 3, 4]; MatrixForm[mat]
m[l, 1] m[l,
2] m[l, 3] m[l, 4]
m[2, 1] m[2,
2] m[2, 3] m[2, 4]
m[3, 1] m[3,
2] m[3, 3] m[3, 4]
TakeRows[mat,
-2] //MatrixForm
m[2, 1] m[2,
2] m[2, 3] m[2, 4]
m[3, 1] m[3,
2] m[3, 3] m[3, 4]
TakeColumns[mat,
{2,3}] //MatrixForm
m[l, 2] m[l,
3] )
m[2, 2] m[2,
3]
m[3, 2] m[3,
3]
TakeMatrix[mat,
{2, 3}, {3, 4}] //MatrixForm
m[2, 3] m[2,
4]
m[3, 3] m[3,
4]
SubMatrix[mat,
{2, 3}, {2, 2}] //MatrixForm
m[2, 3] m[2,
4]
m[3, 3] m[3,
4]
Следующая
группа функций служит для задания матриц специального вида:
-
UpperDiagonalMatrix
[f, n] — формирует наддиагональную матрицу размером пхп;
-
LowerDiagonalMatrix
[f, n] — формирует поддиагональную матрицу размером пхп;
-
ZeroMatrix [n] — формирует
квадратную нулевую матрицу размером пхп;
-
ZeroMatrix [m, n] —
формирует нулевую матрицу размером тхп;
-
HilbertMatrix [n]
— формирует квадратную матрицу Гильберта размером пхп;
-
HilbertMatrix [m, n] — формирует матрицу Гильберта размером тхп;
-
HankelMatrix [n] —
формирует квадратную матрицу Ганкеля размером пхп;
-
HankelMatrix [m, n]
— формирует матрицу Ганкеля размером тхп.
Примеры задания
матриц разного типа приведены ниже:
UpperDiagonalMatrix[f,
3] //MatrixForm
LowerDiagonalMatrix[#1
+ #2 &, 4] //MatrixForm
HilbertMatrix[2,
4] //MatrixForm
HankelMatrix[{w,
x, y, z}] //MatrixForm
Наконец,
в подпакет входит еще одна функция, LinearEquationsToMatri-ces
[eqns, vars],
которая из записи линейного уравнения eqns с переменными vars формирует расширенную
матрицу, содержащую матрицу коэффициентов левой части уравнения и вектор свободных
членов.
Пример применения
данной функции:
LinearEquationsToMatrices[
а[1,1]*х
+ а[1,2]*у == с[1],
а[2,1]*х
+ а[2,2]*у == с[2], х, у]
{{{{{a11, a12),
{а21, а22}}[1, 1],
{{a11, a12),
{a21, а22}}[1, 2]}, {{{a11, a12}, {a21, a22}}[2, 1],
{{a11, a12),
{a21, a22}} [2, 2]}}, {c[l],c[2]}}
Ортогонализация и нормализация — Ortogonalization
В подпакете
ортогонализации Ortogonalization имеются следующие функции:
-
GramSchmidt [ {vl,
v2,...} ] — создает ортогональное множество на основе списка векторов v1,
v2, ...;
-
Normalize [vect] —
возвращает нормированный вектор vect;
-
Projection [vectl,
vect2] — дает ортогональную проекцию вектора vl на вектор v2.
В этих функциях
после аргументов допустимы опции InnerProduct->exprn Normalized->False
(отказ от нормировки). Примеры работы с функциями ортогонализации представлены
ниже:
<<LinearAlgebra`Orthogonalization`
{wl, w2,
w3} = GramSchmidt[ {{1,3,2}, {2,4,3}, {2,4,6}}]
{ wl . w2,
w2 . w3, wl . w3, wl . wl, w2 . w2, w3 . w3}
{0, 0, 0, 1,
1, 1}
GramSchmidt[{1,
x, x^2, x^3, x^4}, InnerProduct -> (Integrate[#l
#2,{x,-l,l}]&)] //Simplify
Normalize[LegendreP[2,x],
InnerProduct ->(Integrate[#l #2,{x,-l,l}]&)]
{wl, w2}
= GramSchmidt[{{3,4,3}, {2,3,6}}, Normalized -> False]
{wl . wl,
wl . w2}
{34, 0}
Решение линейных уравнений с трехдиагональной матрицей
—Tridiagonal
При решении
линейных уравнений часто встречаются матрицы особой формы —
трехдиагональные.
Подпакет Tridiagonal имеет функцию для решения линейных уравнений с такой
матрицей:
-
TridiagonalSolve [a,b,
с, г] — решение системы линейных уравнений с трехдиагональной матрицей
m.
х==г (диагонали представлены векторами а, b и с, вектор свободных членов —
г).
Пример применения
данной функции:
<<LinearAlgebra` Tridiagonal`
{а, b, с}
= {{1, 2, 3}, {4, 5, б, 7}, {10, 9, 8}}
{{1, 2, 3},
{4, 5, 6, 7}, {10, 9, 8}}
m = Table[Switch[
j-i, -1, a[[j]], 0, b[[jj], 1, c[[j-l]], _, 0], {i, 4}, {j, 4}]//MatrixForm
TridiagonalSolve[a,
b, c, {8, 3, 4, 5}
С
учетом представленных функций и функций ядра набор матричных средств системы
Mathematica является одним из наиболее полных. В области решения задач в численном
виде он несколько уступает лишь специализированной матричной системе MATLAB
5.0/5.3.
|