Strona główna » Poradniki » Maxima » Listy i macierze
1011

Listy i macierze

Listy

Macierze to układ liczb, symboli lub wyrażeń zapisanych w prostokątnej tablicy. Zanim przejdziemy do deklarowania funkcji przypomnijmy sobie jak tworzyło się w Maximie listy. Lista zaczyna się znakiem [ i kończy ], w środku kolejne elementy są oddzielane przecinkiem. Przykładowo jeśli chcemy zadeklarować listę i przypisać ją do zmiennej l w programie wpisujemy:

(%i1)l: [1, 2, 3];
(l)[1,2,3]

Od tej pory możemy do naszej listy się zawsze odwołać do programu poprzez wpisanie litery l. Nasza lista będzie traktowana jako wektor, więc możemy wykonywać na niej podstawowe działania arytmetyczne. Ważne, aby pamiętać, że przy dodawaniu (i odejmowaniu) oba argumenty powinny mieć tyle samo elementów. Inaczej możemy otrzymać nieoczekiwane rezultaty.

Macierze

Znając sposób deklarowania list możemy przejść do tworzenia macierzy, które są właściwie skondensowanym sposobem zapisania układu równań liniowych. Każde równanie liniowe możemy zapisać w postaci listy wyrażeń. Przykładowo stwórzmy zmienną M i przypiszmy do niej jakąś macierz:

(%i2)M: matrix([2,3,5],[1,2,3],[5,1,6]);
(M)

Oczywiście nasza macierz nie musi się składać tylko z liczb. Możemy też tam umieścić wyrażenia algebraiczne oraz symbole specjalne:

(%i3)K: matrix([0,a,0],[b,0,0],[%e,0,1]);
(K)

Takie dwie macierze możemy dodawać, mnożyć (przez skalar jak również i inną macierz), dzielić. W tym celu należy posłużyć się zmiennymi do których przypisaliśmy macierze, przykładowo jeśli chcemy dodać to:

(%i4)K + M;
(%o4)

Możliwe jest też podnoszenie macierzy do określonej potęgi, która nie musi być skalarem, a może być inną macierzą. W tym celu należy wpisać:

(%i5)M^^3;
(%o5)

Uwaga: Bardzo ważne jest użycie operatora M^^n, który mnoży macierz M n razy, a użycie M^n zwróci macierz w której każdy element macierzy M zostanie podniesiony do potęgi n.

Przydatne funkcje związane z macierzami

echelon(M) - pozwala na przeprowadzenie eliminacji Gaussa na podanej macierzy M:

(%i6)echelon(M);
(%o6)

ident(n) - zwraca macierz jednostkową n na n:

(%i7)ident(2);
(%o7)

invert(M) - zwraca, o ile istnieje, macierz odwrotną do macierzy M, jest równoważne poleceniu M^^-1, w przypadku, gdy nie istnieje program zwróci błąd:

(%i8)invert(M);
(%o8)expt: undefined: 0 to a negative exponent.

rank(M) - zwraca rząd macierzy czyli maksymalną ilość niezależnych wektorów tworzących kolumny danej macierzy:

(%i9)rank(M);
(%o9)2

transpose(M) - zwraca transponowaną macierz M:

(%i10)transpose(M);
(%o10)

zeromatrix(m, n) - zwraca macierz wielkości m na n, gdzie wszystkie elementy to zero

(%i11)zeromatrix(2, 3);
(%o11)

Z macierzy M możemy wybierać dowolny wiersz poleceniem row(M, n) lub dowolną kolumnę col(M, n), gdzie M to macierz, a n to numer wiersza / kolumny.