| Spis treści | Szukaj | << | >> |
Najpierw załadujemy moduł linalg do obliczeń algebraicznych z zakresu algebry liniowej.
> with(linalg);
Warning, the protected names norm and trace have been redefined and unprotected
[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian,
addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout,
blockmatrix, charmat, charpoly, cholesky, col, coldim, colspace, colspan,
companion, concat, cond, copyinto, crossprod, curl, definite, delcols,
delrows, det, diag, diverge, dotprod, eigenvals, eigenvalues, eigenvectors,
eigenvects, entermatrix, equal, exponential, extend, ffgausselim,
fibonacci, forwardsub, frobenius, gausselim, gaussjord, geneqns, genmatrix,
grad, hadamard, hermite, hessian, hilbert, htranspose, ihermite, indexfunc,
innerprod, intbasis, inverse, ismith, issimilar, iszero, jacobian, jordan,
kernel, laplacian, leastsqrs, linsolve, matadd, matrix, minor, minpoly,
mulcol, mulrow, multiply, norm, normalize, nullspace, orthog, permanent,
pivot, potential, randmatrix, randvector, rank, ratform, row, rowdim,
rowspace, rowspan, rref, scalarmul, singularvals, smith, stackmatrix,
submatrix, subvector, sumbasis, swapcol, swaprow, sylvester, toeplitz,
trace, transpose, vandermonde, vecpotent, vectdim, vector, wronskian]
Macierz definiuje się przy pomocy polecenia
matrix(...) w jednej z dwóch wersji:
Polecenie matrix(m,
n, [lista]) tworzy macierz o wymiarach
m×n o elementach pobranych z
listy. Elementy z listy umieszczane są macierzy
wierszami, od prawej do lewej i od góry do dołu:
> M := matrix(3,4,[4,-3,1,0,3,7,0,-5,6,0,-1,2]);
[4 -3 1 0]
[ ]
M := [3 7 0 -5]
[ ]
[6 0 -1 2]
Polecenie matrix([lista])
gdzie lista jest listą list, tworzy macierz, której
wierszami są listy wymienione na liście podanej jako argument.
> N := matrix([[2,-1,0,6],[-5,0,7,3],[0,1,-3,4]]);
[ 2 -1 0 6]
[ ]
N := [-5 0 7 3]
[ ]
[ 0 1 -3 4]
> col(M,1);
[4, 3, 6]
> [seq(col(M,k),k=1..4)];
[[4, 3, 6], [-3, 7, 0], [1, 0, -1], [0, -5, 2]]
> row(M,2);
[3, 7, 0, -5]
> [seq(row(M,k),k=1..3)];
[[4, -3, 1, 0], [3, 7, 0, -5], [6, 0, -1, 2]]
> evalm(M);
Dla przypomnienia - postać macierzy M:
[4 -3 1 0]
[ ]
[3 7 0 -5]
[ ]
[6 0 -1 2]
Aby z macierzy m wyciąć fragment
zaweirający komówrki z wierszy w i jednocześnie kolumn
k (gdzie w i k może być przedziałem,
na przykład 2..4, lub listą [2,1,3] -
patrz przykłady), należy użyć polecenia
submatrix(m,w,k):
> submatrix(M,2..3,1..2);
[3 7]
[ ]
[6 0]
> submatrix(M,[3,1,2],[4,1]);
[ 2 6]
[ ]
[ 0 4]
[ ]
[-5 3]
> coldim(M);
4
> rowdim(M);
3
Wyznacznik macierzy M wyznaczamy
poleceniem det(M), gdzie macierz
M musi być kwadratowa.
> det(M);
Error, (in linalg:-det) expecting a square matrix
> M2 := matrix(2,2,[2,-1,3,-1]);
[2 -1]
M2 := [ ]
[3 -1]
> det(M2);
1
> evalm(M2^(-1));
[-1 1]
[ ]
[-3 2]
Można też tak:
> inverse(M2);
[-1 1]
[ ]
[-3 2]
> transpose(M2);
[ 2 3]
[ ]
[-1 -1]
W celu usunięcia z macierzy M kolumny
od m-tej do n-taj należy użyć polecenia
delcols(M,m..n):
> delcols(M,2..3);
[4 0]
[ ]
[3 -5]
[ ]
[6 2]
W celu usunięcia z macierzy M wierszy
od m-tej do n-taj należy użyć polecenia
delrows(M,m..n):
> delrows(M,1..2);
[6 0 -1 2]
> concat(M,N);
[4 -3 1 0 2 -1 0 6]
[ ]
[3 7 0 -5 -5 0 7 3]
[ ]
[6 0 -1 2 0 1 -3 4]
> evalm(M+N);
[ 6 -4 1 6]
[ ]
[-2 7 7 -2]
[ ]
[ 6 1 -4 6]
Wykonajmy działanie: M2TM2-1
> evalm(transpose(M2)*M2^(-1));
[-11 8]
[ ]
[ 4 -3]
Można też i tak:
> multiply(transpose(M2),M2^(-1));
[-11 8]
[ ]
[ 4 -3]
W celu zastąpienia j-tej kolumny
macierzy M kolumną i-tą przemnożoną
przez m (j ← j +
m*i) należy użyć polcenia:
addcol(M,i,j,m)
jak następuje:
> addcol(M,3,1,-2);
[2 -3 1 0]
[ ]
[3 7 0 -5]
[ ]
[8 0 -1 2]
W celu zastąpienia j-tego wiersza
macierzy M wierszem i-tą przemnożonym
przez m (j ← j +
m*i) należy użyć polcenia:
addrow(M,i,j,m)
jak następuje:
> addrow(M,2,3,-2);
[4 -3 1 0]
[ ]
[3 7 0 -5]
[ ]
[0 -14 -1 12]
> mulcol(M,3,5);
[4 -3 5 0]
[ ]
[3 7 0 -5]
[ ]
[6 0 -5 2]
> mulrow(M,1,0.5);
[2.0 -1.5 0.5 0.]
[ ]
[ 3 7 0 -5]
[ ]
[ 6 0 -1 2 ]
> swapcol(M,3,1);
[ 1 -3 4 0]
[ ]
[ 0 7 3 -5]
[ ]
[-1 0 6 2]
> swaprow(M,3,1);
[6 0 -1 2]
[ ]
[3 7 0 -5]
[ ]
[4 -3 1 0]
> A := matrix([[2,-3,1],[3,1,3],[-5,2,-4]]);
[ 2 -3 1]
[ ]
A := [ 3 1 3]
[ ]
[-5 2 -4]
> eigenvalues(A);
0, 1, -2
> eigenvectors(A);
[ -11]
[-2, 1, {[1, 3/4, -7/4]}], [0, 1, {[1, 3/10, ---]}], [1, 1, {[-1, 0, 1]}]
[ 10 ]
Funkcja eigenvectors zwraca w każdej
liście następujące wartości:
czyli w przykładzie otrzymaliśmy trzy wektory własne, wszystkie jednokrotne. Wartości własnej -2 odpowiada wektor [1, 3/4, -7/4], wartości własnej 0: [1, 3/10, -11/10], a wartości własne -1: [-1, 0, 1]