Einsatzmöglichkeiten (in der Schule) Bearbeiten

  • Lösen von Gleichungssystemen
  • Integrieren und Differenzieren
  • 2D-/3D-Plots
  • Implementation von Algorithmen
  • Rechnen mit Matrizen
  • weitere algebraische Operationen

Einführung I Bearbeiten

Da wxMaxima derzeit mit MacOS nicht kompatibel ist, können Sie auch die Version unter http://maxima.cesga.es/ verwenden.
Maxima hat viele Funktionen, vor allem aus der Analysis und der Linearen Algebra, wie Differenzieren, Integrieren, Matrizenrechnung, Lösen von Gleichungssystemen, Entwicklung von verschiedenen Potenzreihen und vieles mehr. Mithilfe der graphischen Oberfläche können vor allem einfacherer Befehle sehr schnell und einfach durchgeführt werden, ohne den Code für die Befehle zu kennen. Auch das Schreiben von Algorithmen ist möglich.

Einführung II Bearbeiten

Es gibt Eingabezeilen und Ausgaben, wobei Ersters mit %i(Nummer) bezeichnet und Zweiteres mit %o(Nummer) gekennzeichnet wird. Durch diese Bezeichnungen ist auch ein späteres Zugreifen auf die Inhalte möglich.

Mit shift return wird eine Ausgabe ausgewertet, ggf. ergänzt Maxima zur Eingabe noch ein Semikolon (falls nicht vorhanden), um die Eingabe abzuschließen. Eine Funktionszuweisung erfolgt mit ":=":

 f(x):=x^3-2*x 

Einführung III Bearbeiten

Durch Einsetzen in die Funktion kann diese an der entsprechenden Stelle ausgewertet werden:

 f(2) 

Variablen können durch ":" Werte zugewiesen werden:

 a:2 

Angenommen, dieser Befehl ist Input %i2, somit wird %o2 zu 2, also ist

 f(%o2) 

die Auswertung von f an der Stelle 2 ebenso wie

 f(a) 

Matrizen Bearbeiten

Matrizen können mit "matrix()" erzeugt werden. Die einzelnen Zeilen werden in eckigen Klammer [] angegeben und die Werte ebenso wie die Zeilen mit , getrennt:

 A:matrix([0,1,2],[1,3,0],[1,2,1])

Eine komponentenweise Multiplikation der Matrix   mit sich selbst erfolgt mit "*" beziehungsweise "^", wohingegen die normale Matrixmultiplikation von   mit sich selbst mit "." oder "^^" durchgeführt wird.

 A*A = A^2 
 A.A = A^^2

Determinaten werden mit "determinant()" bestimmt:

 determinant(A)

und das Inverse der Matrix mit "invert()":

invert(A)

Aufgaben Bearbeiten

Matrizenrechnung Bearbeiten

Gegeben seien die Matrizen  ,   und  :

 

Bestimmen Sie  ,  ,   und  .
Woran erkennen Sie, welche Multiplikation gemeint ist?

Stochastische Matrix Bearbeiten

Betrachten Sie die stochastische Matrix

 

und den Zustandsvektor

 

welcher die aktuelle Population in den entsprechenden Gebieten angibt.
Bestimmen Sie die Populationen in den Gebieten vor   Jahren und in   Jahren.

Gleichungen/-ssysteme lösen I Bearbeiten

Es gibt in Maxima verschiedene Befehle zum Lösen von Gleichungen, die verschiedenen Rahmenbedingungen genügen.
Die Befehle "linsolve" und "solve" lösen lineare oder kubische Gleichungssysteme sowie lineare Differentialgleichungssysteme. "solve" kann darüber hinaus auch Terme mit einer Unbekannten lösen. Sofern die Unbekannte eindeutig ist, ist deren Angabe nicht notwendig. Terme werden = 0 gesetzt. Der Befehl "algsys" löst Gleichungssysteme und setzt Polynome = 0. "algsys" funktioniert auch, wenn die Anzahl der Gleichungen ungleich der Anzahl der Variablen ist. Weiter Informationen zu den Befehlen sind im Maxima Manual zu finden.

Gleichungen/-ssysteme lösen II Bearbeiten

Im Weiteren wird hauptsächlich der "solve"-Befehl verwendet.

 solve([x^5-1 = 0],[x])

Dieser Befehl gibt für die Gleichung   fünf Lösungen für   aus. Dabei steht "%e" für die Eulersche Zahl. Die gleichen Ergebnisse gibt auch

 solve([x^5-1])
 solve([x+y],[x,y])

gibt Lösungen für die Gleichung   aus, dabei steht "%ri",   für eine beliebeige Zahl.

Gleichungen/-ssysteme lösen III Bearbeiten

 solve([x+y, x = a],[x,y])

liefert Lösungen für das Gleichungssystem aufgelöst nach   und  , jedoch abhängig von  .

 solve([x+y],[x,y,z] 

liefert ebenfalls Lösungen für das Gleichungssystem, zusätzlich noch eine Lösung für  , welche, da   nicht in der Gleichung vorkommt, die Lösung "z=%ri",  .

Gleichungen/-ssysteme lösen IV Bearbeiten

Die Gleichung   liefert mit "solve" keine Lösung, der Befehl "algsys" liefert hingegen fünf komplexwertige Lösungen.

solve([x^5 - x^3 + 1 = 0],[x])
algsys([x^5 - x^3 + 1 = 0],[x])

Das Gleichungssystem bestehend aus den Gleichungen   und   liefert keine Lösungen, dies wird mit "[]" angegeben.

 linsolve([6 * x +12 * y = 30, 3 * x + 3 * y = 9],[x,y])

liefert für die Gleichungssysteme   und   ebenso wie

 algsys([6 * x +12 * y = 30, 3 * x + 3 * y = 9],[x,y])

die Lösungen   und  .

Aufgaben Bearbeiten

Lineare Gleichungssysteme Bearbeiten

Lösen Sie die linearen Gleichungssysteme.

 
 

Schnittpunkte von Funktionen Bearbeiten

Betrachten Sie die Funktionen   und   und bestimmen Sie deren Schnittpunkte mittels verschiedener Maxima-Funktionen.

Nullstellen Bearbeiten

Der Befehl "find_root()" mit den durch "," getrennten Argumenten Funktion, Variable, obere Intervallgrenze und untere Intervallgrenze gibt alle reelwertigen Nullstelllen einer Funktion in einem Intervall an. Zum Beispiel für die Funktion   im Intervall   liefert

 find_root(f(x),x,-2,2)

die Lösung. "allroots()" liefert alle Lösungen, auch die komplexwertigen. Als Argument genügt die Funktion.

 allroots(f(x))

"realroots()" liefert mit der Funktion als Argument die rationale Nullstelle, ggf. wird ein gerundeter Wert für reele Lösungen ausgegeben:

 realroots(x^2-2)

Aufgabe Bearbeiten

Nullstellen Bearbeiten

Bestimmen Sie alle Nullstellen der Funktion   auf unterschiedliche Arten.

Beispiel-Funktion Bearbeiten

Die Beispielfunktion "example()" liefert mit einer Maxima-Funktion als Argument eines, zumeist mehrere Beispiele für eine Funktion.

example(solve)

Gängige mathematische Objekte I Bearbeiten

 %pi

liefert die Kreiszahl   und die Wurzel von   wird dargestellt mit

 sqrt(x)

"float()" mit dem Argument einer Zahl gibt die Fließkommazahl aus.

 float(%e)
 sum(i^2,i,1,4)

liefert die Summe über   von   bis   analog zum Befehl "product()", welches mit den gleichen vier Argumenten das Produkt ausgibt.

Gängige mathematische Objekte II Bearbeiten

"makelist()" mit den analogen Argumenten wie "sum()" und "product()" gibt eine Menge endlicher Werte aus, welche über die Vorschrift im ersten Argument kreiert werden. Wird im Anschluss ein "[i]" mit i zwischen dem letzten und vorletzten Argument, so wird der Wert an der i-ten Stelle ausgegeben.

 makelist(1/n,n,1,10)
 makelist(1/n,n,1,10)[3]

Gängige mathematische Objekte III Bearbeiten

Der Grenzwert von Folgen oder Funktionen kann mit dem "limit()"-Befehl ermittelt werden. Dabei wird zwischen Folgen und Funktionen nicht unterschieden. Argumente sind die Vorschrift, die Variable, für welche der Grenzwert ausgegeben werden soll und wogegen diese laufen soll.

 limit(1/(n+1),n,0)

Um Grenzwerte gegen   zu bestimmen, wird als Grenze das Argument "inf" verwendet.

Aufgaben Bearbeiten

Summen und Produkte Bearbeiten

Bestimmen Sie die nachfolgenden Ausdrücke:

 
 
 

Folgen Bearbeiten

Erzeugen Sie eine Liste mit den Folgegliedern der Folge

 

und bestimmen Sie das Produkt von  .

Umformungen und Vereinfachen Bearbeiten

Grundsätzlich vereinfacht Maxima eingegebene Ausdrücke wie zum Beispiel

 (x+x)/(3 * x)

und gibt   aus. Vereinfacht Maxima den Ausdruck wie zum Beispiel   nicht, so kann der Befehl "ratsimp()" verwendet werden.

ratsimp((x+1)/(x^2-1))

ergibt  . Faktorisieren ist mit dem Befehl "factor()" möglich:

 factor(x^3+4*x^2-11 * x - 30)

liefert somit die Faktoren.

Aufgaben Bearbeiten

Vereinfachen Bearbeiten

Vereinfachen Sie den Term  

Faktorisieren Bearbeiten

Faktorisieren Sie den Ausdruck  

Plotten I Bearbeiten

Für das Plotten von zweidimensionalen Graphen gibt es zwei Befehle: "wxplot2d()" und "plot2d()", in den Klammern stehen die Funktionsvorschrift gefolgt von einer eckigen Klammer. Die Argumente werden durch ein Komma getrennt. In der eckigen Klammer steht der Name der Funktionsvariable sowie die obere und untere Intervallgrenze, in welcher der Graph geplottet werden soll. Der Unterschied zwischen den beiden Befehlen liegt darin, dass der erste Befehl den Plot in Maxima öffnet wohingegen der zweite Befehl ein separates Fenster öffnet und bei der Ausgabe wird der entsprechende Dateipfad angegeben, unter welchem die Datei zu finden ist.

 wxplot2d([x^3-2*x],[x,-20,20])
plot2d(x^3-2*x,[x,-20,20])

Plotten II Bearbeiten

Für dreidimensionale Graphen können mit den analogen Befehlen "wxplot3d()" und "plot3d()" geplottet werden. Als zusätzliches Argument wird der Name der zweiten Variable sowie deren obere und untere Intervallgrenze benötigt, ebenfalls in eckigen Klammern.

 plot3d(cos(y)+sin(x),[x,-5,5],[y,-10,10])
wxplot3d(cos(y)+sin(x),[x,-5,5],[y,-5,5])

Differenzieren und Integrieren I Bearbeiten

Das (mehrfache) Differenzieren oder auch Integrieren erfolgt durch die Befehle "diff()" und "integrate()". Die Argumente für das Differenzieren sind der Funktionsname oder die Funktionsvorschrift, die Funtionsvaraible, nach der differenziert wird sowie die Häufigkeit der Differentation.

 diff(x^3-2*x,x,1)
diff(g(x,y),y,1)

Der Gradient kann dargestellt werden, indem die Matrix über die partiellen Ableitungen gebildet wird:

grad_g:matrix([diff(g(x,y),x)],[diff(g(x,y),y)])

Differenzieren und Integrieren II Bearbeiten

Für das Bilden der Stammfunktion werden lediglich der Name der Funktion bzw. die Funktionsvorschrift und die Variable, nach welcher integriert werden soll.

 integrate(f(x),x)

Für das Bestimmen des Wertes eines bestimmten Integrals werden zusätzlich die untere und obere Grenze benötigt. Alle Argumente werden durch Kommata getrennt.

 integrate(f(x),x,1,10)

Aufgaben Bearbeiten

Plotten und Differenzieren I Bearbeiten

Plotten Sie die Funktion

 

und bilden Sie die ersten beiden Ableitungen.

Plotten und Differenzieren II Bearbeiten

Plotten Sie die Funktion

 

und bestimmen Sie den Gradienten.

Integration Bearbeiten

Bestimmen Sie die Stammfunktion von   und das Integral

 

Wahrscheinlichkeitsdichte Bearbeiten

Zeigen Sie, dass

  eine Wahrscheinlichkeitsdichte ist.

Bestimmen Sie den Erwartungswert sowie die Wahrscheinlichkeit  .

Äquivalenzumformungen Bearbeiten

Auch Äquivalenzumformungen können von Maxima durchgeführt werden: Dafür kann die Gleichung direkt in Klammern dargestellt werden und die Umformungsoperation dahiinter angegeben werden

 (a*x+b=c)-b

Alternativ kann der Gleichung auch eine Bezeichnung zugeordnet und die Operation mit dem Namen verknüpft werden.

 gl1:a*x+b=c
gl1-b

Weitere Befehle I Bearbeiten

Der Ausdruck "print()" gibt den in Klammern dargestellten Ausdruck als Ausgabe aus. Dies wird für spätere Algorithmen benötigt.

 a:2
 print(a)

Auch Division mit Rest kann mit "mod()" durchgeführt werden. Die Argumente sind der Dividend und der Divisor.

 mod(5,3)

bestimmt somit den Rest der Division  .

Weitere Befehle II Bearbeiten

Eine Zufallszahl kann generiert werden mittels "random(x)", wobei die Zufallszahl kleiner als x ist. Ist  , so ist auch die Zufallszahl aus  . Ist x hingegen eine Fließkommazahl, so ist auch die Ausgabe eine. Zum Beispiel gibt

random(3)

eine Zufällige Zahl kleiner 3 aus, also 2 oder 1 oder 0.

Sequenz Bearbeiten

Eine Sequenz ist eine Hintereinanderausführung von Befehlen, wobei diese durch runde Klammern eingeschlossen sind.

If - then - else I Bearbeiten

Analog zum Wenn-Befehl aus TKP gibt es bei Maxima die if-then-else-Befehlsstruktur. Nach "if" folgt die Bedingung, welche abgefragt wird, dann folgt nach "then" der Befehl, der ausgeführt werden soll, falls die Bedingung erfüllt ist und nach "else" folgt der Befehl, der auszuführen ist, wenn die Bedingung nicht erfüllt ist. Als Beispiel soll die Struktur betrachtet werden, welche die größere von zwei Zahlen ausgibt.

 a : 5
 b : 6 
 if a > b then print (a) else if a = b then print("beide gleich") else print(b)

If - then - else II Bearbeiten

Wichtig ist bei diesem Beispiel zu berücksichtigen, dass es bei zwei Zahlen nicht zwei, sondern drei Relationsmöglichkeiten, also mögliche Ausgaben, gibt. Daher wird eine doppelte if-then-else-Bedingungen benötigt, die verschachtelt ist.

Aufgabe Bearbeiten

If-Befehl Bearbeiten

Erstellen Sie eine if-Abfrage, durch deren Anwendung bestimmt werden kann, ob zwei Zahlen ein ganzzahliges Vielfaches voneinander sind.
Hinweis: Benutzen Sie dazu die Modulo Funktion.

For-Schleife I Bearbeiten

 
Flow chart für eine For-Schleife.

For-Schleife II Bearbeiten

Bei einer For-Schleife werden Befehle so oft wiederholt, bis der Befehl für alle Elemente der Zählvariable durchgeführt wurde. Nach "for" folgt der Name der Variable, für welche mit ":" ein Anfangswert festgelegt wird. Dann steht hinter dem angeschlossenen "step" die Schrittweite gefolgt vom "thru" und dem Endwert. Abschließend folgt ein "do" mit der Befehlsequenz, d.h. die durchzuführenden Befehle werden durch "," getrennt aneinander gereiht. Als Minimalbeispiel soll die for-Schleife dienen, welche die Zahlen 1 bis 10 ausgibt:

 for a: 1 step 1 thru 10 do print(a)

Aufgabe Bearbeiten

for-Schleife Bearbeiten

Erstellen Sie eine for-Schleife, deren Ausführung Ihnen die Quadratzahlen von 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 ausgibt.

While-Schleife I Bearbeiten

 
Flowchart einer While-Schleife.

While-Schleife II Bearbeiten

Eine While-Schleife führt so lange einen Befehl aus, bis die genannte Bedingung nicht mehr erfüllt ist. Die Bedingung steht dabei hinter dem "while" und die auszuführenden Befehle hinter dem anschließenden "do". Als Beispiel soll auch hier die Ausgabe von Zahlen mit dem Startwert 1 bis 10 dienen. Jedoch wird bei der While-Schleife hier zuerst der Zähler erhöht und dann ausgegeben, weshalb die Ausgabe mit 2 beginnt.

 (a:1, while a < 10 do (a:a+1, print(a)))

Aufgabe Bearbeiten

while-Schleife Bearbeiten

Erstellen Sie eine while-Schleife, durch deren Ausführung Ihnen die Quadratzahlen von 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 ausgegeben werden.

Blöcke Bearbeiten

Um Befehle hintereinander auszuführen, gibt es den Befehle "block([], )", wobei in der eckigen Klammer die genutzten Variablen mittels "," getrennt aufgeführt werden, danach folgen durch "," getrennt die Befehle. Um Eingabeparameter angeben zu können, werden zusätzlich Funktionsdefinitionen benötigt. Als Beispiel soll ein Algorithmus für das Heron-Verfahren vorgestellt werden.

Heron(x):=block([y], y:x, while (abs(x-y*y)>10^-6) do y:(y+x/y)/2,y)

Der Eingabewert ist "x", zusätzlich wird die Variable "y" für die Befehlsstruktur definiert, danach folgt mittels der "while"-Befehlsstruktur der Algorithmus und die Ausgabe von y, wenn die Bedingung nicht mehr erfüllt ist.

Aufgaben Bearbeiten

Newton Bearbeiten

Erstellen Sie eine Funktion, die das Newton-Verfahren für eine (z.B. vorher global definierte Funktion) durchführt.
Hinweis: Verwenden Sie den Block-Befehl und erzeugen Sie eine Funktion der "newton(Anfangswert):= (Befehl1, Befehl2, ......, Befehl n)".
Die Iterationsvorschrift lautet  .

Monte Carlo Bearbeiten

Erstellen Sie eine Funktion "montecarlo(n)".
Diese soll über die Monte Carlo Methode (siehe Tabellenkalkulation) anhand von   Zufallspunkten   eine Näherung für   berechnen.

Euklidische Algorithmus Bearbeiten

Implementieren Sie den Euklidischen Algorithmus in Maxima.


Literatur/Quellennachweise Bearbeiten


Siehe auch Bearbeiten

Seiteninformation Bearbeiten

Diese Lernresource können Sie als Wiki2Reveal-Foliensatz darstellen.

Wiki2Reveal Bearbeiten

Dieser Wiki2Reveal Foliensatz wurde für den Lerneinheit Kurs:PC-Praktikum' erstellt der Link für die Wiki2Reveal-Folien wurde mit dem Wiki2Reveal-Linkgenerator erstellt.