Eine der einfachsten "Schleifenähnlichen" Funktionen, der in MAXIMA häufige Verwendung erfährt, ist der MAKELIST-Befehl. Für die Verwendung von Element-Ketten (Listen, Vektoren - in den meisten Programmiersprachen als Arrays bezeichnet) bietet MAXIMA darüber hinaus aber noch eine ganze Palette von Befehlen an.
Funktionen und Operatoren für Listen / Arrays:
makelist(u,k,m,n) |
ergibt die Liste [u(m), u(m+1), ..., u(n)] in Abhängigkeit von k. |
makelist(u,k,z) |
ergibt die Liste [u(z1), u(z2), ..., u(zn)], wobei z selbst eine Liste z = [z1, z2, ..., zn] ist. |
create_list(u,k,z) |
Alternative zu makelist - erzeugt eine Liste aus dem Ausdruck u, wobei k alle Werte der Liste z durchläuft. |
read_list(file) |
erzeugt eine Liste aus dem Datenfile file. |
read_nested_list(file) |
erzeugt eine verschachtelte Liste aus dem Datenfile file, jede Zeile im Datenfile wird zu einer Unterliste. |
copylist(v) |
kopiert die Liste v. |
v[n] |
ergibt das n-te Element des Vektors v. |
v[i][j] |
ergibt das ij-te Element der zweifach geschachtelten Liste v. |
:, +, -, *, / |
elementweise Zuordnung, Addition, ... - Achtung: bei elementweisen Operationen mit zwei Listen müssen beide Listen die gleiche Anzahl von Elementen haben. |
|
first(v) |
ergibt das erste Element eines Vektors v. Ähnlich gibt es die Möglichkeit, über second(v), third, ..., bis tenth Elemente anzusprechen. Weitere Möglichkeit ist last. |
length(v) |
gibt die Anzahl der Teile zurück. |
member(a,w) |
überprüft, ob der Ausdruck a Bestandteil der Liste w ist - liefert true oder false. |
lmin(w), lmax(w) |
liefert das Minimum / Maximum aller Listenelemente. |
delete(v,w) |
löscht alle Vorkommen des Ausdrucks v in w - nicht nur auf Listen anwendbar. |
append(list1,list2) |
an die Liste list1 werden die Elemente von list2 hinzugefügt. |
cons(a,v) |
fügt den Ausdruck a am Anfang der Liste v ein, a ist damit neues erstes Element von v (analog: endcons(a,v) am Ende der Liste). |
rest(v,n) |
gibt v ohne die ersten n Elemente (negatives n: ohne die letzten n Elemente). |
reverse(v) |
liefert eine Kopie von v, bei der die Komponenten genau in umgedrehter Reihenfolge auftreten. |
sort(v) |
ergibt die (aufsteigend) sortierte Liste - SORT kann durch Angabe von Parametern / Prädikaten auch noch variiert werden (siehen MAXIMA-Hilfe!) |
sublist(w,f) |
ergibt die Liste mit jenen Elementen aus w (einer Liste), für die die Funktion f den Wert true ergibt. |
flatten(v) |
"Verflachen" der Liste - Unterlisten werden aufgelöst und deren Elemente "flach" in die Liste w eingebettet. |
Hinweis - einige der besprochenen Funktionen gelten auch für Matrizen - die wieder als mehrdimensionale Vektoren oder Listen aufgefasst werden können.
Hinweis - Listen (wie auch Matrizen) lassen sich nicht durch eine einfache Variablenzuordnung kopieren, man benötigt dafür den eigenen Befehl! (copylist). Die Zuordnung a:l1 erzeugt nur eine Referenz auf die Liste l1, aber keine neue Liste a!
|
|
Beispiele - makelist-Befehl
Folgen
Berechne die ersten 20 Elemente der Zahlenfolge an mit an = n/(2n+1).

Wertetabellen von Funktionen
Erzeuge die Funktionswerte von f(x):=x^2-x-1 im Intervall [-2,3] mit Schrittweite 0.5.
Tip - da der Befehl MAKELIST keinen Parameter STEP kennt, weichen wir aus, indem wir innerhalb von MAKELIST eine Liste mit den gewünschten x-Werten erzeugen (natürlich wieder mit MAKELIST) und berechnen anschließend die Funktionswerte dieser erzeugten Ausdrücke.

|
Übungen:
- Erzeugen Sie die ersten 20 Elemente der Folge an mit an=1/2^n. Erzeugen Sie zur selben Folge ergänzend mit Hilfe eines MAKELIST-Befehls die Elemente 21, 22, 23, 25, 28, 32.
- Geben Sie die folgende Liste mittels MAKELIST-Befehl ein: [0,-2,4,-6,8,-10,12,-14,16,-18,20,-22,24,-26]
- Erzeugen Sie eine Funktion, die die Eckpunkte eines regelmäßigen n-Ecks mit Hilfe des MAKELIST-Befehls erzeugt (Radius des Umkreises = 5). Plotten Sie mit Hilfe der erzeugten Punkte ein regelmäßiges 12-Eck.
|
MAXIMA-Datei
 |
Pascalsches Dreieck:
Konstruiere die ersten 8 Zeilen des Pascalschen Dreiecks! Verwende dazu die Kombinatorikfunktion binomial(n,k) = n!/(k!·(n-k)!)
Tip - für eine zeilenweise Auflistung empfiehlt sich die Verwendung einer "echten" Schleife! for .. thru .. do
Hier: von n=1 bis 8 führe folgenden Anweisungsblock aus [berechne die Werte, zeige sie an].

|
|
Umwandlung von Listen in Matrizen / Matrizen in Listen
In der Arbeit mit MAXIMA stößt man öfter auf das Problem, dass man als Datenmaterial Listen hat, für die gewünschte Aktion aber eine Matrix benötigt wird - oder umgekehrt. Relativ einfach lassen sich Umwandlungsbefehle definieren.
listtomat(L) ... wandelt eine Liste L in eine Matrix, wobei aus jedem Listenelement eine Zeile der Matrix wird.
listtomat(L):=block(
[i, M],
M:matrix(),
for i:1 thru length(L) do M:addrow(M,L[i]),
return(M)
)$
mattolist(M) ... wandelt eine Matrix M in eine Liste, wobei aus jeder Zeile der Matrix eine Subliste wird. Diese Sublisten könnne über den Befehl flatten(L) bei Bedarf einfach wieder "geglättet" werden.
mattolist(M):=makelist(M[i],i,1,length(M))$
|
|
Sublisten - Anwendung von Bedingungen/Prädikate/Lambda-Funktion
Oft stellt sich die Frage, wie auf einfache Art Daten, die bestimmten Bdingungen gehorchen, aus Listen extrahiert werden können. Neben vordefinierten Prädikaten/Bedingungen wie evenp bzw. oddp (gerade, ungerade) bietet hier die Lambda-Funktion von MAXIMA in Verbindung mit dem Befehl sublist eine ungemein flexible und elegante Möglichkeit.
lambda(Ausdruck, Bedingung) ... Anonyme Funktion - wirkt als boolescher Ausdruck zur Selektion von Daten, Ausdruck muss dabei eine Liste sein! - die Variablen sind "anonym", haben also keinen Bezug zu den verwendeten Kenngrößen im Arbeitsblatt.
Ab der MAXIMA-Version 5.17.x müssen selbst definierte Prädikate (z.B. x>10) evaluiert werden - dies wird durch den Befehl is erreicht. Aus x>10 wird is(x>10).
Bis zur Version 5.16.3:

Ab Version 5.17.0:

|
|