Kurs:PC-Praktikum/Maxima
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
BearbeitenDa 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
BearbeitenEs 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
BearbeitenDurch 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
BearbeitenMatrizen 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
BearbeitenMatrizenrechnung
BearbeitenGegeben seien die Matrizen , und :
Bestimmen Sie , , und .
Woran erkennen Sie, welche Multiplikation gemeint ist?
Stochastische Matrix
BearbeitenBetrachten 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
BearbeitenEs 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
BearbeitenIm 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
Bearbeitensolve([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
BearbeitenDie 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
BearbeitenLineare Gleichungssysteme
BearbeitenLösen Sie die linearen Gleichungssysteme.
Schnittpunkte von Funktionen
BearbeitenBetrachten Sie die Funktionen und und bestimmen Sie deren Schnittpunkte mittels verschiedener Maxima-Funktionen.
Nullstellen
BearbeitenDer 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
BearbeitenNullstellen
BearbeitenBestimmen Sie alle Nullstellen der Funktion auf unterschiedliche Arten.
Beispiel-Funktion
BearbeitenDie 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
BearbeitenDer 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
BearbeitenSummen und Produkte
BearbeitenBestimmen Sie die nachfolgenden Ausdrücke:
Folgen
BearbeitenErzeugen Sie eine Liste mit den Folgegliedern der Folge
und bestimmen Sie das Produkt von .
Umformungen und Vereinfachen
BearbeitenGrundsä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
BearbeitenVereinfachen
BearbeitenVereinfachen Sie den Term
Faktorisieren
BearbeitenFaktorisieren Sie den Ausdruck
Plotten I
BearbeitenFü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
BearbeitenFü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
BearbeitenDas (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
BearbeitenFü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
BearbeitenPlotten und Differenzieren I
BearbeitenPlotten Sie die Funktion
und bilden Sie die ersten beiden Ableitungen.
Plotten und Differenzieren II
BearbeitenPlotten Sie die Funktion
und bestimmen Sie den Gradienten.
Integration
BearbeitenBestimmen Sie die Stammfunktion von und das Integral
Wahrscheinlichkeitsdichte
BearbeitenZeigen Sie, dass
- eine Wahrscheinlichkeitsdichte ist.
Bestimmen Sie den Erwartungswert sowie die Wahrscheinlichkeit .
Äquivalenzumformungen
BearbeitenAuch Ä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
BearbeitenDer 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
BearbeitenEine 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
BearbeitenEine Sequenz ist eine Hintereinanderausführung von Befehlen, wobei diese durch runde Klammern eingeschlossen sind.
If - then - else I
BearbeitenAnalog 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
BearbeitenWichtig 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
BearbeitenIf-Befehl
BearbeitenErstellen 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
BearbeitenFor-Schleife II
BearbeitenBei 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
Bearbeitenfor-Schleife
BearbeitenErstellen 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
BearbeitenWhile-Schleife II
BearbeitenEine 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
Bearbeitenwhile-Schleife
BearbeitenErstellen 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
BearbeitenUm 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
BearbeitenNewton
BearbeitenErstellen 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)". Verwenden Sie zum definieren der Ableitung den "define"-Befehl der Form define(Name des zu definierenden Objektes,Definition/Bezug).
Die Iterationsvorschrift lautet .
Monte Carlo
BearbeitenErstellen 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
BearbeitenImplementieren Sie den Euklidischen Algorithmus in Maxima.
Literatur/Quellennachweise
Bearbeiten
Siehe auch
BearbeitenSeiteninformation
BearbeitenDiese Lernresource können Sie als Wiki2Reveal-Foliensatz darstellen.
Wiki2Reveal
BearbeitenDieser Wiki2Reveal Foliensatz wurde für den Lerneinheit Kurs:PC-Praktikum' erstellt der Link für die Wiki2Reveal-Folien wurde mit dem Wiki2Reveal-Linkgenerator erstellt.
- Die Seite wurde als Dokumententyp PanDocElectron-SLIDE erstellt.
- Link zur Quelle in Wikiversity: https://de.wikiversity.org/wiki/Kurs:PC-Praktikum/Maxima
- siehe auch weitere Informationen zu Wiki2Reveal und unter Wiki2Reveal-Linkgenerator.