10.11.2013 Aufrufe

Einführung in Maple: 1. Arbeitsblatt

Einführung in Maple: 1. Arbeitsblatt

Einführung in Maple: 1. Arbeitsblatt

MEHR ANZEIGEN
WENIGER ANZEIGEN

Verwandeln Sie Ihre PDFs in ePaper und steigern Sie Ihre Umsätze!

Nutzen Sie SEO-optimierte ePaper, starke Backlinks und multimediale Inhalte, um Ihre Produkte professionell zu präsentieren und Ihre Reichweite signifikant zu maximieren.

Priv. Doz. Dr. Bernhard Schmidt 22.4.2004<br />

http://www.math.uni-augsburg.de/˜schmidtb<br />

<strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>Maple</strong>: <strong>1.</strong> <strong>Arbeitsblatt</strong><br />

Nach dem Start von <strong>Maple</strong> bef<strong>in</strong>den Sie sich <strong>in</strong> e<strong>in</strong>em <strong>Maple</strong>-<strong>Arbeitsblatt</strong> (worksheet). Innerhalb<br />

des <strong>Arbeitsblatt</strong>s reagiert <strong>Maple</strong> auf die E<strong>in</strong>gabe von Befehlen mit e<strong>in</strong>er Ausgabe.<br />

E<strong>in</strong>gaben und Ausgaben von <strong>Maple</strong> s<strong>in</strong>d hier immer im Fettdruck geschrieben. Wichtige<br />

Punkte:<br />

• <strong>Maple</strong>-Befehle müssen immer mit e<strong>in</strong>em Semikolon oder e<strong>in</strong>em Doppelpunkt abgeschlossen<br />

werden.<br />

• Dabei unterdrückt e<strong>in</strong> Doppelpunkt die Ausgabe des Ergebnisses.<br />

• <strong>Maple</strong> unterscheidet zwischen Kle<strong>in</strong>- und Großschreibung.<br />

• Nur runde Klammern s<strong>in</strong>d Klammern im mathematischen S<strong>in</strong>n. Geschweifte Klammern<br />

umschlie¨sen Mengen, eckige Klammern umschließen Listen.<br />

• <strong>Maple</strong>-Variablen brauchen nicht deklariert zu werden.<br />

• E<strong>in</strong>e Zuweisung erfolgt mit :=, nicht e<strong>in</strong>fach mit =. Richtung wäre z.B. pi:=3.14;,<br />

falsch dagegen pi=3.14.<br />

• Kommazahlen werden wie im Englischen mit e<strong>in</strong>em Dezimalpunkt geschrieben, z.B.<br />

3.1415926<br />

• Man sollte von vornehere<strong>in</strong> allen Zwischenergebnissen durch Zuweisungen Namen<br />

geben, um später leicht auf sie zugreifen zu können.<br />

1


1 Arithmetische Operationen, mathematische Funktionen<br />

Operation<br />

Befehlsbeispiel<br />

Addition 5+444;<br />

Subtraktion 324-234;<br />

Multiplikation 234*2432;<br />

Division 234324/3;<br />

Potenzierung 2ˆ23434;<br />

Divisionsrest 33 mod 13;<br />

Fakultät 10!;<br />

Kreiszahl π<br />

Pi;<br />

Dezimaldarstellung<br />

evalf(Pi);<br />

Exponetialfunktion e x<br />

exp(10);<br />

Eulersche Zahl<br />

exp(1);<br />

Natürlicher Logarithmus<br />

log(23);<br />

S<strong>in</strong>us<br />

s<strong>in</strong>(Pi/2);<br />

Mehrgliedrige Summe<br />

sum(i,i=<strong>1.</strong>.10);<br />

Mehrgliedriges Produkt<br />

product(1+1/x, x=<strong>1.</strong>.10);<br />

Runden zur nächsten ganzen Zahl round(2.6);<br />

Zuweisungen<br />

A:=200034; B:=evalf(s<strong>in</strong>(10));<br />

Aufgabe <strong>1.</strong>1 a) Berechnen Sie die Dezimaldarstellung von<br />

π 8 + π 2 + 3π<br />

e 4 + 1<br />

(e = Eulersche Zahl). Achtung: E<strong>in</strong>e Multiplikation erfordert e<strong>in</strong>en * (z.B. 3*Pi). Runden<br />

Sie dann zur näcsten ganzen Zahl z und berechen Sie z 10 modulo 13.<br />

Notwendige Befehle: exp, evalf, round, mod.<br />

b) Berechnen Sie die Dezimaldarstellung von<br />

für n = 10000.<br />

2 Die Hilfefunktion<br />

log n −<br />

<strong>Maple</strong> verfügt über e<strong>in</strong>e hervorragende Hilfefunktion. Nach E<strong>in</strong>gabe von ?B; wird e<strong>in</strong>e<br />

ausführliche Beschreibung des Befehls B angezeigt und auf weitere verwandte Befehle<br />

verwiesen. Die Hilfefunktion ist so gut, dass man durchaus große Teile von <strong>Maple</strong> alle<strong>in</strong><br />

mit ihrer Hilfe erlernen kann. Wichtig:<br />

• Die Beispiele am Ende der Hilfe-Anzeige s<strong>in</strong>d meist am hilfreichsten.<br />

Befehl<br />

?matrix;<br />

???matrix;<br />

n∑<br />

i=1<br />

Kommentar<br />

Hilfe zu Matrizen wird angezeigt<br />

Beispiele zu Matrizen werden angezeigt<br />

Aufgabe 2.1 F<strong>in</strong>den Sie durch ?randmatrix; heraus, wie man e<strong>in</strong>e Zufallsmatrix erzeugt.<br />

Erzeugen Sie als Beispiel e<strong>in</strong>e 30x30-Zufallsmatrix.<br />

2<br />

1<br />

i


3 Die <strong>Maple</strong>-Pakete<br />

<strong>Maple</strong>-Pakete s<strong>in</strong>d Pakete von nützlichen Befehlen jeweils zu e<strong>in</strong>em bestimmten mathematischen<br />

Gebiet.<br />

Wichtig: Bevor man e<strong>in</strong>en Befehl (z.B. matrix) e<strong>in</strong>es Pakets (hier l<strong>in</strong>alg) verwenden<br />

kann, muss das Paket geladen werden (hier mit with(l<strong>in</strong>alg);).<br />

Alle verfügbaren Pakete kann man sich mit ?package; anzeigen lassen. Da man zu den<br />

e<strong>in</strong>zelnen Paketen durch die Hilfefunktion sehr gute Informationen erhält, kann man sich<br />

so <strong>in</strong>teraktiv schnell e<strong>in</strong>en Überblick verschaffen.<br />

Überblick e<strong>in</strong>iger Pakete<br />

• l<strong>in</strong>alg Rechnen mit Matrizen und Vektoren, von der Matrizenmultiplikation bis zu<br />

Eigenwertbestimmung und Normalformen<br />

• numtheory Befehle für elementare Zahlentheorie, z.B. Primzahltest, Bestimmung<br />

der n-ten Primzahl, Faktorisierung ganzer Zahlen.<br />

• plots Hilfsmittel zum Erzeugen von zwei- und dreidimensionalen Graphiken.<br />

• stats Das Statistik-Paket.<br />

Aufgabe 3.1 F<strong>in</strong>den Sie mit Hilfe von ?l<strong>in</strong>alg; den Befehl zum Lösen l<strong>in</strong>earer Gleichungssysteme<br />

und lösen Sie<br />

x 1 + x 2 + x 3 = 5<br />

2x 1 − x 2 − x 3 = 10<br />

5x 1 − 3x 2 + x 3 = 0<br />

H<strong>in</strong>weis: Dazu muss man die Koeffizienten der l<strong>in</strong>ken Seiten mit<br />

A:=matrix([[1,1,1],[2,-1,-1],[5,-3,1]]); <strong>in</strong> e<strong>in</strong>e Matrix und die rechten Seiten mit<br />

b:=vector([5,10,0]); <strong>in</strong> e<strong>in</strong>en Vektor schreiben.<br />

4 Ausdrücke, Typen und Funktionen<br />

E<strong>in</strong> Ausdruck ist <strong>in</strong> <strong>Maple</strong> e<strong>in</strong>e beliebige Folge von Zeichen, die die Syntaxregeln nicht<br />

verletzt. Zum Beispiel s<strong>in</strong>d s<strong>in</strong>(x) und jdfksk234 gültige Ausdrücke, aber nicht aˆˆx, da<br />

ˆˆ e<strong>in</strong> Syntaxfehler ist.<br />

Jeder Ausdruck X besitzt <strong>in</strong> <strong>Maple</strong> e<strong>in</strong>en Typ, den man sich mit whattype(X); anzeigen<br />

lassen kann. Zum Beispiel liefert a:=10: whattype(a); die Ausgabe <strong>in</strong>teger. Mit<br />

type(X,T); kann man prüfen, ob der Ausdruck X vom Typ T ist. E<strong>in</strong> Ausdruck kann<br />

durchaus mehrere Typen haben. Zum Beispiel ist der Ausdruck 10 sowohl vom Typ <strong>in</strong>teger<br />

als auch vom Typ polynom. E<strong>in</strong> Ausdruck X kann (falls erlaubt) mit Hilfe des<br />

Befehls convert(X,T); <strong>in</strong> e<strong>in</strong>en Ausdruck vom Typ T umgewandelt werden. Mit op(X);<br />

erhält man die “Operanden” des Ausdrucks X. Mit subs(x=t,A); kamm man die Variable<br />

x im Ausdruck A durch t ersetzen.<br />

Wichtig: Machen Sie sich mit den unentbehrlichen Befehlen op, subs, map, convert<br />

vertraut. Beispiele s<strong>in</strong>d unten zu f<strong>in</strong>den.<br />

3


Aufgabe<br />

Bestimmung des Typs<br />

Test, ob Ausdruck vom Typ rational<br />

Umwandlung <strong>in</strong> Typ float<br />

Operanden bestimmen<br />

Anzahl der Operanden<br />

S<strong>in</strong>usfunktion auf E<strong>in</strong>träge e<strong>in</strong>er Liste anwenden<br />

Variablen-Substitution <strong>in</strong> Ausdruck<br />

Erzeugung e<strong>in</strong>er Funktion<br />

Befehlsbeispiel<br />

whattype(<strong>1.</strong>44);<br />

type(5433,rational);<br />

covert(1/2,float);<br />

op([1,2,3]);<br />

nops([1,2,3]);<br />

map(s<strong>in</strong>,[0.1,<strong>1.</strong>4]);<br />

subs(x=2,s<strong>in</strong>(x)ˆ2);<br />

f:=x ->x*s<strong>in</strong>(x);<br />

<strong>Maple</strong>-Typen Bedeutung<br />

<strong>in</strong>teger ganze Zahl<br />

float<br />

Kommazahl<br />

rational Bruch<br />

complex komplexe Zahl (imag<strong>in</strong>äre E<strong>in</strong>heit ist I)<br />

exprseq Aufzählung von Ausdrücken, Trennung durch Kommas<br />

list<br />

Auszählung von Ausdrücken <strong>in</strong> eckigen Klammern<br />

set<br />

Auszählung von Ausdrücken <strong>in</strong> geschweiften Klammern<br />

Aufgabe 4.1 a) Geben Sie Z:=<strong>1.</strong>4; e<strong>in</strong>. Bestimmen Sie mit whattype den Typ von Z.<br />

Wandeln Sie Z mit convert <strong>in</strong> e<strong>in</strong>e Zahl Z1 vom Typ rational um.<br />

b) Erzeugen Sie mit f:=x ->convert(x,float); e<strong>in</strong>e Funktion und wenden Sie sie auf Z1<br />

an.<br />

Aufgabe 4.2 a) Geben Sie den Befehl L:=[<strong>1.</strong>3, 3.44, 0.34, 5.0, 30.03]; e<strong>in</strong>. Das erzeugt<br />

e<strong>in</strong>e Liste L, die fünf Kommazahlen enthält.<br />

b) Verwandeln Sie die E<strong>in</strong>träge von L mit g:=x ->convert(x,rational); L1:=map(g,L);<br />

<strong>in</strong> Brüche.<br />

c) Überprüfen Sie mit type(L1[2],rational);, ob der zweite E<strong>in</strong>trag von L1 tatsächlich<br />

vom Typ rational ist.<br />

d) Wenden Sie mit Hilfe von map die S<strong>in</strong>usfunktion auf alle E<strong>in</strong>träge von L an.<br />

e) Bestimmen Sie mit nops die Anzahl der E<strong>in</strong>träge von L und L<strong>1.</strong><br />

5 Die Typen exprseq, list, set<br />

Folgen, Listen und Mengen s<strong>in</strong>d grundlegend für fast alle <strong>Maple</strong>-Anwendungen. E<strong>in</strong>e<br />

durch Kommas getrennte Folge von Ausdrücken hat <strong>in</strong> <strong>Maple</strong> den Typ exprseq (für<br />

expression sequence). Längere Folgen von Ausdrücken kann mit mit seq erzeugen, z.B.<br />

ergibt S:=seq(aˆ2, a=<strong>1.</strong>.100); die Folge der ersten 100 Quadratzahlen. Eckige bzw.<br />

geschweifte Klammern um e<strong>in</strong>e exprseq machen sie zu e<strong>in</strong>er list bzw. set.<br />

Befehl<br />

s:=4,5,6,a,b,c;<br />

whattype(s);<br />

L:=[s];<br />

whattype(s);<br />

m:=op(L);<br />

M:={m};<br />

whattype(M);<br />

Erläuterung<br />

Erzeugung e<strong>in</strong>er Folge<br />

Typbestimmung (ergibt exprseq)<br />

Umwandlung <strong>in</strong> e<strong>in</strong>e Liste<br />

Typbestimmung (ergibt list)<br />

Entfernung der eckigen Klammern<br />

Umwandlung <strong>in</strong> e<strong>in</strong>e Menge<br />

Typbestimmung (ergibt set)<br />

4


Auf das i-te Element e<strong>in</strong>er Folge oder Liste L kann man mit L[i] zugreifen. E<strong>in</strong>e set<br />

ist e<strong>in</strong>e Menge von ungeordneten Elementen, also e<strong>in</strong>e Menge im mathematischen S<strong>in</strong>n.<br />

Mengen kann man schneiden, vere<strong>in</strong>igen und vone<strong>in</strong>ander abziehen:<br />

Befehl Erläuterung<br />

s:=1,2,3,a,b,c; Erzeugung e<strong>in</strong>er Folge<br />

s[5]; Auswertung des 5. Elements der Folge (ergibt b)<br />

m:={s}; Umwandlung <strong>in</strong> e<strong>in</strong>e Menge<br />

n:={1,2,3,4}; Erzeugung e<strong>in</strong>er Menge<br />

m <strong>in</strong>tersect n; Schnittmenge<br />

m union n; Vere<strong>in</strong>igungsmenge<br />

m m<strong>in</strong>us n; Differenzmenge<br />

Aufgabe 5.1 a) Erzeugen Sie mit Hilfe von seq e<strong>in</strong>e Folge, die die ersten 100 Primzahlen<br />

enthält (notwendiger Befehl: ithprime). Geben Sie dieser Folge den Namen PrimFolge.<br />

b) Wandelen Sie PrimFolge mit PrimList:=[PrimFolge]; <strong>in</strong> e<strong>in</strong>e Liste um. Probieren<br />

Sie aus, was der Befehl op(PrimList); liefert. Wandeln Sie dann PrimList mit Hilfe von<br />

op und geschweiften Klammern <strong>in</strong> e<strong>in</strong>e Menge PrimSet um. Überprüfen Sie die Typen<br />

von PrimList und PrimSet mit whattype.<br />

c) Erzeugen Sie e<strong>in</strong>e Menge M, die die zweite, vierte,...,hundertste Primzahl enthält.<br />

Lassen Sie sich die Differenzmenge von PrimSet und M anzeigen.<br />

6 Die Befehle vector und matrix<br />

Die Befehle vector und matrix gehören zum Paket l<strong>in</strong>alg. Man muss dieses Paket also<br />

mit with(l<strong>in</strong>alg): laden, bevor man mit diesen Befehlen arbeitet (oder man benutzt die<br />

lange Befehlsform a la l<strong>in</strong>alg[vector], was aber umständlich ist).<br />

6.1 Initialisierung von Vektoren und Matrizen<br />

Befehl<br />

v:=vector([1,2,3]);<br />

v[2];<br />

v[1]:=100;<br />

M:=matrix([[1,2,3],[4,5,6]]);<br />

M:=matrix(2,3,[1,2,3,4,5,6]);<br />

M[1,1]:=234;<br />

Erläuterung<br />

Erzeugen e<strong>in</strong>es Vektors<br />

Auswerten des 2. E<strong>in</strong>trags<br />

Setzen des <strong>1.</strong> E<strong>in</strong>trags<br />

Erzeugung e<strong>in</strong>er 2x3-Matrix<br />

Erzeugt die gleiche Matrix<br />

Setzen des (1,1)-E<strong>in</strong>trags<br />

Aufgabe 6.1 Initialisieren Sie e<strong>in</strong>e 10x10-Matrix M = (m ij ), wobei m ij = ij 2 .<br />

H<strong>in</strong>weise: Laden Sie zunächst das Paket l<strong>in</strong>alg. Deklarieren Sie die Matrix mit M:=matrix(10,10);<br />

Weisen Sie die E<strong>in</strong>träge mit e<strong>in</strong>er doppelten for-Schleife zu:<br />

for i from 1 to 10 do<br />

for j from 1 to 10 do<br />

M[i,j]:=i*jˆ2: od: od:<br />

Das Ergebnis kann man mit evalm(M); überprüfen.<br />

5


6.2 Rechnen mit Matrizen und Vektoren<br />

Zunächst e<strong>in</strong> Experiment, das zeigt, wie es nicht geht:<br />

Befehl<br />

Kommentar<br />

v:=vector([1,1]); w:=vector([2,2]); Erzeugung von Vektoren<br />

v; Versuch e<strong>in</strong>er Auswertung, schlägt fehl<br />

v+w;<br />

Versuch e<strong>in</strong>er Addition, schlägt fehl<br />

Vektoren und Matrizen streuben sich gegen Auswertungen, und daher muss man den speziellen<br />

Auswertungsbefehl evalm e<strong>in</strong>setzen.<br />

Wichtig: Der Operator für Matrizenmultiplikation und Matrix-Vektor-Multiplikation ist<br />

&* und nicht e<strong>in</strong>fach *.<br />

Befehl<br />

M:=matrix([[1,2],[2,3]]);<br />

N:=matrix([[1,2],[0,0]]);<br />

evalm(M);<br />

A:=evalm(M+N);<br />

B:=evalm(3*M);<br />

C:=M*N;<br />

C:=evalm(M&*N);<br />

D:=evalm(Mˆ5);<br />

v:=vector([1,9]);<br />

w:=evalm(M&*v);<br />

E:=transpose(M);<br />

F:=<strong>in</strong>verse(M);<br />

Erläuterung<br />

Erzeugen von Matrizen<br />

Auswerten e<strong>in</strong>er Matrix<br />

Summe von Matrizen<br />

Matrix mal Skalar<br />

Falsch!<br />

Matrizenprodukt<br />

Matrizenpotenzierung<br />

Erzeugung e<strong>in</strong>es Vektors<br />

Matrix-Vektor-Produkt<br />

transponierte Matrix<br />

Inverse<br />

Aufgabe 6.2 Die Cholesky-Faktorisierung e<strong>in</strong>er quadratischen Matrix A ist e<strong>in</strong>e Darstellung<br />

A = RR t , wobei R e<strong>in</strong>e untere Dreiecksmatrix ist.<br />

a) Erzeugen Sie die Matrix<br />

⎛<br />

4 −6 68<br />

⎞<br />

M := ⎝−6 8658 −1032⎠<br />

68 −1032 1265<br />

b) Berechnen Sie mit R:=cholesky(M); die Cholesky-Faktorisierung von M.<br />

c) Überprüfen Sie, ob tatsächlich RR t = M gilt.<br />

6


Priv. Doz. Dr. Bernhard Schmidt 29.4.2004<br />

http://www.math.uni-augsburg.de/˜schmidtb<br />

<strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>Maple</strong>: 2. <strong>Arbeitsblatt</strong><br />

Die <strong>Maple</strong>-Programmiersprache und<br />

Prozeduren<br />

1 Kontrollstrukturen<br />

Die wichtigsten Kontrollstrukturen <strong>in</strong> <strong>Maple</strong> s<strong>in</strong>d for- und while-Schleifen sowie if-else-<br />

Verzweigungen.<br />

<strong>1.</strong>1 for-Schleifen<br />

Befehlsbeispiel<br />

for i from 1 to 10 do<br />

pr<strong>in</strong>t(iˆ2);<br />

od;<br />

for i from 1 to 10 by 2 do<br />

pr<strong>in</strong>t(iˆ2);<br />

od;<br />

for i from 1 to 10<br />

while iˆ3 < 500 do<br />

pr<strong>in</strong>t(iˆ2);<br />

od;<br />

M:={1,5,8,10,12};<br />

for x <strong>in</strong> M do<br />

pr<strong>in</strong>t(2*x-4);<br />

od;<br />

Erläuterung<br />

Die Variable i wird von 1 bis 10 hochgezählt<br />

und für jeden Wert wird das Quadrat ausgegeben.<br />

Wichtig: Die Schleifenanweisungen müssen durch<br />

do ... od; e<strong>in</strong>geschlossen werden.<br />

Wie oben, wegen by 2 wird jetzt jedoch <strong>in</strong> Zweierstatt<br />

<strong>in</strong> E<strong>in</strong>erschritten hochgezählt.<br />

Wie oben, allerd<strong>in</strong>gs mit e<strong>in</strong>er Abbruchbed<strong>in</strong>gung.<br />

Die Schleife wird vollständig abgebrochen, sobald<br />

die Bed<strong>in</strong>gung nicht mehr erfüllt ist.<br />

Die for-Schleife iteriert hier über e<strong>in</strong>e Menge. Für<br />

jedes Element x der Menge wird 2x-4 ausgegeben.<br />

Aufgabe <strong>1.</strong>1 a) Berechnen Sie mit e<strong>in</strong>er for-Schleife die Dezimaldarstellung von ∫ 1<br />

0 s<strong>in</strong>(x)i dx<br />

für i = 1, 2, ..., 10.<br />

Notwendige Befehle: <strong>in</strong>t, evalf. Mit ?<strong>in</strong>t; können Sie die Hilfe zur Integrals-Funktion<br />

aufrufen.<br />

b) Schreiben Sie e<strong>in</strong>e for-Schleife, die für i = 1, ..., 10 die Zahl 2 2i + 1 ausgibt und sofort<br />

abbricht, falls diese Zahl ke<strong>in</strong>e Primzahl ist.<br />

Notwendige Befehle: while, isprime.<br />

1


c) Schreiben Sie e<strong>in</strong>e for-Schleife unter Verwendung von by, die jede 20. Primzahl < 1000<br />

ausggibt.<br />

Notwendige Befehle: while, ithprime.<br />

d) Erzeugen Sie e<strong>in</strong>e Menge M, die 10 ganzzahlige Zufallszahlen aus dem Intervall [2, 101]<br />

enthält. Testen Sie mit e<strong>in</strong>er for-Schleife über M, welche Elemente von M Primzahlen<br />

s<strong>in</strong>d.<br />

Notwendige Befehle: seq, rand(2..101)()<br />

<strong>1.</strong>2 while-Schleifen<br />

while-Schleifen führen Anweisungen aus bis e<strong>in</strong>e Abbruchbed<strong>in</strong>gung erfüllt ist. Innerhalb<br />

der Anweisungen muss man sicherstellen, dass die Abbruchbed<strong>in</strong>gung wirklich irgendwann<br />

erfüllt wird, ansonsten hat man e<strong>in</strong>e Endlosschleife.<br />

Befehlsbeispiel<br />

i:=10;<br />

while i< 20 do<br />

i:=i+2;<br />

pr<strong>in</strong>t(i);<br />

od;<br />

Erläuterung<br />

i wird solange um 2 hochgezählt und ausgegeben<br />

bis der Wert 20 erreicht ist.<br />

Aufgabe <strong>1.</strong>2 Schreiben Sie e<strong>in</strong>e while-Schleife, die i beg<strong>in</strong>nend mit 1 <strong>in</strong> jedem Schritt<br />

um e<strong>in</strong>s hochzählt und abbricht, falls 7*i+1 e<strong>in</strong>e Primzahl ist.<br />

<strong>1.</strong>3 if-else-Verzweigungen<br />

if-else-Verzweigungen dienen dazu, den Programmverlauf durch Bed<strong>in</strong>gungen zu steuern.<br />

Befehlsbeispiel<br />

p:=ithprime(100);<br />

if p< 1000 then<br />

pr<strong>in</strong>t(”p ist kle<strong>in</strong>”);<br />

fi;<br />

p:=ithprime(100);<br />

if p< 1000 then<br />

pr<strong>in</strong>t(”p ist kle<strong>in</strong>”);<br />

else<br />

pr<strong>in</strong>t(”p ist gross”);<br />

fi;<br />

Erläuterung<br />

Es wird getest, ob die hundertste Primzahl kle<strong>in</strong>er<br />

als 1000 ist und e<strong>in</strong>e Ausgabe-Anweisung wird genau<br />

dann ausgeführt, wenn dies der Fall ist. Die<br />

if-Verzweigung wird durch if ... then ... fi; umschlossen,<br />

wobei ke<strong>in</strong> Teil weggelassen werden darf.<br />

Wie oben, nur mit else-Alternative. Die Anweisung<br />

nach else wird genau dann ausgeführt, wenn<br />

die if-Bed<strong>in</strong>gung nicht erfüllt ist.<br />

Aufgabe <strong>1.</strong>3 Schreiben Sie e<strong>in</strong>e for-Schleife über i=990,991,...,1010, die i ausgibt,<br />

falls i e<strong>in</strong>e Primzahl ist und andernfalls die Teilermenge von i ausgibt.<br />

Notwendige Befehle: isprime, numtheory[divisors]<br />

2


2 Logische Ausdrücke<br />

In while- und if-Bed<strong>in</strong>gungen werden logische Ausdrücke getestet. Logische Ausdrücke<br />

erzeugt man mit Funktionen oder Operatoren mit Rückgabetyp bool. Beispiele:<br />

isprime (Funktion), =, < , >, < =, >= (Vergleichsoperatoren)<br />

Verknüpfung logischer Ausdrücke<br />

Die Verknüpfung logischer Ausdrücke erfolgt mit den Operatoren and, or, not sowie<br />

runden Klammern zum Zusammenfassen. Beispiel:<br />

a:5; b:=6; c:=7;<br />

if ((a< b) and (b< c)) or (not isprime(a)) then<br />

pr<strong>in</strong>t(a,b,c);<br />

fi;<br />

Aufgabe 2.1 Schreiben Sie e<strong>in</strong>e for-Schleife über i=1,2,...,100, die i genau dann ausgibt,<br />

wenn<br />

(a) i ke<strong>in</strong>e Primzahl oder iˆ2 größer als 500 ist und<br />

(b) i mod 20 gleich 3, 5 oder 18 ist.<br />

3 Prozeduren<br />

Für wiederkehrende Aufgaben kann man <strong>in</strong> <strong>Maple</strong> Prozeduren schreiben. Bei Bedarf kann<br />

man Prozeduren als Textdateien speichern und <strong>in</strong> anderen <strong>Maple</strong>-Sitzungen wiederverwenden.<br />

E<strong>in</strong>e Prozedur P wird erzeugt <strong>in</strong> der Form<br />

Erläuterungen:<br />

P:=proc(Parameter) Anweisungen end;<br />

• Die Parameter bestehen aus e<strong>in</strong>er Folge von Variablen, deren Werte beim Aufruf<br />

an die Prozedur übergeben werden müssen. Prozeduren mit ke<strong>in</strong>en Parametern s<strong>in</strong>d<br />

erlaubt.<br />

• Die Anweisungen s<strong>in</strong>d e<strong>in</strong>e beliebige Folge von <strong>Maple</strong>-Befehlen, meist unter Verwendung<br />

von Kontrollstrukturen.<br />

Befehlsbeispiel<br />

P:=proc(a,b)<br />

return a+b;<br />

end;<br />

P(5,20);<br />

Erläuterung<br />

Prozedur mit zwei Parametern, die die Summe der<br />

Parameter zurückgibt.<br />

Aufruf der Prozedur. Für a wird der Wert 5 und<br />

für b wird der Wert 20 übergeben. Rückgabe ist<br />

25.<br />

3


Aufgabe 3.1 Schreiben Sie e<strong>in</strong>e Prozedur Concat:=proc(L1,L2), die zwei Listen L1<br />

und L1 ane<strong>in</strong>anderhängt. Bei A:=[1,2]: B:=[3,4]: soll Concat(A,B); zum Beispiel die<br />

Ausgabe [1,2,3,4] ergeben.<br />

Notwendige Befehle: proc...end; op. Zwei Folgen F1, F2 kann man e<strong>in</strong>fach mit F1,F2;<br />

ane<strong>in</strong>anderhängen.<br />

Aufgabe 3.2 Schreiben Sie e<strong>in</strong>e Prozedur Zufall:=proc(n), die n Zufallszahlen im Bereich<br />

0,1,...,100 erzeugt und deren Mittelwert und Varianz berechnet. Die Rückgabe soll<br />

die Liste [M,V] se<strong>in</strong>, wobei M und V als Kommazahlen ausgegeben werden sollen.<br />

Notwendige Befehle:<br />

rand(0..100)(), seq, stats[describe,mean], stats[describe,variance]<br />

Aufgabe 3.3 Schreiben Sie e<strong>in</strong>e Prozedur SumAll:=proc(A), die die Summe aller E<strong>in</strong>träge<br />

e<strong>in</strong>er Matrix A zurückgibt.<br />

Notwendige Befehle: with(l<strong>in</strong>alg); rowdim, coldim, sum<br />

Aufgabe 3.4 Bestimmung der Fäche des E<strong>in</strong>heitskreises ohne Kenntnis von π<br />

Das <strong>in</strong> den E<strong>in</strong>heitskreis e<strong>in</strong>geschriebene regelmäßige n-Eck hat die Fläche<br />

Es gilt s<strong>in</strong>(π/2) = 1 und<br />

F (n) = (n/2) s<strong>in</strong>(2π/n).<br />

für 0 ≤ x ≤ π/2 (W<strong>in</strong>kelhalbierungsformel).<br />

s<strong>in</strong>(x/2) =<br />

√<br />

1<br />

2 (1 − √ 1 − s<strong>in</strong>(x) 2 )<br />

a) Berechnen Sie <strong>in</strong> e<strong>in</strong>er for-Schleife die Dezimaldarstellungen von p i := s<strong>in</strong>(π/2 i ) für<br />

i = 1, ..., 20.<br />

H<strong>in</strong>weis: Es gilt p 1 = s<strong>in</strong>(π/2) = <strong>1.</strong> Den Wert von p 2 erhält man als Ausdruck <strong>in</strong> p 1 mit<br />

Hilfe der W<strong>in</strong>kelhalbierungsformel. Allgeme<strong>in</strong> erhält man p i+1 als Ausdruck <strong>in</strong> p i mit Hilfe<br />

dieser Formel.<br />

b) Erhöhen Sie die Rechengenauigkeit mit Digits:=20; und wiederholen Sie die Berechung<br />

aus Teil a.<br />

c) Das <strong>in</strong> den E<strong>in</strong>heitskreis e<strong>in</strong>geschriebene regelmäßige 2 i -Eck hat die Fläche F (2 i ) =<br />

2 i−1 p i−1 . Schreiben Sie e<strong>in</strong>e Prozedur Flaeche:=proc(i), die die Fläche F (2 i ) berechnet.<br />

d) F (2 i ) konvergiert gegen π für i → ∞. Überprüfen Sie dies durch Berechung von F (2 i )<br />

für i = 3, ..., 20.<br />

4


Priv. Doz. Dr. Bernhard Schmidt 6.5.2004<br />

http://www.math.uni-augsburg.de/˜schmidtb<br />

<strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>Maple</strong>: 3. <strong>Arbeitsblatt</strong><br />

1 Lösung von Gleichungssystemen<br />

Der Grundbefehl zur Lösung von Gleichungssystemen ist solve. Syntax:<br />

solve(Gln, Var);<br />

Dabei ist Gln e<strong>in</strong>e Menge von Gleichungen, und Var ist e<strong>in</strong>e Menge von Variablen,<br />

nach denen aufgelöst werden soll (optional). Standardardmäßig wird nach allen Variablen<br />

aufgelöst. Die Ausgabe ist e<strong>in</strong>e Folge von Mengen, von denen jede e<strong>in</strong>e Lösung enthält.<br />

Bei E<strong>in</strong>gabe von L:=solve(Gln, Var); kann man auf die i-te Lösung mit L[i] zugreifen.<br />

E<strong>in</strong>e Probe der i-ten Lösung ist mit subs(L[i],Gln); möglich. Beispiele:<br />

Befehl<br />

Gln:= {xˆ2=4};<br />

L:=solve(Gln);<br />

subs(L[1],Gln); subs(L[2],Gln);<br />

solve({x+y=4}, {x});<br />

Kommentar<br />

Def<strong>in</strong>ition der Gleichungen<br />

Lösungen werden berechnet<br />

Probe<br />

Gleichung wird nach x aufgelöst<br />

Es stellt sich sofort die Frage, wie man auf die e<strong>in</strong>zelnen Werte der Lösungen zugreifen<br />

kann, da diese ja zum Beispiel <strong>in</strong> der Form {x=5, y=7, z=10} ausgegeben werden. Das<br />

geht wieder am besten mit dem Befehl subs:<br />

E<strong>in</strong>gabe<br />

Ausgabe<br />

L := solve({x + y = 4, x − y = 2}); L := {x = 3, y = 1}<br />

L1 := subs(L, [x, y]); L1 := [3, 1]<br />

K := solve({xˆ2 = 4}); K := {x = 2}, {x = −2}<br />

K1 := subs(K[1], [x]); K1 := [2]<br />

Oft zeigt <strong>Maple</strong> Lösungen unter Verwendung von RootOf an, so dass diese Lösungen<br />

zunächst unausgewertet bleiben. Die explizite Ausgabe der Lösungen erzw<strong>in</strong>gt man mit<br />

dem Befehl allvalues:<br />

Befehl<br />

Gln:= {xˆ2+y=0, x-2∗y=2};<br />

L:=solve(Gln);<br />

allvalues(L);<br />

Kommentar<br />

Lösungen enthalten RootOf<br />

Explizite Ausgabe<br />

1


Aufgabe <strong>1.</strong>1 Lösen Sie das Gleichungssystem<br />

x 2 + 2y + z = 4<br />

x + y + z = 2<br />

x + y = 0.<br />

Lassen Sie sich mit allvalues die zwei Lösungen explizit ausgeben. Führen Sie e<strong>in</strong>e Probe<br />

der Lösungen durch. Extrahieren Sie die Werte von x,y,z mit dem Befehl subs aus den<br />

e<strong>in</strong>zelnen Lösungen und schreiben Sie diese <strong>in</strong> Listen der Form [x,y,z].<br />

2 Numerisches Lösen von Gleichungssystemen<br />

Mit dem Befehl solve will man <strong>in</strong> der Regel exakte Lösungen erhalten. Für komplizierte<br />

Gleichungssysteme ist das jedoch oft unmöglich und man muss auf numerische Lösungen<br />

zurückgreifen. Dafür steht der Befehl fsolve zur Verfügung. Die Syntax von fsolve ist wie<br />

die von solve, nur dass man noch Optionen hat wie x=0..1 (E<strong>in</strong>schränkung der Variablen<br />

x auf das Intervall [0,1]) oder complex (erzw<strong>in</strong>gt Ausgabe nicht-reller Lösungen).<br />

Beispiele: fsolve(xˆ4+1=0, {x}, complex);<br />

fsolve(tan(x)=0, {x}, x=0..10);<br />

Wichtig: fsolve f<strong>in</strong>det i.a. ke<strong>in</strong>eswegs alle Lösungen, sondern liefert nur irgende<strong>in</strong>e Lösung.<br />

Wenn fsolve ke<strong>in</strong>e Lösung f<strong>in</strong>det, kann man noch nicht sicher se<strong>in</strong>, dass ke<strong>in</strong>e Lösung<br />

existiert. Ob man alle Lösungen gefunden hat, kann man manchmal durch Plotten der<br />

<strong>in</strong>volvierten Funktionen überprüfen.<br />

Aufgabe 2.1 F<strong>in</strong>den Sie mit Hilfe von fsolve und plot alle Nullstellen von s<strong>in</strong> x und<br />

von e cos x − log(2 + s<strong>in</strong> x) im Intervall [0,10].<br />

Aufgabe 2.2 Bestimmen Sie mit fsolve alle (auch komplexe) Nullstellen von f = x 64 +<br />

39x 49 + 20x 20 + 14x 5 + 2304 und bestimmen Sie die Anzahl dieser Nullstellen mit Hilfe<br />

von nops. H<strong>in</strong>weis: nops lässt sich auf Listen anwenden, nicht aber auf Folgen.<br />

3 isolve, msolve, rsolve<br />

Aufgabe 3.1 Informieren Sie sich über die Befehle isolve, msolve, rsolve und lösen<br />

Sie folgende Probleme:<br />

a) Bestimmen Sie sie alle ganzzahligen Lösungen von x 2 + y 2 = t für t = 100, 1000, 10000.<br />

b) Betimmen Sie alle Lösungen mod m von x 2 + y 2 + z 2 = 7 für m = 50, ..., 60.<br />

c) Die Fibonacci-Folge (f i ) ist def<strong>in</strong>iert durch f 1 = 1, f 2 = 1 und f i+1 = f i + f i−1 für<br />

i ≥ 2. F<strong>in</strong>den Sie mit rsolve e<strong>in</strong>e explizite Formel für f i . Berechnen Sie mit Hilfe dieser<br />

Formel f 1000 .<br />

2


4 L<strong>in</strong>eare Gleichungssysteme<br />

Wir betrachten e<strong>in</strong> l<strong>in</strong>eares Gleichungssystem Ax = b, wobei A e<strong>in</strong>e m × n-Matrix und<br />

b ∈ R m ist. Zur Lösung e<strong>in</strong>es solchen Gleichungssystems steht im Paket l<strong>in</strong>alg der Befehl<br />

l<strong>in</strong>solve(A,b) zur Verfügung. Dabei sollte A vom Typ matrix und b vom Typ vector<br />

se<strong>in</strong>. Die Ausgabe ist e<strong>in</strong> e<strong>in</strong> Lösungsvektor oder nichts (NULL), falls ke<strong>in</strong>e Lösung<br />

existiert. Ist die Lösungsmenge e<strong>in</strong> aff<strong>in</strong>er Unterraum mit e<strong>in</strong>er Dimension ≥ 1, so enthält<br />

der Lösungsvektor freie Parameter t i . Beispiel:<br />

Befehl<br />

with(l<strong>in</strong>alg):<br />

A:=matrix(2,2,[1,1,1,-1]); b:=vector([3,5]);<br />

l<strong>in</strong>solve(A,b);<br />

Kommentar<br />

Laden des Pakets l<strong>in</strong>alg<br />

Initialisieren von A und b<br />

Ax=b wird gelöst<br />

Aufgabe 4.1 Lösen Sie Ax = b, wobei A = (A[i, j]) i,j=1,...,10 mit A[i, j] = j i−1 und<br />

b[i] = i 2 , i = 1, ..., 10.<br />

H<strong>in</strong>weis: Initialisieren Sie A mit A:=matrix(10,10) und weisen die Werte A[i,j] mit<br />

Hilfe e<strong>in</strong>er for-Schleife zu.<br />

Aufgabe 4.2<br />

a) Erzeugen Sie mit dem Befehl randmatrix e<strong>in</strong>e 30x30-Zufallsmatrix A und e<strong>in</strong>en Zufallsvektor<br />

b mit 30 Komponenten und lösen Sie Ax = b.<br />

b) Beachten Sie, dass die Lösung <strong>in</strong> a) <strong>in</strong> Form von Brüchen exakt ausgegeben wird.<br />

Vielleicht kann man die Rechenzeit verkürzen, wenn man vor dem Aufruf von l<strong>in</strong>solve<br />

alle E<strong>in</strong>träge von A <strong>in</strong> Kommazahlen umwandelt und <strong>Maple</strong> somit zum Rechnen mit<br />

Kommazahlen zw<strong>in</strong>gt?! Tun Sie das und vergleichen Sie die Rechenzeiten.<br />

Notwendige Befehle: f:= x->convert(x,float); map(f,A); time();<br />

(Aufruf von time(); gibt die bis zu diesem Zeitpunkt verbrauchte CPU-Zeit an)<br />

Zum Lösen e<strong>in</strong>es homogenen l<strong>in</strong>earen Gleichungssystems Ax = 0 ist der Befehl kernel(A);<br />

besser geeignet als l<strong>in</strong>solve. Die Ausgabe von kernel(A); ist e<strong>in</strong>e Basis für den<br />

Kern von A (das ist der Unterraum aller x mit Ax = 0).<br />

Aufgabe 4.3 Bestimmen Sie den Kern der Matrix<br />

⎛<br />

⎞<br />

1 2 −4 2 −1<br />

0 1 −2 1 0<br />

⎜ 3 −5 6 −5 1<br />

⎟<br />

⎝ −2 4 −3 4 −3 ⎠<br />

−5 2 0 2 1<br />

3


5 Determ<strong>in</strong>anten und Eigenwerte<br />

Zur Berechnung von Determ<strong>in</strong>aten steht im Paket l<strong>in</strong>alg der Befehl det zur Verfügung.<br />

Aufgabe 5.1 Determ<strong>in</strong>anten von 40x40-Matrizen mit ganzzahligen E<strong>in</strong>trägen s<strong>in</strong>d für<br />

<strong>Maple</strong> ke<strong>in</strong> Problem. Überprüfen Sie das an e<strong>in</strong>er Zufallsmatrix.<br />

Die Eigenwerte e<strong>in</strong>er quadratischen Matrix A kann man mit dem Befehl eigenvals(A);<br />

berechnen. Hierbei muss man auf die Typen der E<strong>in</strong>träge achten:<br />

• Ist e<strong>in</strong> E<strong>in</strong>trag von A vom Typ float, so müssen alle E<strong>in</strong>träge vom Typ float se<strong>in</strong>.<br />

In diesem Fall werden die Eigenwerte <strong>in</strong> Dezimalnäherung ausgegeben.<br />

• S<strong>in</strong>d alle E<strong>in</strong>träge von A ganze Zahlen, Brüche oder Variablen (der symbolische<br />

Fall), so werden die Eigenwerte exakt berechnet und gegebenenfalls unter Verwendung<br />

von RootOf ausgegeben. Die e<strong>in</strong>zelnen Eigenwerte erhält man dann mit Hilfe<br />

von allvalues.<br />

Aufgabe 5.2<br />

a) Berechnen Sie die Eigenwerte e<strong>in</strong>er 10x10 Zufallsmatrix mit ganzzahligen E<strong>in</strong>trägen.<br />

Lassen Sie sich mit evalf die numerischen Werte der Eigenwerte ausgeben.<br />

b) Überprüfen Sie, ob das Produkt der <strong>in</strong> a) berechneten Eigenwerte gleich der Determ<strong>in</strong>ante<br />

der Matrix ist. Dafür muss man wahrsche<strong>in</strong>lich die Rechengenauigkeit mit Digits:=t;<br />

für geeignetes t erhöhen.<br />

4


Priv. Doz. Dr. Bernhard Schmidt 13.5.2004<br />

http://www.math.uni-augsburg.de/˜schmidtb<br />

Organisatorischer H<strong>in</strong>weis:<br />

Der <strong>Maple</strong>-Kurs f<strong>in</strong>det ab dem 27. Mai im Mac-CIP-Pool, Raum 1012/1013 statt<br />

<strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>Maple</strong>: 4. <strong>Arbeitsblatt</strong><br />

Erzeugen und Exportieren von Graphiken<br />

1 Der Befehl plot<br />

Der Grundbefehl zur Erzeugung e<strong>in</strong>er graphischen Darstellung e<strong>in</strong>er Funktion f(x) ist<br />

plot. Dabei kann f e<strong>in</strong> Ausdruck <strong>in</strong> x, e<strong>in</strong>e mit x->f(x) def<strong>in</strong>ierte Funktion oder auch<br />

e<strong>in</strong>e Prozedur se<strong>in</strong>. Als Optionen können der darzustellende x- bzw. y-Bereich angegeben<br />

werden. Beispiele:<br />

Befehl<br />

Kommentar<br />

plot(s<strong>in</strong>);<br />

Plot der S<strong>in</strong>usfunktion, x-y-Bereiche Standard<br />

plot(s<strong>in</strong>(x),x=0..2,y=0..1); Plot mit Vorgabe der Bereiche<br />

plot(s<strong>in</strong>(x)/x,x=0..<strong>in</strong>f<strong>in</strong>ity); Plot über “unendlichen Bereich”<br />

f:=x->s<strong>in</strong>(x)ˆ3∗xˆ4;<br />

Erzeugung e<strong>in</strong>er Funktion f<br />

plot(f, 0..1); Plotten der Funktion f(x) für x ∈ [0, 1]<br />

P:=proc(x) return xˆ3; end; Erzeugung e<strong>in</strong>er Prozedur P<br />

plot(P,0..3); Plotten von P(x) für x ∈ [0, 3]<br />

Plots kann man auch Namen geben und sie dann mit dem Befehl display e<strong>in</strong>zeln oder<br />

geme<strong>in</strong>sam anzeigen lassen:<br />

Befehl<br />

p1:=plot(s<strong>in</strong>): p2:=plot(s<strong>in</strong>(x),x=0..2,y=0..1):<br />

with(plots): display([p1,p2]);<br />

Kommentar<br />

Plots p1, p2 <strong>in</strong> e<strong>in</strong>er Graphik<br />

Aufgabe <strong>1.</strong>1<br />

a) Plotten sie tan x so, dass man die Nullstellen im Bereich [0, 10] e<strong>in</strong>igermassen genau<br />

erkennen kann. H<strong>in</strong>weis: Wählen Sie den y-Bereich geeignet.<br />

b) Plotten Sie den E<strong>in</strong>heitskreis, <strong>in</strong>dem Sie ihn mit display aus je e<strong>in</strong>em Teil für den<br />

unteren und oberen Halbkreis zusammensetzen. H<strong>in</strong>weise: Die nötigen Funktionen s<strong>in</strong>d<br />

± √ 1 − x 2 . Mit der Option scal<strong>in</strong>g=constra<strong>in</strong>ed <strong>in</strong> plot kann man die Verzerrung beseitigen.<br />

c) Erzeugen Sie e<strong>in</strong>e Prozedur P, so dass P(x) den Wert -1 liefert für x ≤ 0 und<br />

s<strong>in</strong>(x) für x > 0. Plotten Sie die Prozedur im Bereich x ∈ [−5, 5]. Notwendige Befehle:<br />

proc(x)...end; if...then...else...fi; return x; H<strong>in</strong>weis: Das Plotten funktioniert<br />

nur mit plot(P,-5..5);, nicht mit plot(P(x),x=-5..5);


2 Exportieren von Graphiken<br />

Oft ist es nützlich, <strong>Maple</strong>-Graphiken <strong>in</strong> andere Dokumente e<strong>in</strong>b<strong>in</strong>den zu können, z.B. <strong>in</strong><br />

Sem<strong>in</strong>arausarbeitungen oder Diplomarbeiten. Da mathematische Texte fast ausschließlich<br />

mit dem Textverbeitungsprogramm latex geschrieben werden, konzentrieren wir uns auf<br />

die E<strong>in</strong>b<strong>in</strong>dung <strong>in</strong> latex-Dokumente.<br />

Aufgabe 2.1 a) Plotten Sie den Betrag der Riemannschen Zetafunktion im Bereich {1/2+<br />

it : 0 ≤ t ≤ 100} mit plot(abs(Zeta(1/2+t*I)),t=0..100);.<br />

b) Rechter Mausklick auf Plot der Zetafunktion, → ExportAs → EncapsulatedPostscript,<br />

Speichern als zeta.eps.<br />

c) Downloaden Sie die Datei zeta.tex von der Homepage dieses Kurses. Die Datei zeta.tex<br />

enthält e<strong>in</strong>e kurze Beschreibung der Riemann-Hypothese im latex-Format. Sehen Sie sich<br />

an, wie dort die Datei zeta.eps e<strong>in</strong>gebunden wird. Das Ergebnis der latex-Kompilierung<br />

f<strong>in</strong>den Sie <strong>in</strong> der Datei latex.pdf.<br />

H<strong>in</strong>weis: Mit dem Programm latex sollte man sich so früh wie möglich vertraut machen.<br />

E<strong>in</strong> hervorragendes Buch dazu ist Latex, E<strong>in</strong>e <strong>E<strong>in</strong>führung</strong> von Helmut Kopka.<br />

3 Parametrische Plots<br />

Statt den E<strong>in</strong>heitskreis aus zwei Stücken zusammenzusetzen, kann man ihn e<strong>in</strong>facher als<br />

parametrischen Plot erzeugen. Die Syntax für parametrische 2D-Plots lautet<br />

plot([A(t),B(t),t=a..b]);<br />

Dabei s<strong>in</strong>d A(t) und B(t) Ausdrücke <strong>in</strong> t. Geplottet wird die Kurve [A(t), B(t)], t ∈ [a, b].<br />

Den E<strong>in</strong>heitskreis erhält man folgendermaßen:<br />

plot([cos(t),s<strong>in</strong>(t),t=0..2*Pi]);<br />

Aufgabe 3.1 Plotten Sie e<strong>in</strong>e Spirale im R 2 um den Nullpunkt mit 5 W<strong>in</strong>dungen.<br />

H<strong>in</strong>weis: Man kann zum Beispiel den E<strong>in</strong>heitkreis mehrmals durchlaufen und die Punkte<br />

mit e<strong>in</strong>em monoton wachsenden Streckungsfaktor (z.B. t) multiplizieren.<br />

4 Dreidimensionale Graphiken mit plot3d<br />

E<strong>in</strong>e Funktion f(x, y) lässt sich als Fläche im R 3 darstellen. Der entsprechende Plot wird<br />

mit<br />

plot3d(f(x,y), x=a..b,y=c..d);<br />

erzeugt, wobei a,b,c,d zu spezifizierende Bereichsgrenzen s<strong>in</strong>d. Beispiel:<br />

plot3d(s<strong>in</strong>(x*y), x=0..4,y=0..4);<br />

Durch klicken mit der l<strong>in</strong>ken Maustaste auf das Bild kann man die Zeichnung nach belieben<br />

rotieren. Verfe<strong>in</strong>ern oder vergröbern kann man die Darstellung mit Hilfe der Option<br />

grid=[m,n], die den x- bzw. y-Bereich <strong>in</strong> m bzw. n Teile rastert. Beispiel:<br />

plot3d(s<strong>in</strong>(x*y), x=0..4,y=0..4, grid=[50,50]);<br />

Auch parametrische 3D-Plots s<strong>in</strong>d möglich. Beispiel:<br />

plot3d([s<strong>in</strong>(s), cos(s)*s<strong>in</strong>(t),s<strong>in</strong>(t)], s=-Pi..Pi, t=-Pi..Pi);


Aufgabe 4.1 Erzeugen Sie e<strong>in</strong>en parametrischen Plot der E<strong>in</strong>heitskugel im R 3 . H<strong>in</strong>weis:<br />

Ist R = (x, y, z) e<strong>in</strong> Punkt auf der E<strong>in</strong>heitskugel, so gilt x = s<strong>in</strong> t cos s, y = s<strong>in</strong> t s<strong>in</strong> s und<br />

z = cos t. Dabei ist s der W<strong>in</strong>kel zwischen der x-Achse und der Projektion von R auf die<br />

x-y-Ebene und t ist der W<strong>in</strong>kel zwischen z-Achse und R.<br />

5 Darstellung der Mandelbrotmenge<br />

Mit <strong>Maple</strong> kann man fraktale Mengen ansprechend graphisch darstellen. E<strong>in</strong>e fraktale<br />

Menge M hat die Eigenschaft, dass unendlich viele beliebig kle<strong>in</strong>e Teile von M der Gesamtmenge<br />

ähnlich sehen (Selbstähnlichkeit). E<strong>in</strong>e der bekanntesten fraktalen Mengen ist<br />

die Mandelbrotmenge <strong>in</strong> der komplexen Zahlenebene.<br />

Def<strong>in</strong>ition der Mandelbrotmenge<br />

Zu jedem c ∈ C wird e<strong>in</strong>e Folge (a n (c)) def<strong>in</strong>iert durch a 1 (c) = c und a n+1 (c) = a n (c) 2 + c<br />

für n ≥ <strong>1.</strong> Die Mandelbrotmenge ist def<strong>in</strong>iert als<br />

M := {c ∈ C : |a n (c)| ≤ 2 ∀ n ∈ N}.<br />

Um mit <strong>Maple</strong> zu prüfen, ob c ∈ M ist, kann man natürlich nicht die unendlich vielen<br />

Bed<strong>in</strong>gungen |a n (c)| ≤ 2 testen. Statt dessen testet man diese Bed<strong>in</strong>gung z.B. nur für alle<br />

n ≤ 20. Bei positiven Ausgang wird c <strong>in</strong> die Menge aufgenommen, ansonsten nicht. Das<br />

liefert e<strong>in</strong>e sehr gute Approximation der Mandelbrotmenge.<br />

Aufgabe 5.1<br />

a) Schreiben Sie e<strong>in</strong>e Prozedur P:=proc(x,y), so dass P(x,y) den Wert 1 liefert, falls<br />

|a n (x + I ∗ y)| ≤ 2 für alle n ≤ 20. Ansonsten soll die Prozedur 0 liefern.<br />

b) Plotten Sie die Mandelbrotmenge mit dem Befehl<br />

plot3d(P, -2..2, -2.. 2, grid=[50, 50]);<br />

Dabei ist P die Prozedur aus Teil a. Sehen Sie sich durch Änderung der grid-Werte<br />

verschiedene Verfe<strong>in</strong>erungsstufen an.<br />

c) Sehen Sie sich immer kle<strong>in</strong>ere Bereiche der Mandelbrotmenge an und versuchen Sie, ihre<br />

Selbstähnlichkeit zu bestätigen. E<strong>in</strong> <strong>in</strong>teressanter Bereich ist zum Beispiel -0.06..-0.03,<br />

-<strong>1.</strong>. -0.98.


6 Graphische Animationen<br />

Zur Animation von Graphiken stehen im Paket plots die Befehle animate und animate3d<br />

zur Verfügung. Syntax:<br />

animate(F(x,t),x=a..b,t=c..d,frames=n);<br />

Dabei ist F(x,t) die darzustellende Funktion oder e<strong>in</strong>e Menge solcher Funktionen. x=a..b<br />

gibt den x-Bereich an. Der für die Animation zuständige Parameter ist t (kann man sich<br />

als Zeitparameter vorstellen). <strong>Maple</strong> erzeugt für n Werte von t im angegeben Bereich je<br />

e<strong>in</strong> Bild. Die Ausgabe ist e<strong>in</strong>e Folge von n Bildern, die man sich wie e<strong>in</strong>en Film ansehen<br />

kann. Beispiel:<br />

animate(exp(-t∗x)∗s<strong>in</strong>(x),x=0..5,t=0..5);<br />

Um die Animation zu starten, klickt man erst auf die Graphik und dann auf den Rechtspfeil<br />

<strong>in</strong> der neu ersche<strong>in</strong>enden zweiten Werkzeugleiste oben. Analog funktioniert animate3d:<br />

animate3d(F(x,y,t), x=a..b, y=c..d,t=e..f);<br />

Hier ist F die darzustellende Funktion oder e<strong>in</strong>e Menge solcher Funktionen. F kann<br />

reellwertig se<strong>in</strong>, kann aber auch Werte im R 3 annehmen. Will man Verzerrungen aufgrund<br />

automatischer Skalierungen der Achsen vermeiden, muss man als Option scal<strong>in</strong>g=constra<strong>in</strong>ed<br />

e<strong>in</strong>geben. Beispiel e<strong>in</strong>er Kugel vom Radius 1, die sich um 10 E<strong>in</strong>heiten<br />

entlang der x-Achse bewegt:<br />

Kugel:=[s<strong>in</strong>(t)∗cos(s)+u, s<strong>in</strong>(t)∗s<strong>in</strong>(s),cos(t)]:<br />

animate3d(Kugel,s=0..2∗Pi,t=0..Pi,u=0..10,scal<strong>in</strong>g=constra<strong>in</strong>ed);<br />

Aufgabe 6.1 Erzeugen Sie e<strong>in</strong>e Animation zweier Kugeln vom Radius 1 im R 3 , von denen<br />

die erste im Ursprung ruht und die zweite sie im Abstand von 5 E<strong>in</strong>heiten <strong>in</strong> der x-<br />

y-Ebene umkreist. H<strong>in</strong>weise: Die ruhende Kugel kann man aus obigem Beispiel ablesen<br />

(+u weglassen!). Die andere Kugel br<strong>in</strong>gt man zum rotieren, <strong>in</strong>dem man 5∗cos(u) zur x-<br />

Koord<strong>in</strong>ate und 5∗s<strong>in</strong>(u) zur y-Koord<strong>in</strong>ate addiert. Vergessen Sie nicht, das Paket plots<br />

mit with(plots): zu laden.


Priv. Doz. Dr. Bernhard Schmidt 27.5.2004<br />

http://www.math.uni-augsburg.de/˜schmidtb<br />

<strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>Maple</strong>: 5. <strong>Arbeitsblatt</strong><br />

Analysis mit <strong>Maple</strong><br />

1 Grenzwerte von Funktionen<br />

Für Berechnungen von Grenzwerten von Funktionen steht der Befehl limit zur Verfügung.<br />

Syntax:<br />

limit(f,x=a);<br />

Dabei ist f e<strong>in</strong> analytischer Ausdruck <strong>in</strong> der Variablen x. Es wird lim x→a f(x) berechnet.<br />

Ist f e<strong>in</strong>e Funktion, so muss man f(x) statt f e<strong>in</strong>geben. Die Berechnung von l<strong>in</strong>ksseitigen/rechtsseitigen<br />

Grenzwerten erreicht man mit Hilfe der Optionen left/right. Beispiele:<br />

Befehl<br />

limit(xˆx,x=0);<br />

limit(abs(x)/x,x=0);<br />

limit(abs(x)/x,x=0,right);<br />

limit((2*xˆ3+4*xˆ2)/(7*xˆ3+12),x=<strong>in</strong>f<strong>in</strong>ity);<br />

f:=x->s<strong>in</strong>(x)/x;<br />

limit(f,x=0);<br />

limit(f(x),x=0);<br />

Aufgabe <strong>1.</strong>1 Folgende Grenzwerte sollen bestimmt werden:<br />

lim<br />

x→0<br />

Kommentar<br />

Berechung von lim x→0 x x<br />

Ausgabe undef<strong>in</strong>ed, da<br />

lim x→0 |x|/x nicht existiert<br />

Rechtsseitiger Grenzwert<br />

Berechung von lim x→∞<br />

Def<strong>in</strong>ition e<strong>in</strong>er Funktion<br />

funktioniert nicht, f wird als<br />

Konstante <strong>in</strong>terpretiert<br />

funktioniert<br />

|x|(e x − 1) s<strong>in</strong> 2 x<br />

(1 − cos x) 3/2 tan x , lim tan −3 (x − π/2)<br />

x→0+ |x|(e s<strong>in</strong>2 x − 1) , lim |x| cot −3 (1/x)<br />

x→∞ e s<strong>in</strong>2 1/x − 1<br />

2 Reihen und unendliche Produkte<br />

Vorbemerkung zu sum und product<br />

Bei der Verwendung des Befehls sum zur Summenbildung gibt es oft ärgerliche Fehler,<br />

wenn die Summationsvariable vorher schon e<strong>in</strong>en Wert hatte. Beispiel:<br />

n:=1; sum(n,n=<strong>1.</strong>.10); ⇒ Fehler!<br />

Diesen Fehlern geht man e<strong>in</strong> für alle mal aus dem Weg, <strong>in</strong>dem man die Summationvariable<br />

und den zu summierenden Ausdruck <strong>in</strong> e<strong>in</strong>fache Anführungszeichen setzt:<br />

n:=1; sum(’n’,’n’=<strong>1.</strong>.10); ⇒ OK!<br />

Gleiches gilt für den Befehl product.<br />

Berechnung von Reihen und Produkten<br />

Zur Berechung e<strong>in</strong>er Reihe ∑ ∞<br />

n=1<br />

f(n) kann man folgendermaßen vorgehen: Man def<strong>in</strong>iert<br />

sich mit p:=sum(’f(n)’,’n’=<strong>1.</strong>.k); e<strong>in</strong>en Ausdruck, der die Partialsummen beschreibt


und rechnet dann mit limit(p,k=<strong>in</strong>f<strong>in</strong>ity); den Grenzwert der Partialsummen, d.h. den<br />

Wert der Reihe aus. Beispiel:<br />

p:=sum(’1/nˆ2’,’n’=<strong>1.</strong>.k); limit(p,k=<strong>in</strong>f<strong>in</strong>ity);<br />

In diesem Beispiel liefert <strong>Maple</strong> den exakten Wert π 2 /6. Analog kann man unendliche<br />

Produkte berechnen. Ist man nur an Dezimalnäherungen <strong>in</strong>teressiert, so kann man die<br />

Befehle sum(’f(n)’,’n’=<strong>1.</strong>.<strong>in</strong>f<strong>in</strong>ity); bzw. product(’f(n)’,’n’=<strong>1.</strong>.<strong>in</strong>f<strong>in</strong>ity); verwenden<br />

und die Auswertung mit evalf erzw<strong>in</strong>gen. Beispiel:<br />

p:=product(’(1+1/nˆ2)’,’n’=<strong>1.</strong>.<strong>in</strong>f<strong>in</strong>ity); evalf(p);<br />

Häufig kann <strong>Maple</strong> jedoch ke<strong>in</strong>e vernünftige Dezimalnäherung berechnen und es wird ke<strong>in</strong><br />

Wert ausgegeben. Dann kann man Werte von Partialsummen bzw. Partialprodukten für<br />

möglichst große k als Näherungen nehmen.<br />

Aufgabe 2.1 Berechnen Sie Dezimalnäherungen für folgende Reihen und Produkte. F<strong>in</strong>den<br />

Sie auch die exakten Werte, falls möglich.<br />

∞∑<br />

n=1<br />

1 + √ n<br />

n 2 ,<br />

∞∑<br />

n=1<br />

s<strong>in</strong> 2 n<br />

n 2 ,<br />

∞∏<br />

(1 − 1<br />

4n 2 ),<br />

n=1<br />

∞ ∏<br />

n=1<br />

(1 − 9<br />

4n 2 )<br />

<strong>Maple</strong> kann auch Reihen berechnen, die von Parametern abhängen:<br />

Aufgabe 2.2 Berechnen Sie S = ∑ ∞ 2z<br />

n=1<br />

. Überprüfen Sie durch Plots, dass für z ∉ Z<br />

z 2 −n 2<br />

1<br />

+ S − π cot πz = 0<br />

z<br />

gilt (das ist die sogenannte Partialbruchentwicklung des Kotangens).<br />

3 Differenzieren von Funktionen e<strong>in</strong>er Variablen<br />

E<strong>in</strong> Ausdruck f <strong>in</strong> x wird mit diff(f,x); differenziert. Um e<strong>in</strong>e Funktion g zu differenzieren,<br />

muss man diff(g(x),x); e<strong>in</strong>geben. Man kann auch differenzieren, ohne die Funktionen zu<br />

spezifizieren. Gibt man zum Beispiel diff(f(x)/g(x),x); e<strong>in</strong>, ohne dass f und g vorher<br />

def<strong>in</strong>iert wurden, erhält man als Ausgabe die Quotientenregel. Die n-te Ableitung von<br />

f erhält man durch diff(f(x),x$n);. Will man die Ableitung als Funktion und nicht als<br />

Ausdruck erhalten, kann man den Ableitungsoperator D benutzen.<br />

Für e<strong>in</strong>e Funktion f: x->f(x) liefert D(f) die Funktion x->f’(x). Mit (D@@n)(f); berechnet<br />

man die n-te Ableitung von f als Funktion. Beispiele:<br />

Befehl<br />

f:=xˆ5; diff(f,x);<br />

f:=x->xˆ2; diff(f(x),x);<br />

diff(f,x$3);<br />

diff((h@g(x)),x);<br />

f:=x->s<strong>in</strong>(x); D(f); (D@@3)(f);<br />

Kommentar<br />

Differenzieren e<strong>in</strong>es Ausdrucks<br />

Differenzieren e<strong>in</strong>er Funktion<br />

3. Ableitung<br />

Kettenregel wird ausgeben (@ ist der<br />

Operator für die Verkettung)<br />

<strong>1.</strong> und 3. Ableitung werden als Funktionen<br />

ausgegeben


Aufgabe 3.1 Sei f = s<strong>in</strong> x 3 . Mit f (i) bezeichnen wir die i-te Ableitung von f. Berechnen<br />

sie<br />

10∑ f (j) (0)x j<br />

g := f(0) +<br />

j!<br />

j=1<br />

(Taylorentwicklung 10. Ordnung um 0). Plotten Sie f und g im Intervall [0, 3/2] <strong>in</strong> e<strong>in</strong>er<br />

geme<strong>in</strong>samen Graphik.<br />

H<strong>in</strong>weise: Man def<strong>in</strong>iert am besten f als Funktion f:=x->s<strong>in</strong>(xˆ3);. Auch g sollte man als<br />

Funktion def<strong>in</strong>ieren. Den Wert f (j) (0) erhält man mit (D@@j)(f)(0). Den geme<strong>in</strong>samen<br />

Plot erhält man z.B. mit plot({f,g},0..3/2);<br />

4 Differenzieren von Funktionen mehrerer Variablen<br />

Beim Differenzieren von Funktionen mehrerer Variablen muss man mit Vektoren und Matrizen<br />

arbeiten und daher vorher das Paket l<strong>in</strong>alg laden. Wichtige Befehle s<strong>in</strong>d grad,<br />

jacobian, hessian. Beispiele:<br />

Befehl<br />

with(l<strong>in</strong>alg):<br />

f:=xˆ2*s<strong>in</strong>(x*y)+x*exp(y+z);<br />

g:=grad(f,[x,y,z]);<br />

Kommentar<br />

Laden des Pakets l<strong>in</strong>alg<br />

Def<strong>in</strong>ition e<strong>in</strong>es Ausdrucks<br />

Gradient wird berechnet; die Variablen, nach denen<br />

differenziert wird, werden als Liste e<strong>in</strong>gegeben<br />

Differenziert nur nach x und y<br />

Berechnung der Hesse-Matrix<br />

h:=grad(f,[x,y]);<br />

hessian(f,[x,y,z]);<br />

v:=vector([xˆ2*yˆ2,s<strong>in</strong>(x+y)]); Def<strong>in</strong>ition e<strong>in</strong>er Funktion v : R 2 → R 2<br />

jacobian(v,[x,y]);<br />

Berechnung der Jacobi-Matrix<br />

Mit Hilfe von Gradienten und Hesse-Matrizen kann man nach lokalen Extrema von Funktionen<br />

suchen. Mit ∇f(x) bzw. H f (x) bezeichnet man den Gradienten bzw. die Hesse-<br />

Matrix von f am Punkt x. In der Analysis oder Optimierung beweist man folgenden Satz:<br />

Satz Sei f : R n → R zweimal differenzierbar.<br />

a) Ist x e<strong>in</strong> lokales Extremum von f, so gilt ∇f(x) = 0.<br />

b) Ist ∇f(x) = 0 und hat H f (x) nur positive (nur negative) Eigenwerte, so ist x e<strong>in</strong> lokales<br />

M<strong>in</strong>imum (Maximum) von f.<br />

Anwendungsbeispiel:<br />

Befehl<br />

Kommentar<br />

f:=xˆ4+xˆ2+yˆ2+6*y;<br />

Def<strong>in</strong>ition e<strong>in</strong>es Ausdrucks<br />

g:=grad(f,[x,y]);<br />

Gradientenberechnung<br />

s:=solve({g[1]=0,g[2]=0}); Lösungen von ∇f = 0<br />

allvalues(s[2]);<br />

Auflösen von RootOf<br />

t:=subs(s[1],[x,y]);<br />

Zugreifen auf die (e<strong>in</strong>zige reelle) Lösung<br />

H:=hessian(f,[x,y]);<br />

Berechnung der Hesse-Matrix von f<br />

Ht:=map(a->subs(x=t[1],y=t[2],a),H); E<strong>in</strong>setzen des Lösungspunkts <strong>in</strong> Hesse-Matrix<br />

eigenvals(Ht);<br />

Alle Eigenwerte >0, lokales M<strong>in</strong>imum


Aufgabe 4.1 Suchen Sie nach lokalen Extrema folgender Funktionen. H<strong>in</strong>weise: Bleiben<br />

unausgewertete Ausdrücke zwischendurch stehen, so wendet man evalf an.<br />

5 Integration<br />

f = x 2 + 2 xz + 2 x + y 2 − 2 yz − 2 y + 2 z 2 + 2 z + e (x+y−z)2<br />

h = −2 x 2 − 2 y 2 − 4 yz − 8 y − 3 z 2 − 2 z<br />

Bestimmte und unbestimmte Integrale berechnet man mit dem Befehl <strong>in</strong>t. Auch uneigentliche<br />

Integrale kann man so auswerten. Zur Berechnung mehrdimensionaler Integrale<br />

iteriert man den Befehl <strong>in</strong>t. Beispiele:<br />

Befehl<br />

<strong>in</strong>t(xˆ5,x=0..1);<br />

<strong>in</strong>t(s<strong>in</strong>(x)ˆ2*exp(x),x);<br />

<strong>in</strong>t(1/xˆ2,x=<strong>1.</strong>.<strong>in</strong>f<strong>in</strong>ity);<br />

<strong>in</strong>t(<strong>in</strong>t(<strong>in</strong>t(x+y+z,x=0..1),y=0..1),z=0..1);<br />

Kommentar<br />

Bestimmtes Integral<br />

Unbestimmtes Integral<br />

Uneigentliches Integral<br />

Iteriertes Integral<br />

Aufgabe 5.1 Die Fläche von S ⊂ R 2 ist ∫ S<br />

1 dxdy. Berechnen Sie die Fläche der Ellipse<br />

E := {(x, y) : 3x 2 + y 2 ≤ 1}.<br />

H<strong>in</strong>weise: Wählen Sie im äußeren Integral den y-Bereich y=-<strong>1.</strong>.<strong>1.</strong> Der x-Bereich muss<br />

dann gemäß der Bed<strong>in</strong>gung 3x 2 + y 2 ≤ 1 gewählt werden (Bed<strong>in</strong>gung nach x auflösen,<br />

ergibt Bereich<br />

[− √ (1 − y 2 )/3, √ (1 − y 2 )/3]). Die Ellipse kann man übrigens am e<strong>in</strong>fachsten plotten mit<br />

implicitplot(3*xˆ2+yˆ2=1,x=-<strong>1.</strong>.1,y=-<strong>1.</strong>.1,scal<strong>in</strong>g=constra<strong>in</strong>ed);<br />

6 Koord<strong>in</strong>atentransformationen, Jacobideterm<strong>in</strong>anten<br />

Zur Vere<strong>in</strong>fachung von Integralen s<strong>in</strong>d Koord<strong>in</strong>atentransformationen oft unerläßlich. Betrachten<br />

wir als Beispiel e<strong>in</strong> Integral über die E<strong>in</strong>heitskugel K im R 3 :<br />

∫<br />

V := f(x, y, z)dxdydz<br />

K<br />

Um V zu berechnen, muss das Integral <strong>in</strong> e<strong>in</strong> iteriertes Integral umgewandelt werden. Das<br />

macht aber wegen der komplizierten Integrationsgrenzen bei e<strong>in</strong>er Kugel im x-y-z-System<br />

Mühe. Daher substituiert man die Kugelkoord<strong>in</strong>aten x(r, s, t) = r s<strong>in</strong> t cos s, y(r, s, t) =<br />

r s<strong>in</strong> t s<strong>in</strong> s, z(r, s, t) = r cos t und berechnet das Integral gemäß der Formel<br />

∫<br />

∫ π ∫ 2π ∫ 1<br />

f(x, y, z)dxdydz =<br />

f(x(r, s, t), y(r, s, t), z(r, s, t))|J(r, s, t)|drdsdt (1)<br />

K<br />

0<br />

0<br />

0<br />

Dabei ist |J(r, s, t)| der Betrag der Jacobideterm<strong>in</strong>ante der Transformation<br />

(r, s, t) ↦→ (x(r, s, t), y(r, s, t), z(r, s, t)).<br />

Diese Determ<strong>in</strong>ante lässt sich mit dem Befehl jacobian berechnen:<br />

Befehl<br />

xyz:=vector([r*s<strong>in</strong>(t)*cos(s),r*s<strong>in</strong>(t)*s<strong>in</strong>(s),r*cos(t)]);<br />

J:=det(jacobian(xyz,[r,s,t]));<br />

J1:=simplify(abs(J));<br />

Kommentar<br />

Transformation<br />

Jacobideterm<strong>in</strong>ante<br />

Ergebnis: s<strong>in</strong>(t)rˆ2


Das Volumen der E<strong>in</strong>heitskugel ist also nach der Formal (1) zum Beispiel<br />

∫<br />

K<br />

1 dxdydz =<br />

∫ π ∫ 2π ∫ 1<br />

0<br />

0<br />

0<br />

s<strong>in</strong>(t)r 2 drdsdt = 4π 3 .<br />

Aufgabe 6.1 Zyl<strong>in</strong>derkoord<strong>in</strong>aten im R 3 s<strong>in</strong>d gegeben durch x = r cos s, y = r s<strong>in</strong> s,<br />

z = z. Berechnen Sie die Jacobideterm<strong>in</strong>ante dieser Transformation.<br />

Aufgabe 6.2 Das Trägheitsmoment von S ⊂ R 3 bzgl. der z-Achse ist<br />

∫<br />

(x 2 + y 2 )ρ(x, y, z)dxdydz,<br />

S<br />

wobei ρ(x, y, z) die Dichte des Körpers S <strong>in</strong> (x, y, z) ist. Berechnen Sie mit Hilfe von (1)<br />

das Trägheitsmoment der E<strong>in</strong>heitskugel mit Dichte <strong>1.</strong>


Priv. Doz. Dr. Bernhard Schmidt 3.6.2004<br />

http://www.math.uni-augsburg.de/˜schmidtb<br />

<strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>Maple</strong>: 6. <strong>Arbeitsblatt</strong><br />

1 Schreiben <strong>in</strong> Dateien<br />

Input und Output<br />

Nach umfangreichen Rechnungen hat man unter Umständen e<strong>in</strong> ellenlanges <strong>Maple</strong>-<strong>Arbeitsblatt</strong><br />

mit größtenteils irrelevanten Informationen vor sich. Dann kann man sich helfen,<br />

<strong>in</strong>dem man die <strong>in</strong>teressanten Daten extrahiert und <strong>in</strong> e<strong>in</strong>e Datei schreibt.<br />

Wichtig: E<strong>in</strong> Pfadname für e<strong>in</strong>e Datei sieht <strong>in</strong> <strong>Maple</strong> zum Beipiel folgendermaßen aus:<br />

”C:\\test.txt”. Der Pfadname ist also <strong>in</strong> Anführungszeichen zu setzen.<br />

Die wichtigsten Befehle für das Schreiben <strong>in</strong> Dateien s<strong>in</strong>d open, writel<strong>in</strong>e, writedata,<br />

close. Der Befehl writedata ist besonders für numerische Werte geeignet, da man damit<br />

durch e<strong>in</strong>en e<strong>in</strong>zigen Befehl e<strong>in</strong>e ganze Matrix mit Integer- oder Float-E<strong>in</strong>trägen <strong>in</strong> e<strong>in</strong>e<br />

Datei schreiben kann.<br />

Achtung: Existiert e<strong>in</strong>e Datei schon, wird sie durch diese Befehle überschrieben.<br />

Befehl<br />

open(”test.txt”,WRITE);<br />

writel<strong>in</strong>e(”test.txt”,”1028340”);<br />

writel<strong>in</strong>e(”test.txt”,<br />

convert(ithprime(30),str<strong>in</strong>g));<br />

close(”test.txt”);<br />

writedata(”test.txt”,<br />

[[1,2,3],[1,3,5]]);<br />

with(l<strong>in</strong>alg):<br />

A:=matrix([[1,2,3],[1,3,5]]);<br />

writedata(”test.txt”,A);<br />

Kommentar<br />

Datei test.txt wird zum Schreiben geöffnet,<br />

und zwar <strong>in</strong> dem Verzeichnis, von<br />

dem aus <strong>Maple</strong> gestartet wurde. Will man<br />

test.txt <strong>in</strong> e<strong>in</strong>em anderen Verzeichnis<br />

speichern, so muss man den Pfadnamen<br />

angeben, z.B.<br />

open(”C:\\test.txt”,WRITE);<br />

Schreiben von Str<strong>in</strong>gs <strong>in</strong> die Datei<br />

test.txt. Da writel<strong>in</strong>e nur Str<strong>in</strong>gs schreiben<br />

kann, müssen Zahlen vor dem Schreiben<br />

<strong>in</strong> Str<strong>in</strong>gs umgewandelt werden.<br />

Schließen der Datei test.txt. Ohne das<br />

Schließen kann es zu Fehlern kommen.<br />

Liste von Listen wird <strong>in</strong> test.txt geschrieben.<br />

Dabei werden nur die E<strong>in</strong>träge geschrieben,<br />

nicht die Kommas und Klammern.<br />

Dies kann man durch Öffnen von<br />

test.txt <strong>in</strong> e<strong>in</strong>em Texteditor überprüfen.<br />

Def<strong>in</strong>ition e<strong>in</strong>er Matrix<br />

Matrix wird <strong>in</strong> test.txt geschrieben


Aufgabe <strong>1.</strong>1 a) Schreiben Sie mit writel<strong>in</strong>e die ersten 100 Primzahlen zeilenweise <strong>in</strong><br />

e<strong>in</strong>e Datei primzahlen.txt. Öffnen Sie die Datei zur Kontrolle <strong>in</strong> e<strong>in</strong>em Texteditor. Notwendige<br />

Befehle: for-Schleife, ithprime, open, close, convert(..,str<strong>in</strong>g)<br />

b) Erzeugen Sie e<strong>in</strong>e 30x30-Zufallsmatrix und schreiben Sie ihre E<strong>in</strong>träge mit writedata<br />

e<strong>in</strong>e Datei matrix.txt. Überprüfen Sie das Ergebnis mit e<strong>in</strong>em Texteditor. Notwendige<br />

Befehle: with(l<strong>in</strong>alg); randmatrix.<br />

2 Lesen aus Dateien<br />

Will man e<strong>in</strong>en größeren Datensatz mit <strong>Maple</strong> bearbeiten, muss man die Daten aus Dateien<br />

lesen können. Dafür stehen vor allem die Befehle fscanf und readdata zur Verfügung.<br />

Der Befehl fscanf ist fast identisch mit dem gleichnamigen Befehl <strong>in</strong> der Programmiersprache<br />

C und auf beliebige Datenypen anwendbar. Der Befehl readdata ist anwendbar<br />

auf Textdateien, die Kommazahlen oder ganze Zahlen als E<strong>in</strong>träge haben.<br />

Rückgabe von readdata:<br />

readdata(”Datei”,n); liefert e<strong>in</strong>e Liste von Listen, wobei die j-te Liste jeweils die ersten<br />

n E<strong>in</strong>träge der j-ten Zeile der Datei enthält. Will man alle Zeilen vollständig e<strong>in</strong>lesen, so<br />

muss man also n groß genug wählen.<br />

Befehl<br />

Kommentar<br />

writedata(”test.txt”,[1,2,3]); Erzeugt Datei test.txt mit E<strong>in</strong>trägen 1 2<br />

3.<br />

a:=fscanf(”test.txt”, ”%d%d%d”); Lesen der drei E<strong>in</strong>träge von test.txt<br />

als Integers (%d). Zum Lesen von<br />

Str<strong>in</strong>gs/Floats schreibt man %s bzw. %f<br />

statt %d. Die Rückgabe ist e<strong>in</strong>e Liste der<br />

zwei gelesenen Werte.<br />

readdata(”matrix.txt”,10);<br />

Zeilen der Datei matrix.txt (aus Aufgabe<br />

<strong>1.</strong><strong>1.</strong>b) werden bis zum 10. E<strong>in</strong>trag als<br />

Kommazahlen (Standard) e<strong>in</strong>gelesen<br />

A:=readdata(”matrix.txt”,<strong>in</strong>teger,30); Gesamtmatrix wird ganzzahlig e<strong>in</strong>gelesen<br />

with(l<strong>in</strong>alg): B:=matrix(A);<br />

Stellt die Ausgangsmatrix wieder her<br />

Aufgabe 2.1 a) Lesen Sie mit Hilfe von fscanf die 100 Primzahlen aus der Datei primzahlen.txt<br />

aus Aufgabe <strong>1.</strong>1 <strong>in</strong> e<strong>in</strong>em Vektor p e<strong>in</strong>. Verwenden Sie dazu e<strong>in</strong>e for-Schleife<br />

und beachten Sie, dass die Rückgabe von fscanf e<strong>in</strong>e Liste der gelesen Werte ist (Werte<br />

extrahieren mit op oder eckigen Klammern). Überprüfen Sie das Resultat mit evalm(p);.<br />

b) Downloaden Sie von der Homepage dieses Kurses die Datei floats.txt und lesen Sie<br />

die dar<strong>in</strong> enthalten 100 float-Werte mit fscanf <strong>in</strong> e<strong>in</strong>en Vektor f e<strong>in</strong>.<br />

Aufgabe 2.2 a) Downloaden Sie von der Homepage dieses Kurses die Dateien matrixA.txt<br />

und vektorb.txt.<br />

b) Lesen Sie die beiden Dateien mit readdata ganzzahlig <strong>in</strong> <strong>Maple</strong> e<strong>in</strong>. H<strong>in</strong>weis: matrixA<br />

hat 10 Zeilen und 30 Spalten, vektorb hat 10 Zeilen und e<strong>in</strong>e Spalte.<br />

c) Machen Sie aus matrixA e<strong>in</strong>e Matrix A und aus vektorb e<strong>in</strong>en Vektor b.


3 Ausflug <strong>in</strong> die l<strong>in</strong>eare Optimierung<br />

Gerade haben wir e<strong>in</strong>e Matrix A und e<strong>in</strong>en Vektor b <strong>in</strong> <strong>Maple</strong> e<strong>in</strong>gelesen. Jetzt soll das<br />

l<strong>in</strong>eare Optimierungsproblem<br />

(LP )<br />

max −<br />

30∑<br />

i=1<br />

x i unter Ax = b, x ≥ 0<br />

mit <strong>Maple</strong> gelöst werden. In dem Paket simplex steht dafür der Befehl maximize zur<br />

Verfügung. Syntax:<br />

maximize(f,M,Option);<br />

Dabei ist f e<strong>in</strong>e l<strong>in</strong>eare Zielfunktion, hat also die Form f = ∑ n<br />

i=1 c ix i , wobei c i ∈ R<br />

Konstanten s<strong>in</strong>d. M ist e<strong>in</strong>e Menge von l<strong>in</strong>earen Ungleichungen und Gleichungen, die die<br />

Restriktionen darstellen. Für e<strong>in</strong> Problem mit Nichtnegativitätsbed<strong>in</strong>gung x ≥ 0 wählt<br />

man die Option NONNEGATIVE. Existiert ke<strong>in</strong>e Optimallösung, so gibt <strong>Maple</strong> nichts<br />

oder die leere Menge zurück. Beispiel für die Lösung e<strong>in</strong>es Problems max f unter Ax =<br />

b, x ≥ 0:<br />

Befehl<br />

with(simplex):<br />

f:=-3*x[1]-x[2];<br />

M:={x[1]-x[2] < = 5, x[1]+x[2]=2};<br />

L:=maximize(f,M,NONNEGATIVE);<br />

Kommentar<br />

Laden des Pakets simplex<br />

Def<strong>in</strong>ition der Zielfunktion<br />

Def<strong>in</strong>ition der Restriktionen<br />

Lösung des Problems<br />

Aufgabe 3.1 Lösen Sie das Problem<br />

(LP )<br />

max −<br />

30∑<br />

i=1<br />

x i unter Ax = b, x ≥ 0<br />

für die Matrix A und den Vektor b, die Sie <strong>in</strong> Aufgabe 2.2 e<strong>in</strong>gelesen haben. Schreiben<br />

Sie den Lösungsvektor mit writedata <strong>in</strong> e<strong>in</strong>e Datei loesung.txt. Diese Datei soll außer<br />

den E<strong>in</strong>trägen des Lösungsvektors nichts weiter enthalten.<br />

H<strong>in</strong>weise: Ist L die durch maximize gelieferte Lösung, so greift man auf die Komponenten<br />

der Lösung zum Beispiel mit subs(L,[seq(x[t],t=<strong>1.</strong>.30)]); zu. Um die Menge der<br />

Gleichungen Ax = b zu erzeugen, können Sie folgende Prozedur verwenden.<br />

P:=proc(A,b)<br />

M:={};<br />

m:=nops(convert(b,list));<br />

n:=nops(convert(row(A,1),list));<br />

for i from 1 to m do M:=M union {sum(’A[i,r]*x[r]’,’r’=<strong>1.</strong>.n)=b[i]}; od;<br />

M;<br />

end;


4 Speichern und Lesen von Variablen und Prozeduren<br />

Ist X e<strong>in</strong>e e<strong>in</strong>e Folge von Variablen (<strong>in</strong>sbesondere Prozeduren), so kann man X mit save<br />

X,”Datei”; <strong>in</strong> e<strong>in</strong>er Datei speichern. So kann man sich mit der Zeit e<strong>in</strong>e eigene “Bibliothek”<br />

von nützlichen Prozeduren anlegen, die man schnell <strong>in</strong> jedes <strong>Maple</strong>-Worksheet laden<br />

kann.<br />

Erhält der Date<strong>in</strong>ame die Endung .m, so wird X im <strong>in</strong>ternen <strong>Maple</strong>-Format gespeichert<br />

(ermöglicht schnelleres Laden als im Textformat). Das Laden und automatische Aufrufen<br />

(!) von X erfolgt mit read ”Datei”;. Achtung: save und read werden ohne runde<br />

Klammern verwendet. Beispiele:<br />

Befehl<br />

P:=proc(a,b) a*b; end;<br />

save P,”prozedur.m”;<br />

restart;<br />

read ”prozedur.m”;<br />

Kommentar<br />

Def<strong>in</strong>ition e<strong>in</strong>er Prozedur<br />

Speichern im <strong>in</strong>ternen <strong>Maple</strong>-Format<br />

Löschen aller Variablenwerte (also auch der Prozedur<br />

P).<br />

Prozedur wird e<strong>in</strong>gelesen und ist wieder unter<br />

dem Namen P verfügbar.<br />

Aufgabe 4.1 Speichern Sie die Prozedur aus Aufgabe 3.1 im <strong>in</strong>ternen <strong>Maple</strong>-Format (mit<br />

Dateiendung .m). Führen Sie restart; aus, laden Sie die Prozedur wieder mit read und<br />

überprüfen Sie, ob sie danach wieder verfügbar ist.<br />

Oft es bequemer, Prozeduren außerhalb von <strong>Maple</strong> <strong>in</strong> e<strong>in</strong>em Texteditor zu schreiben (nicht<br />

zuletzt wegen gelegentlichen Abstürzens von <strong>Maple</strong> ...) und dann mit read <strong>in</strong> <strong>Maple</strong> zu<br />

laden.<br />

Aufgabe 4.2 Schreiben Sie <strong>in</strong> e<strong>in</strong>em Texteditor e<strong>in</strong>e <strong>Maple</strong>-Prozedur P:=proc(n), die<br />

die Menge der ersten n Primzahlen zurückliefert. Speichern Sie die Datei als primset.txt.<br />

Laden Sie die Prozedur mit read <strong>in</strong> <strong>Maple</strong> und testen Sie sie an e<strong>in</strong>em Beispiel.


Priv. Doz. Dr. Bernhard Schmidt 22.7.2002<br />

http://www.math.uni-augsburg.de/˜schmidtb<br />

<strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>Maple</strong>: 12. <strong>Arbeitsblatt</strong><br />

<strong>Maple</strong>ts<br />

<strong>Maple</strong>ts s<strong>in</strong>d Java-basierte graphische Benutzeroberflächen für mit <strong>Maple</strong> erzeugte Programme. <strong>Maple</strong>ts<br />

s<strong>in</strong>d vor allem von <strong>Maple</strong>-Arbeitsblättern unabhängig und können daher auch von <strong>Maple</strong>-Unkundigen<br />

bedient werden. E<strong>in</strong> <strong>Maple</strong>t besteht aus Elementen und Aktionen. Elemente s<strong>in</strong>d Bestandteile der<br />

graphischen Oberfäche und Aktionen s<strong>in</strong>d Prozeduren, die bei Anklicken oder Auswählen bestimmter<br />

Elemente ausgelöst werden.<br />

1 W<strong>in</strong>dows<br />

Das Fundament e<strong>in</strong>es <strong>Maple</strong>ts ist meist e<strong>in</strong> W<strong>in</strong>dow. Syntax:<br />

W<strong>in</strong>dow(Optionen, [[Elemente 1],...,[Elemente n]]);<br />

Dabei bestehen Elemente i aus vordef<strong>in</strong>ierten Bestandteilen der graphischen Oberfäche, z.B.<br />

- Button (Schaltfläche),<br />

- TextField (E<strong>in</strong>- und Ausgabe von Text) oder<br />

- Plotter (zur Ausgabe von <strong>Maple</strong>-Plots).<br />

- e<strong>in</strong> e<strong>in</strong>facher Str<strong>in</strong>g, z.B. ”Hallo”<br />

Die [Elemente 1],...,[Elemente n] werden untere<strong>in</strong>ander angezeigt. Elemente enthalten meist Prozeduren<br />

als Argumente, die bestimmte Aktionen auslösen, z.B. Shutdown() zum Schließen des <strong>Maple</strong>ts.<br />

Jeder E<strong>in</strong>trag Elemente i kann e<strong>in</strong> e<strong>in</strong>zelnes Element oder e<strong>in</strong>e Folge von Elementen se<strong>in</strong>. Ist e<strong>in</strong><br />

E<strong>in</strong>trag e<strong>in</strong>e Folge, so werden die Elemente der Folge nebene<strong>in</strong>ander angezeigt. Besteht Elemente 1<br />

z.B. aus Elt1, Elt2, Elt3, so werden Elt1, Elt2, Elt3 nebene<strong>in</strong>ander angezeigt.<br />

Anzeigen e<strong>in</strong>es W<strong>in</strong>dows W:<br />

restart; #zur Sicherheit<br />

with(<strong>Maple</strong>ts[Elements]):<br />

M:=<strong>Maple</strong>t(W):<br />

<strong>Maple</strong>ts[Display](M);<br />

Aufgabe 1 Erzeugen Sie e<strong>in</strong> <strong>Maple</strong>t, das folgendes anzeigt (verwenden Sie Str<strong>in</strong>gs ”Feld1”,... als<br />

Elemente):<br />

Feld1 Feld2 Feld3<br />

Feld4 Feld5 Feld6<br />

2 TextField, Button, SetOption, Evaluate<br />

Das folgende W<strong>in</strong>dow zeigt, wie man mit Hilfe e<strong>in</strong>es TextFields e<strong>in</strong>e Benutzere<strong>in</strong>gabe e<strong>in</strong>lesen kann.<br />

W:=W<strong>in</strong>dow( ’title’="Text e<strong>in</strong>lesen",<br />

[ "Geben Sie etwas e<strong>in</strong>:",<br />

TextField[’text’](), #der Inhalt des Feldes bekommt den Namen ’text’<br />

[ Button("Schliessen", Shutdown()) , #Button, der das <strong>Maple</strong>t schliesst<br />

Button("Loeschen", SetOption(’text’= "")) #Button, der Text loescht<br />

]<br />

]<br />

):


Die <strong>in</strong> diesem W<strong>in</strong>dow verwendete Aktion SetOption ist sehr nützlich, um Werte von Variablen zu<br />

setzen.<br />

Aufgabe 2 Schreiben Sie e<strong>in</strong> <strong>Maple</strong>t, das zusätzlich den e<strong>in</strong>gegebenen Text <strong>in</strong> e<strong>in</strong>em anderen Text-<br />

Field ausgibt, falls e<strong>in</strong> Button ”Anzeigen ”gedrückt wird. Das neue Textfeld soll ganz unten angezeigt<br />

werden.<br />

H<strong>in</strong>weis: Zum Kopieren des Texts verwendet man<br />

Aufgabe 4 SetOption(’target’=’anzeige’,Argument(’text’)), wobei ’anzeige’, die Variable<br />

ist, die den Text des Feldes ”Anzeigen”enthält.<br />

Die Aktion Evaluate<br />

E<strong>in</strong>en <strong>Maple</strong>-Befehl kann man <strong>in</strong> e<strong>in</strong>em <strong>Maple</strong>t aufrufen mit<br />

Evaluate(’name’ = ’Befehl(Parameter)’)<br />

Dadurch wird der Variable ’name’ der Rückgabewert des Befehls zugewiesen.<br />

Aufgabe 3 Schreiben Sie e<strong>in</strong> <strong>Maple</strong>t zur Durchführung von Primzahltests, das e<strong>in</strong> Textfeld zur<br />

E<strong>in</strong>gabe e<strong>in</strong>er ganzen Zahl und e<strong>in</strong>es zur Ausgabe des Ergebnisses (true oder false) enthält. Buttons:<br />

- “Schliessen” : <strong>Maple</strong>t wird mit Shutdown() geschlossen.<br />

- “Loeschen” : E<strong>in</strong>gegebene Zahl wird gelöscht.<br />

- “Primzahltest”: Primzahltest wird durchgeführt und Ergebnis im Ausgabefeld angezeigt.<br />

H<strong>in</strong>weise: E<strong>in</strong>lesen kann man mit<br />

"Geben Sie e<strong>in</strong>e ganze Zahl e<strong>in</strong>:",TextField[’zahl’]()<br />

Den Primzahltest führt man aus mit<br />

Button("Primzahltest", Evaluate(’resultat’ = ’isprime(zahl)’))<br />

Aufgabe 4 Speichern Sie das <strong>Maple</strong>t aus Aufgabe 3, <strong>in</strong>dem Sie bei “Speichern unter” den Dateityp<br />

<strong>Maple</strong>t wählen. Rufen Sie das <strong>Maple</strong>t aus dem W<strong>in</strong>dows-Explorer durch Doppelklick auf und testen<br />

Sie es.<br />

3 Das Element Plotter<br />

Mit dem Plotter-Element kann man <strong>in</strong>nerhalb von <strong>Maple</strong>ts plotten. Syntax:<br />

Plotter[’name’]()<br />

Dadurch wird e<strong>in</strong> Feld zum Plotten erzeugt, das unter ’name’ angesprochen werden kann. E<strong>in</strong>en<br />

Plotbefehl ausführen kann man dann mit<br />

Evaluate(’name’=’plot(funktion,var=a..b)’);<br />

dabei ist var die verwendete Variable, [a,b] der Plotbereich und funktion ist e<strong>in</strong> Ausdruck <strong>in</strong> der<br />

Variablen var, der geplottet wird.<br />

Aufgabe 5 Schreiben Sie e<strong>in</strong> <strong>Maple</strong>t mit 4 E<strong>in</strong>gabefeldern für<br />

- e<strong>in</strong>en zu plottenden Ausdruck (<strong>in</strong> e<strong>in</strong>er Variablen),<br />

- die verwendete Variable,<br />

- l<strong>in</strong>ken Randpunkt des Plotbereichs,<br />

- rechten Randpunkt des Plotbereich.<br />

Fügen Sie e<strong>in</strong> Plotter-Element h<strong>in</strong>zu und e<strong>in</strong>en Button “Plot”, bei dessen Anwahl der Ausdruck auf<br />

dem ausgewählten Bereich geplottet wird.


Priv. Doz. Dr. Bernhard Schmidt 17.6.2004<br />

http://www.math.uni-augsburg.de/˜schmidtb<br />

<strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>Maple</strong>: 7. <strong>Arbeitsblatt</strong><br />

Differentialgleichungen<br />

E<strong>in</strong>e Paradeanwendung von <strong>Maple</strong> ist die Bearbeitung von Problemen aus der K<strong>in</strong>ematik mit Hilfe des<br />

Solvers dsolve für Differentialgleichungen und die Animation der erhaltenen Lösungen. Obwohl dieses<br />

Vorhaben ke<strong>in</strong>eswegs leicht zu verwirklichen ist, werden wir es hier behandeln, denn die Resultate s<strong>in</strong>d<br />

sehr ansprechend. Die Schritte von der Problemstellung bis zur Animation sehen folgendermassen aus.<br />

<strong>1.</strong> Aufstellen der Bewegungsgleichungen.<br />

2. Lösen der Bewegungsgleichungen mit Hilfe von dsolve.<br />

3. Animieren der Lösungen mit Hilfe von plot oder plot3d und plots[display] oder plots[animate].<br />

1 Der Befehl dsolve<br />

Für das Lösen von Systemen von gewöhnlichen Differentialgleichungen (DGLn) ist der Befehl dsolve<br />

zuständig. Syntax:<br />

dsolve(M,F,Optionen);<br />

Dabei ist M e<strong>in</strong>e Menge gewöhnlicher DGLn und (optional) Anfangsbed<strong>in</strong>gungen. Zum Beispiel stellt<br />

M:={diff(x(t),t$2)=-x(t), x(0)=1, D(x)(0)=0};<br />

die DGL x ′′ (t) = −x(t) mit Anfangsbed<strong>in</strong>gungen x(0) = 1 und x ′ (0) = 0 dar. Weiter ist F die<br />

Menge der Funktionen, nach denen das System aufgelöst werden soll, zum Beispiel F:= {x(t)}. Die<br />

wichtigste Option von dsolve ist numeric, die e<strong>in</strong>em bei nicht exakt lösbaren Systemen oft weiterhilft.<br />

Die Lösungen werden <strong>in</strong> der Form von Gleichungen ausgegeben, etwa L:=x(t)=tan(t). Mit rhs(L);<br />

erhält man dann die Lösung, d.h. die rechte Seite (right hand side) der Gleichung x(t)=tan(t).<br />

Beispiel:<br />

Befehl<br />

M:={diff(x(t),t$2)=-x(t), x(0)=1, D(x)(0)=0};<br />

L:=dsolve(M,x(t));<br />

plot(rhs(L),t=-10..10);<br />

Kommentar<br />

DGL mit Anfangsbed<strong>in</strong>gungen<br />

DGL wird gelöst<br />

Plotten der Lösung<br />

Aufgabe <strong>1.</strong>1 Lösen Sie mit dsolve die Differentialgleichung x ′′ (t) = −tx(t) mit den Anfangsbed<strong>in</strong>gungen<br />

x(0) = 0, x ′ (0) = <strong>1.</strong> Plotten Sie die Lösung. H<strong>in</strong>weise: Die <strong>Maple</strong>-Schreibweise für x ′′ (t) bzw.<br />

x ′ (0) ist diff(x(t),t$2) bzw. D(x)(0).<br />

2 E<strong>in</strong> bisschen Physik<br />

Bewegungsgleichungen kann man nach Schema F aufstellen, falls das zugrundeliegende Problem nicht<br />

zu kompliziert ist. Dieses Schema F heißt <strong>in</strong> der Physik Lagrangeformalismus. Wir betrachten e<strong>in</strong>e<br />

Punktmasse m <strong>in</strong> e<strong>in</strong>em System (z.B. Kreisl<strong>in</strong>ie, Kugeloberfläche, Ebene) <strong>in</strong> e<strong>in</strong>em Kraftfeld (z.B.<br />

konstantes Gravitationsfeld). Die Koord<strong>in</strong>aten der Punktmasse zur Zeit t seien (x(t), y(t), z(t)).<br />

<strong>1.</strong>Schritt<br />

Beschreibung des Systems durch geeignete Hilfskoord<strong>in</strong>aten θ(t) = (θ 1 (t), ..., θ f (t)), wobei f die Anzahl<br />

der Freiheitsgrade ist. Das bedeutet: Die möglichen Aufenthaltsorte der Punktmasse s<strong>in</strong>d<br />

(x(θ), y(θ), z(θ)), θ ∈ R f .


Nicht jedes System kann so beschrieben werden, wir setzen aber e<strong>in</strong>e solche Beschreibung voraus. Zum<br />

Beispiel:<br />

E<strong>in</strong>heitskreisl<strong>in</strong>ie: x(t) = cos θ(t), y(t) = s<strong>in</strong> θ(t), z(t) = 0 (e<strong>in</strong> Freiheitsgrad).<br />

Kugeloberfläche: x(t) = s<strong>in</strong> θ 2 (t) cos θ 1 (t), y(t) = s<strong>in</strong> θ 2 (t) s<strong>in</strong> θ 1 (t), z(t) = cos θ 2 (t) (zwei Freiheitsgrade).<br />

2. Schritt<br />

a) Berechnung der k<strong>in</strong>etischen Energie<br />

[ (<br />

T = m ) d 2 ( ) d 2 ( ) ]<br />

d<br />

2<br />

2 dt x(t) +<br />

dt y(t) +<br />

dt z(t)<br />

(m = Masse). Dabei müssen x, y, z durch die θ i (t) ausgedrückt werden dann mit Hilfe der Kettenregel<br />

differenziert werden. <strong>Maple</strong> wendet die Kettenregel automatisch an.<br />

b) Berechnung der potentiellen Energie V . Im konstanten Gravitationsfeld <strong>in</strong> negativer z-Richtung ist<br />

(m=Masse, g=Gravitationsbeschleunigung).<br />

c) Berechung der Lagrangefunktion L = T − V .<br />

3.Schritt<br />

Die Bewegungsgleichungen lauten<br />

d<br />

dt<br />

(1)<br />

V = mgz (2)<br />

( ) ∂L<br />

∂θ ˙ − ∂L = 0, i = 1, ..., f. (3)<br />

i<br />

∂θ i<br />

Dabei ist θ ˙ i = dθ i /dt. Jede Koord<strong>in</strong>ate θ i liefert also e<strong>in</strong>e DGL. Der Ausdruck ∂L<br />

∂θ ˙ bedeutet: Ersetze<br />

i<br />

θ˙<br />

i = dθ i /dt <strong>in</strong> L durch e<strong>in</strong>e Variable, etwa a, differenziere den entstehenden Ausdruck nach a, und<br />

ersetze danach a wieder durch dθ i /dt. Analog berechnet man ∂L<br />

∂θ i<br />

.<br />

3 Beispiel: Der schiefe Wurf<br />

E<strong>in</strong>e Punktmasse m = 1 habe zur Zeit 0 die Geschw<strong>in</strong>digkeit v = 20 <strong>in</strong> horizontaler Richtung,<br />

Geschw<strong>in</strong>digkeit 0 <strong>in</strong> vertikaler Richtung und die Höhe h = 10. Die Gravitationsbeschleunigung sei<br />

konstant 10. Ziel: Berechung der Bahnkurve, Animation.<br />

Koord<strong>in</strong>aten: x(t): Horizontale Position zur Zeit t, y(t): Höhe zur Zeit t.<br />

Hier ist also θ 1 = x und θ 2 = y.<br />

Anfangsbed<strong>in</strong>gungen: x(0) = 0, ẋ(0) = v, y(0) = h, ẏ(0) = 0.<br />

Aufstellen der Lagrangegleichungen mit <strong>Maple</strong><br />

Befehl<br />

Kommentar<br />

m:=1; v:=20; h:=10; g:=10;<br />

Masse, Ausgangsgeschw<strong>in</strong>digkeit,<br />

Höhe, Gravitationsbeschleunigung<br />

T:=1/2*m*(diff(x(t),t)ˆ2+diff(y(t),t)ˆ2); K<strong>in</strong>etische Energie nach (1)<br />

V:=m*g*y(t); Potentielle Energie nach (2)<br />

L:=T-V;<br />

Lagrangefunktion<br />

L1:=subs(diff(x(t),t)=a,<br />

Wichtiger Trick: Ausdrücke, nach<br />

diff(y(t),t)=b,x(t)=c,y(t)=d,L);<br />

abgeleitet werden soll, werden durch<br />

neue Variablen ersetzt<br />

R1:=diff(L1,a); R2:=diff(L1,b);<br />

Berechung von ∂L/∂ẋ, ∂L/∂ẏ,<br />

R3:=diff(L1,c); R4:=diff(L1,d);<br />

∂L/∂x, ∂L/∂y<br />

a:=diff(x(t),t); b:=diff(y(t),t);<br />

c:=x(t); d:=y(t);<br />

Rücksubstituierung<br />

G1:=diff(R1,t)-R3=0; Gleichung (3) für i = 1<br />

G2:=diff(R2,t)-R4=0; Gleichung (3) für i = 2


Lösen der Bewegungsgleichungen<br />

Wir wenden dsolve jetzt auf das oben für den schiefen Wurf aufgestellte Differentialgleichungssystem<br />

an.<br />

Befehl<br />

M:={G1,G2,x(0)=0,<br />

D(x)(0)=v,y(0)=h,D(y)(0)=0 };<br />

L:=dsolve(M,{x(t),y(t)});<br />

Kommentar<br />

System mit Anfangsbed<strong>in</strong>gungen<br />

Lösen des Problems<br />

Animation der Lösungen<br />

Für die Animation der Lösung zum schiefen Wurf werden wir die Befehle plot und plots[display]<br />

verwenden. Statt dessen könnte man auch mit animate arbeiten.<br />

Befehl<br />

f:=rhs(op(L)[1]); g:=rhs(op(L)[2]);<br />

for i from 0 to 50 do<br />

P[i]:=plot([subs(t=i/20,f)+cos(u)/5,<br />

subs(t=i/20,g)+s<strong>in</strong>(u)/5,u=0..2*Pi]); od:<br />

with(plots):<br />

display([seq(P[k],k=0..50)],<strong>in</strong>sequence=true);<br />

Kommentar<br />

Zugreifen auf die Lösung<br />

Erzeugen von 51 Momentaufnahmen. s<strong>in</strong><br />

und cos erzeugen kle<strong>in</strong>en Kreis zur Darstellung<br />

des Punktes<br />

Liefert Animation. Zum Starten auf Bild<br />

klicken und <strong>in</strong> der Menüleiste auf Rechtspfeil<br />

klicken.<br />

4 Pendel mit großen Ausschlägen<br />

E<strong>in</strong> masseloser Stab der Länge l=1 sei so an e<strong>in</strong>em Punkt aufgehängt, dass er reibungsfrei <strong>in</strong> e<strong>in</strong>er<br />

festen Ebene pendeln kann (E<strong>in</strong>heiten lassen wir hier weg). Am unteren Ende des Stabs sei e<strong>in</strong>e Punktmasse<br />

m = 1 befestigt. Dann liegt die Bahn der Punktmasse auf e<strong>in</strong>em Kreis. Für die Koord<strong>in</strong>aten<br />

(x(t), y(t), z(t)) der Punktmasse können wir also schreiben:<br />

x(t) = cos a(t), y(t) = s<strong>in</strong> a(t), z(t) = 0.<br />

(∗)<br />

Hier ist also θ 1 = a. Da die z-Koord<strong>in</strong>ate immer Null ist, kann sie <strong>in</strong> den folgenden Rechnungen<br />

weggelassen werden.<br />

Aufgabe 4.1<br />

a) Berechnen Sie mit <strong>Maple</strong> die Lagrangefunktion des Pendels (Schritt 2, letzte Seite). Die potentielle<br />

Energie sei V = y(t)g, wobei g = 10 die Erdbeschleunigung ist.<br />

b) Stellen Sie die Bewegungsgleichung G für das Pendel auf (Schritt 3, letzte Seite). Gehen Sie dabei<br />

analog zur Tabelle auf der letzten Seite vor. Vere<strong>in</strong>fachen Sie die Gleichung dann mit G1:=simplify(G);.<br />

c) Lösen Sie die Bewegungsgleichung G1 mit den Anfangsbed<strong>in</strong>gungen a(0)=0 und D(a)(0)=0 und<br />

der Option numeric als drittem Argument von dsolve.<br />

Als Lösung erhalten wir <strong>in</strong> Aufgabe 4.1 c) e<strong>in</strong>e Prozedur, die wir L nennen. Ruft man zum Beispiel<br />

L(2) auf, so erhält man <strong>in</strong> der zweiten Komponente der Ausgabe den Wert a(2).<br />

Aufgabe 4.2<br />

a) Def<strong>in</strong>ieren Sie mit Hilfe der Prozedur L von oben die Lösungsfunktion<br />

f:=t ->rhs(L(t)[2]); und plotten Sie f.<br />

b) Erzeugen Sie mit<br />

for i from 0 to 50 do P[i]:=plot( [ [0,0],[cos(f(i/10)),s<strong>in</strong>(f(i/10))] ], style=l<strong>in</strong>e): od:<br />

51 Momentaufnahmen der Pendelbewegung und animieren Sie diese mit<br />

plots[display]( [seq(P[k],k=0..50)], <strong>in</strong>sequence=true);


5 Punktmasse auf e<strong>in</strong>er Spirale<br />

Wir betrachten e<strong>in</strong>e Punktmasse m = 1, die sich reibungsfrei auf der Spirale<br />

x(t) = a(t) cos 5a(t), y(t) = a(t) s<strong>in</strong> 5a(t), z(t) = 0.<br />

bewegt. Wie zuvor kann die z-Koord<strong>in</strong>ate hier bei den folgenden Rechnungen weggelassen werden.<br />

Aufgabe 5.1<br />

a) Berechnen Sie mit <strong>Maple</strong> die Lagrangefunktion der Punktmasse auf der Spirale. Die potentielle<br />

Energie sei überall 0.<br />

b) Stellen Sie die Bewegungsgleichung G für die Punktmasse auf. Vere<strong>in</strong>fachen Sie die Gleichung dann<br />

mit G1:=simplify(G);.<br />

c) Lösen Sie die Bewegungsgleichung G1 mit den Anfangsbed<strong>in</strong>gungen a(0)=0 und D(a)(0)=10 mit<br />

Hilfe von dsolve ohne Option.<br />

Als Lösung erhalten wir <strong>in</strong> Aufgabe 5.1 c) e<strong>in</strong>en Ausdruck (Gleichung), den wir L nennen.<br />

Aufgabe 5.2<br />

a) Def<strong>in</strong>ieren Sie mit Hilfe der Lösung L von oben die Lösungsfunktion<br />

f:=x ->evalf(subs(t=x,rhs(L)));.<br />

b) Erzeugen Sie mit<br />

for i from 0 to 50 do<br />

P[i]:= plot([f(i/10)*cos(5*f(i/10))+cos(u)/10, f(i/10)*s<strong>in</strong>(5*f(i/10))+s<strong>in</strong>(u)/10,u=0..2*Pi]);<br />

od:<br />

51 Momentaufnahmen der Spiralbewegung und animieren Sie diese mit<br />

plots[display]( [seq(P[k],k=0..50)], <strong>in</strong>sequence=true);<br />

(∗∗)

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!