Maxima

MAKELIST-Befehl / Listen

Inhalt:

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!


zurueck

Beispiele - makelist-Befehl

Folgen

Berechne die ersten 20 Elemente der Zahlenfolge an mit an = n/(2n+1).

makelist1

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.


makelist2

Ü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

Button

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].


table

zurueck

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))$
zurueck

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:
Sublist - Lambda

Ab Version 5.17.0:
Sublist - Lambda neu

zurueck

© PH-NOe, letzte Änderung am 29. Dezember 2008, erstellt von Walter Wegscheider