Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im...

24
Dipl.-Math. Robert Offinger Sommersemester 2006 Otto-von-Guericke-Universit¨ at Magdeburg Fakult¨ at f¨ ur Mathematik Materialien zur Vorlesung Mathematik II f¨ ur Ingenieure“ Einf¨ uhrung in Matlab und Scilab 1. Beschreibung der Programme 2. Installation und Programmaufruf 3. Verwendung als Taschenrechner: Arithmetische Operationen 4. Variablen und Zuweisungen 5. Komplexe Zahlen 6. Logische Operatoren 7. Vektoren, Matrizen, Gleichungssysteme 8. Programmierung: if, while, for 9. Skripte, Funktionen, Integrale 10. Grafiken 11. Polynome Literatur Anhang: Sehnentrapezregel und Simpson’sche Regel * Im Internet verf¨ ugbar bei http://www.scilab.org unter Downloads 1

Transcript of Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im...

Page 1: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

Dipl.-Math. Robert Offinger Sommersemester 2006

Otto-von-Guericke-Universitat MagdeburgFakultat fur Mathematik

Materialien zur Vorlesung

”Mathematik II fur Ingenieure“

Einfuhrung in Matlabr und Scilab∗

1. Beschreibung der Programme

2. Installation und Programmaufruf

3. Verwendung als Taschenrechner: Arithmetische Operationen

4. Variablen und Zuweisungen

5. Komplexe Zahlen

6. Logische Operatoren

7. Vektoren, Matrizen, Gleichungssysteme

8. Programmierung: if, while, for

9. Skripte, Funktionen, Integrale

10. Grafiken

11. Polynome

Literatur

Anhang: Sehnentrapezregel und Simpson’sche Regel

∗Im Internet verfugbar bei http://www.scilab.org unter Downloads

1

Page 2: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

1 Beschreibung der Programme

Matlabr (MATrix LABoratory) ist ein kommerzielles Programm der Firma MathWorks(http://www.mathworks.de) und einer der prominentesten Vertreter der numerisch ori-entierten Mathematik-Produkte. Die grundlegenden mathematischen Berechnungen, diemit Matlab

r gelost werden konnen, sind unter anderen die Matrizenrechnung und dasDefinieren und Auswerten von Gleichungen (inklusive der Nullstellenbestimmung undgewohnlicher oder partieller Differentialgleichungen), die zwei- und dreidimensionale gra-fische Darstellung von Daten und selbstdefinierten Funktionen und die Programmierung,die durch die Einbettung von Fortran-, Java und C++-Programmen unterstutzt wird.Ferner gibt es viele Toolboxen als Erweiterung, z.B. zur symbolischen Mathematik, Opti-mierung, neuronalen Netzen, Fuzzy Logik, Regelungssystemen, Signalverarbeitung, Bild-verarbeitung, Splines usw. Fur Simulationen stehen ferner die grafischen Entwicklungs-umgebungen Simulinkr und Stateflowr als Erganzung zur Verfugung, um vor allemdynamische Systeme zu simulieren.

Dagegen ist das Programm Scilab ein Open Source Programm, das bei http://www.scilab.org unter

”Downloads“ frei fur Windows, Linux, Mac OS und andere Syste-

me erhaltlich ist und im Standardbefehlsumfang weitgehend identisch mit Matlabr

ist, die großten Unterschiede sind hierbei bei der Erzeugung von speziellen Grafiken.Ferner stehen deutlich weniger Toolboxen zur Verfugung, fur symbolisches Rechnen istallerdings die Zusammenarbeit mit dem kommerziellen Programm Maple moglich, aufdessen Kernel auch die Toolbox fur symbolische Mathematik von Matlabr basiert.Ferner steht auch hier mit Scicos eine grafische Umgebung zur Modellierung und Simu-lation dynamischer Systeme zur Verfugung und auch mit externen Programmen ist dieZusammenarbeit moglich, hier werden C++, Tcl/Tk und Fortran unterstutzt, so dassz.B. die umfangreichen freien Bibiliotheken bei http://www.netlib.org genutzt werdenkonnen.

Wir beschreiben und verwenden im folgenden Scilab, Version 4, und weisen auf we-sentliche Unterschiede zu Matlabr hin. Beide Systeme sind (eigentlich) Interpreter,aber es steht nicht nur eine Kommandozeile, sondern auch ein Editor in einer interakti-ven Benutzerumgebung zur Verfugung, um selbstgeschriebene Skripte und Funktionen zuentwickeln (in sog.

”M-Files“ laut Matlabr-Terminologie), und es gibt auch Moglichkei-

ten, Programme zu kompilieren. Die Entwicklungsumgebung hat in Matlabr deutlich

mehr Hilfe-Tools.

2 Installation und Programmaufruf

Nach dem Herunterladen des Programms Scilab lauft unter Windows der Installer wieublich durch und man hat schließlich eine Programmgruppe

”Scilab“ im Startmenu und

ein Icon auf dem Desktop, vgl. Abbildung 1.

Nach Doppelklick auf das Icon (oder dem Start uber das Startmenu) und einem Hinweisauf dem gegenuber der Vorgangerversion neuen Grafikmodus (ignorieren!) erscheint einFenster mit der Scilab-Kommandozeile, vgl. Abbildung 2.

Den Hilfe-Browser kann man uber die Kommandozeile aufrufen, um nahere Hilfe zueinem bestimmten Thema zu erhalten, z.B. help log, oder allgemein uber das Hilfe-

2

Page 3: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

Abbildung 1: Das Scilab-Icon auf dem Desktop

Abbildung 2: Die Scilab-Kommandozeile

Menu ? oder mittels der Funktionstaste F1. In den beiden letzteren Fallen erscheint derHilfe-Browser wie in Abbildung 3. Durch Klick auf die Lupe kann man das Hilfesystemdurchsuchen, z.B. nach der Funktion log.Fur die Erstellung von komplizierteren Anweisungen wie Funktionen (siehe Abschnitt 9)empfiehlt sich die Benutzung des Editors statt der Kommandozeile, siehe Abbildung 4.

3 Verwendung als Taschenrechner

Man kann mit Scilab die ublichen arithmetischen Operationen ausfuhren und somit wieeinen Taschenrechner benutzen, vgl. Session 1.Hierbei steht * fur die Multiplikation, / fur die Division, ^ fur die Potenzierung, sqrt,sin, exp, abs fur die Wurzelfunktion, die Sinusfunktion, die Exponentialfunktion undden Absolutbetrag. Viele weitere elementare Funktionen, wie z.B. acos fur den Arcus-Kosinus stehen zur Verfugung. Die vordefinierten Variablen %pi und %e stehen fur dieKreiszahl π ≈ 3.14 bzw. die Eulersche Zahl e ≈ 2.718. Hier ist zu beachten, dass inMatlab

r hier pi und e geschrieben werden muss, also das einleitende Prozentzeichenfehlt. Weiter sieht man, dass Berechnungen in Scilab numerisch (und nicht symbolisch)stattfinden, so dass sin(%pi) nur ungefahr 0 ergibt, genauer 1.225 · 10−16.Ferner sind fur die Kommentierung von Skripten und Funktionen Kommentare wichtig.Diese werden in Scilab mit // eingeleitet, in Matlabr dagegen mit %.Vor allem fur die Programmierung stehen ahnliche Funktionen zur formatierten Ausgabewie in C zur Verfugung, z.B. printf. Zeichenketten konnen mit doppelten ("Resultat")

3

Page 4: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

Abbildung 3: Der Scilab-Hilfe-Browser nach dem Aufruf uber das Menu

Abbildung 4: Der Scilab-Editor

4

Page 5: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

-->16.22+8.2

ans =

24.42

-->13.8*14.7

ans =

202.86

-->77/13

ans =

5.9230769

-->2^5

ans =

32.

-->1/sqrt(2)

ans =

0.7071068

-->%pi/2

ans =

1.5707963

-->sin(%pi)

ans =

1.225D-16

-->exp(1)

ans =

2.7182818

-->log(%e)

ans =

1.

-->help log

-->// ein Kommentar: in Matlab mit "%". Ferner: pi statt %pi

-->(1+2.2^7)/(sqrt(2)+7)

ans =

29.763422

-->ans^4

ans =

784750.22

-->abs(-2)

ans =

2.

-->printf("Resultat: exp(3) = %f",exp(3))

Resultat: exp(3) = 20.085537

Session 1: Arithmetische Operationen

5

Page 6: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

oder mit einfachen Anfuhrungszeichen (’Resultat’) definiert werden.

4 Variablen und Zuweisungen

-->n=4

n =

4.

-->fak=gamma(n+1)

fak =

24.

-->n=12;fak=gamma(n+1)

fak =

4.790D+08

-->x=1/2,y=atan(x)/%pi

x =

0.5

y =

0.1475836

-->x=0.6; y=23*x^10 + 56*x^9 - 107*x^6 - 55*x^5 + 689*x;

-->y , 7*x^3 + 6*x^2 - 55*x -1

y =

404.83443

ans =

- 30.328

-->x=0.1;X=2;X-x

ans =

1.9

Session 2: Variablen und Zuweisungen

Um Zwischenergebnisse zu speichern kann man Zuweisungen an Variablen machen, sowerden in unserer Session 2 auf diese Weise 4! = Γ(4+1) und 12! = Γ(12+1) ≈ 4.790·108

berechnet. (Bisher erfolgte immer stillschweigend Zuweisung an die Pseudovariable ans,die stets den Wert der letzten Berechnung hat.)Man kann in einer Zeile mehrere Berechnungen und Anweisungen durchfuhren: Verwen-det man dabei zur Abgrenzung eines Befehls statt eines Kommas ein Semikolon, so wirddie Ausgabe des Ergebnisses unterdruckt. Das Semikolon kann man auch sonst setzen,wenn man die Ausgabe des Ergebnisses unterdrucken will und lediglich ein Zwischen-ergebnis einer Variablen zuweisen will. Bei den Bezeichnungen ist schließlich noch zubeachten, dass Groß- und Kleinschreibung unterschieden wird, also die Variable X unddie Variable x verschieden sind. Man sagt auch, dass die Sprache case-sensitiv ist.

5 Komplexe Zahlen

Komplexe Zahlen werden unterstutzt, hierbei steht %i fur die imaginare Einheit i undes stehen z.B. Funktionen fur den Realteil, den Imaginarteil, die Konjunktion und den

6

Page 7: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

-->sqrt(-1)

ans =

i

-->real(%i)

ans =

0.

-->imag(%i)

ans =

1.

-->conj(1+%i)

ans =

1. - i

-->abs(1+%i)

ans =

1.4142136

-->exp(%i*%pi)

ans =

- 1. + 1.225D-16i

Session 3: Komplexe Zahlen

Absolutbetrag zur Verfugung. Auch die komplexe Exponentialfunktion wird angeboten,wobei in Session 3 wieder zu beachten ist, dass keine symbolische Rechnungen durch-gefuhrt werden und daher exp(%i*%pi) nicht exakt -1, sondern −1 + 1.225 · 10−16

i ist.In Matlabr wird die imaginare Einheit wieder einfach mit i angesprochen.

6 Vektoren, Matrizen, Gleichungssysteme

Zeilenvektoren werden durch eckigen Klammern und Leerzeichen bzw. Kommata zwi-schen den einzelnen Eintragen definiert. Trennt man die Eintrage hingegen mit Semiko-lons, so definiert man einen Spaltenvektor. Um aus einem Zeilenvektor einen Spaltenvek-tor zu machen (und umgekehrt) kann man ihn mittels ’ transponieren. Das *-Zeichensteht fur die Matrixmultiplikation, daher ist das Matrixprodukt eines Zeilenvektors undeines Spaltenvektors gleicher Dimension ein Skalar (reelle oder komplexe Zahl), namlichdas Skalarprodukt der beiden Vektoren im euklidschen Raum. Hatte man stattdessenversucht, das Matrixprodukt zweier Zeilenvektors zu bilden, hatte man eine Fehlermel-dung erhalten. Ferner stehen die ublichen Operationen wie Addition und Subtraktionzwischen kompatiblen Vektoren (und Matrizen) zur Verfugung.Will man stattdessen kompatible Vektoren elementweise multiplizieren oder dividieren,so muss man .* bzw. ./ als Verknupfung verwenden. Auch Vektoren mit Eintragen ausden komplexen Zahlen sind moglich, dabei muss man allerdings beachten, dass ’ hier-bei nicht nur transponiert, sondern auch komplex konjugiert! Will man komplexwertigeVektoren nur transponieren, so muss man .’ verwenden.Den Betrag eines Vektors berechnet man mit der Funktion norm.Wir wenden uns nun der Erzeugung von bestimmten Vektoren zu, die vor allem beider Erzeugung von Grafiken eine Rolle spielen: Mit der Notation x:y:z erzeugt man

7

Page 8: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

-->xvec=[1 2 3]

xvec =

! 1. 2. 3. !

-->yvec=[1;2;3]

yvec =

! 1. !

! 2. !

! 3. !

-->xvec’-yvec

ans =

! 0. !

! 0. !

! 0. !

-->xvec*yvec

ans =

14.

-->xvec’ .* yvec

ans =

! 1. !

! 4. !

! 9. !

-->[2 3 4] ./ yvec’

ans =

! 2. 1.5 1.3333333 !

-->[1+%i;2]’ , [1+%i;2].’

ans =

! 1. - i 2. !

ans =

! 1. + i 2. !

-->norm([1,2,3])

ans =

3.7416574

-->z=1:0.5:5

z =

! 1. 1.5 2. 2.5 3. 3.5 4. 4.5 5. !

-->length(z)

ans =

9.

-->v=linspace(1,5,9)

v =

! 1. 1.5 2. 2.5 3. 3.5 4. 4.5 5. !

-->v(5)

ans =

3.

Session 4: Vektoren, Matrizen, Gleichungssysteme (1)

8

Page 9: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

-->v(2:4)

ans =

1.5 2. 2.5

-->t=1:4

t =

! 1. 2. 3. 4. !

-->2*t

ans =

! 2. 4. 6. 8. !

-->sin(t*%pi/2)

ans =

! 1. 1.225D-16 - 1. - 2.449D-16 !

-->A=[1 2; 3 4]

A =

! 1. 2. !

! 3. 4. !

-->A(2,2)

ans =

4.

-->A(1,2)

ans =

2.

-->B=ones(2,2)

B =

! 1. 1. !

! 1. 1. !

-->A+B

ans =

! 2. 3. !

! 4. 5. !

-->B-1

ans =

! 0. 0. !

! 0. 0. !

-->A*ones(2,3)

ans =

! 3. 3. 3. !

! 7. 7. 7. !

-->size(ans)

ans =

! 2. 3. !

Session 5: Vektoren, Matrizen, Gleichungssysteme (2)

9

Page 10: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

-->length(t), zeros(1,length(t))

ans =

4.

ans =

! 0. 0. 0. 0. !

-->eye(2,2)

ans =

! 1. 0. !

! 0. 1. !

-->diag(1:4)

ans =

! 1. 0. 0. 0. !

! 0. 2. 0. 0. !

! 0. 0. 3. 0. !

! 0. 0. 0. 4. !

-->det(diag(1:4))

ans =

24.

-->inv(diag(1:3))

ans =

! 1. 0. 0. !

! 0. 0.5 0. !

! 0. 0. 0.3333333 !

-->A=diag(1:3);b=ones(3,1)

b =

! 1. !

! 1. !

! 1. !

-->A\bans =

! 1. !

! 0.5 !

! 0.3333333 !

-->inv(A)*b

ans =

! 1. !

! 0.5 !

! 0.3333333 !

-->rank(A)

ans =

3.

Session 6: Vektoren, Matrizen, Gleichungssysteme (3)

10

Page 11: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

-->spec(A)

ans =

! 1. !

! 2. !

! 3. !

-->[eig,dia]=spec(A)

dia =

! 1. 0. 0. !

! 0. 2. 0. !

! 0. 0. 3. !

eig =

! 1. 0. 0. !

! 0. 1. 0. !

! 0. 0. 1. !

-->mtlb_eig(A)

ans =

! 1. !

! 2. !

! 3. !

Session 7: Vektoren, Matrizen, Gleichungssysteme (4)

einen Vektor a = (a1, . . . , an), fur dessen Komponenten ai = x + (i − 1) · y gilt, wobein = max{i : x + (i − 1) · y ≤ z}. Die abgekurzte Notation x:z steht fur x:1:z. Ei-ne andere Moglichkeit, solche Vektoren mit aquidistanten Eintragen zu erzeugen, d.h.bei denen die Differenz zwischen den aufeinanderfolgenden Komponenten konstant ist,ist die Funktion linspace (steht fur

”linearly spaced“). linspace(x,z,n) liefert einen

Vektor a mit n Komponenten, wobei ai = x + (i − 1) · z−xn−1

fur i = 1, . . . , n.Zur Bestimmung der Dimension eines Vektors gibt es die Funktion length, auf eineeinzelne Komponenten des Vektors v greift man mit v(i) zu, etwa v(5) fur die 5.Kom-ponente. Will man mehrere Komponenten gleichzeitig auswahlen, so kann man dies miteinem Indexvektor erreichen, so wahlt v(2:4) den 2. bis 4. Eintrag des Vektors v aus.Die (allermeisten) arithmetischen Funktionen, die in Scilab bzw. Matlabr definiertsind, akzeptieren als Argumente auch Vektoren (oder gar Matrizen) und berechnen danndie Funktionsvorschrift fur jede einzelne Komponente, z.B. sin(t*%pi/2) fur t=1:4

liefert (sin π2, sin π, sin 3π

2, sin 2π) = (1, 0,−1, 0).

Eine Matrix A =

[

a11 ... a1m......

an1 ... anm

]

erzeugt man zeilenweise, indem man die Zeilen mittels ei-

nes Semikolons trennt, also A=[1 2;3 4] fur die Matrix A = [ 1 23 4

]. Die einzelnen Eintragekann man - wenn gewunscht - auch durch Kommata trennen, etwa A=[1,2;3,4]. Auf denEintrag in der i-ten Zeile und j-ten Spalte greift man mittels A(i,j) zu. Fur Matrizen,deren Eintrage alle 1 sind, steht die Funktion ones zur Verfugung, etwa B=ones(2,3) furdie Matrix B = [ 1 1 1

1 1 1] oder ones(1,3) fur die 1× 3-Matrix bzw. den dreidimensionalen

Zeilenvektor (1, 1, 1). Analog gibt es die Funktion zeros fur Nullmatrizen.Matrizen addiert man mit dem Pluszeichen, etwa A+B, um zwei kompatible Matrizen Aund B zu addieren. Fuhrt man eine Rechenoperation mit einem Skalar durch, so wirddiese Operation mit jedem Eintrag durchgefuhrt, etwa ergibt B-1 fur unsere Einsermatrix

11

Page 12: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

B die Nullmatrix, und 2*B multipliziert jeden Eintrag mit 2. Die Matrixmultiplikationkompatibler Matrizen erfolgt ebenfalls mit dem *-Zeichen.Die Dimension einer Matrix erhalt man mittels der Funktion size.Einheitsmatrizen, also Matrizen, deren Eintrage auf der Hauptdiagonalen 1 sind undderen sonstige Eintrage 0 sind, liefert die Funktion eye. Will man stattdessen andereWerte auf der Hauptdiagonalen, so muss kann man die Funktion diag benutzen, die einequadratische Matrix erzeugt, deren Hauptdiagonale mit dem Vektor ubereinstimmt, denman als Argument beigesteuert hat. Die Inverse einer Matrix bekommt man mit derFunktion inv, so dass inv(A)*b das Gleichungssystem Ax = b lost. Dieses kann manjedoch effizienter (und numerisch stabiler) mit dem Kommando A\b losen, bei dem dasProgramm nicht als Zwischenschritt die Inverse bestimmen muss. Ferner erhalt man denRang einer Matrix mit der Funktion rank.Die Eigenwerte einer Matrix liefert in Scilab die Funktion spec. Hier ist eine Besonder-heit von Funktionen zu beachten, die mehr als ein Ergebnis als Output liefern konnen:Weist man das Funktionsergebnis nicht explizit einem Vektor mit zwei Eintragen zu,dann wird – vereinfacht gesagt – nur der erste Output angezeigt und der zweite Outputvergessen, in diesem Fall werden also nur die Eigenwerte geliefert. Andernfalls erhaltman neben den Eigenwerten (in einer Diagonalmatrix) auch eine Matrix, deren Spaltenaus den Eigenvektoren gebildet wird. In Matlabr heißt die Funktion zur Eigenwert-berechnung stattdessen eig und verhalt sich bei zweifachem Output etwas anders (dieEigenvektoren haben anderes Vorzeichen). Fur einige weiterer solcher Funktionen, beidenen das Verhalten in beiden Programmen voneinander abweicht, gibt es in Scilab

Funktionsversionen, die das Prafix mtlb_ haben, um bessere Kompatibilitat zu errei-chen.

7 Logische Operatoren

Logische Operatoren werden vor allem fur die Programmierung gebraucht. In unserer Ses-sion 8 erhalten wir als Antwort auf die Frage, ob n! fur n = 10 großer als 107 und kleinerals 108 ist, die Antwort F fur

”false“. Hierbei dient & als logisches

”und“. Das logische

”oder“ wird mit | und die logische Verneinung mit ~ ausgedruckt. Test auf Gleichheit

wird mit ==, auf Ungleichheit mit ~= bezeichnet. Die Wahrheitswerte selbst werden mit%T fur

”true“ und mit %F fur

”false“ angesprochen, in Matlab wieder einfach T und F.

Stellt man Vergleiche zwischen Vektoren gleicher Dimension an, so wird elementweiseverglichen. Will man wissen, ob alle Eintrage eines Vektors aus Wahrheitswerten

”true“

sind, so kann man die Funktion and benutzen, und will man wissen, ob mindestens einEintrag

”true“ ist, so die Funktion or. In Matlabr heißen diese Funktionen all und

any.

8 Programmierung: if, while, for

Auch Konstrukte zur Programmierung stehen zur Verfugung. In Session 9 wird hierbeizuerst der 5-dimensionale Vektor a mit Nullen initialisiert und anschließend werden ineiner for-Schleife vom Benutzer die Werte fur den i-ten Eintrag (i = 1, . . . , 5) erbe-ten, ehe die Summe dieser 5 Zahlen berechnet wird. In dem nachsten Codeabschnittwird mittels einer if-Abfrage die Zeichenketten-Variable out auf ’positiv’ bzw. auf

12

Page 13: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

-->n=10;(gamma(n+1)>1e+7) & (gamma(n+1)<=1e+8)

ans =

F

-->x=-3;y=(1+x)/(1-x); (y<0) | (y>1)

ans =

T

-->~((y>=0) & (y<=1))

ans =

T

-->y==-0.5, y~=0

ans =

T

ans =

T

-->%T | %F

ans =

T

-->[1,2,3]>[1,1,1]

ans =

! F T T !

-->and([1,2,3]>[1,1,1])

ans =

F

-->or([1,2,3]>[1,1,1])

ans =

T

Session 8: Logische Operatoren

13

Page 14: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

-->a=zeros(5,1);for n=1:5 a(n)=input(’Wert eingeben: ’); end

Wert eingeben: -->1

Wert eingeben: -->4

Wert eingeben: -->3

Wert eingeben: -->7

Wert eingeben: -->1.1

-->sum(a)

ans =

16.1

-->if input(’Zahl: ’)>0 out=’positiv’; else out=’nicht positiv’; end

Zahl: -->0.2

-->disp(out)

positiv

-->a=455756;s=1;i=0;

-->while(s<a) do s=2*s; i=i+1; end; i,s

i =

19.

s =

524288.

Session 9: Programmierung: if, while, for

’nicht positiv’ gesetzt, je nachdem, was der Benutzer fur eine Zahl eingibt. Fernerwird noch eine while-Schleife vorgestellt. Hierbei wird zu einer gegebenen Zahl a dienachste Zweierpotenz bestimmt, also die Zahl s = 2i (i ∈ N0), so dass 2i ≥ a, wobei idie kleinstmogliche naturliche Zahl mit dieser Eigenschaft ist. Die Ergebnisse i und s

werden dann ausgegeben.

9 Skripte, Funktionen, Integrale

Meistens will man solche Operationen allgemein als Funktion definieren. Dies geschiehtfur unser Zweierpotenzbeispiel zu Beginn von Session 10, in der die Funktion pot2 defi-niert wird. Im Funktionskopf function s=pot2(a) wird dabei festgelegt, dass die Funk-tion ein Argument entgegennimmt, hier a, und bei Beendigung der Funktion den aktuel-len Wert von s als Ergebnis zuruckgibt. Will man den Inhalt mehrerer Variablen zuruck-geben, so muss man dies wie im anschließenden Beispiel (function [i,s]=pot22(a))machen. Hierbei sind noch Eigenheiten bei der Abspeicherung bzw. Ausgabe zu beachten.Eine Funktion muss in Matlab

r (aber nicht in Scilab) in eine eigene Datei mit der En-dung

”.m“ und dem Funktionsnamen als Bezeichnung (also die Funktion pot2 in die Datei

pot2.m), einem sogenannten”m-File“. Ferner muss man das schließende endfunction

weglassen. Die Funktion steht dann sofort zur Verfugung, ohne dass man die Datei extraladen musste.In Scilab kann man Funktionen wie oben an der Kommandozeile definieren,∗ als auchin einer eigenen Datei (sogar mehrere Funktionen auf einmal) oder man kann mehrere

∗Es gibt in Scilab (und in Matlabr) noch eine abgekurzte Notation mittels deff (bzw. inline)fur kurze Funktionsdefinitionen.

14

Page 15: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

-->function s=pot2(a)

--> s=1;i=0;

--> while(s<a) do s=2*s; i=i+1; end;

-->endfunction

-->pot2(455756)

ans =

524288.

-->function [i,s]=pot22(a)

--> s=1;i=0;

--> while(s<a) do s=2*s; i=i+1; end;

-->endfunction

-->pot22(455756)

ans =

19.

-->a=pot22(455756)

a =

19.

-->[a,i]=pot22(455756)

i =

524288.

a =

19.

-->exec(’Beispiel.sci’);

Hallo

log(2)=0.693147

ans =

0.

ans =

- 1.8695331

-->integrate(’exp(-x^2)’,’x’,0,1)

ans =

0.7468241

-->function y = expfunc(x); y=exp(-x^2) endfunction

-->intg(0,1,expfunc)

ans =

0.7468241

-->exec(’newtonsolve.sci’);

-->function y=func(x); y=x*sin(1/x)-0.2*exp(-x) endfunction

-->function y=df(x); y=sin(1/x)-1/x*cos(1/x)+0.2*exp(-x) endfunction

-->newtonsolve(func,0.5,df,1e-6,100)

ans =

0.3637157

-->fsolve(0.5,func,df,1e-6)

ans =

0.3637157

Session 10: Programmierung: Skripte, Funktionen

15

Page 16: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

Anweisungen in eine”Skript-Datei“ schreiben. Diese mussen dann aber (im Gegensatz zu

Matlabr) extra geladen werden, z.B. mittels exec(’pot2.sci’) (oder wie in der Sessi-on fur die Skriptdatei ’Beispiel.sci’) oder uber den Menupunkt File→File Operationsaufgerufen werden.Diese Funktionen konnen selbst wieder Argumente anderer Funktionen sein. Hat manetwa eine Funktion expfunc fur f(x) = exp(x + 1) definiert, so kann man eine Routi-

ne zur numerischen Berechnung des bestimmten Integrals∫

1

0e−x2

dx aufrufen, fur dases bekanntlich keine explizite Formel gibt: intg(0,1,expfunc). In Matlabr ware dieSyntax quad(’expfunc’,0,1), wenn die Funktion expfunc in dem m-File expfunc.m

definiert ist. Ferner gibt es in Scilab noch eine Funktion integrate, wo man die Funk-tion als Zeichenkette ubergibt, etwa integrate(’exp(-x^2)’,’x’,0,1).In Abbildung 4 findet man schließlich eine kompliziertere Funktion (in einer Dateinewtonsolve.sci), die das Newton-Verfahren zur Nullstellenbestimmung implemen-tiert, auf das wir hier nicht naher eingehen. Nach dem Laden der Datei wird fur f(x) =x sin( 1

x) − 0.2e−x mit Ableitung f ′(x) = sin( 1

x) − 1

xcos( 1

x) + 0.2e−x diese selbstdefinierte

Funktion aufgerufen. Das ermittelte Ergebnis stimmt mit dem Ergebnis der schon inScilab vorhandenen Funktion fsolve zur Nullstellenbestimmung uberein.

10 Grafiken

-->x=0.01:1e-3:0.5;y=x .* sin(1 ./ x);

-->plot(x,y)

-->xtitle(’Graph von f(x)=x*sin(1/x)’,’x’,’y’);

Graph von f(x)=x*sin(1/x)

x

y

0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50−0.3

−0.2

−0.1

0.0

0.1

0.2

0.3

0.4

0.5

Session 11: Grafiken (1)

Bei den Grafiken sind die Unterschiede zwischen Scilab und Matlabr am großten. Wirwerden uns daher hauptsachlich auf Scilab beschranken.Eine sehr einfache Grafik wird in Session 11 erzeugt: Zuerst wird ein x-Vektor mit aqui-distanten Eintragen und dann ein y-Vektor (fur f(x) = x sin(1/x)) durch elementweise

16

Page 17: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

Operationen erzeugt (man beachte .* bzw. ./ fur elementweise Multiplikation bzw. Di-vision). Mittels plot(x,y) werden dann die durch Linien verbundenen Punkte in einpassendes Koordinatensystem gezeichnet. Die Grafik erscheint in einem eigenem Fen-ster, in dem man z.B. die Moglichkeit zur Abspeicherung in eine Bilddatei hat. Mit demxtitle-Befehl wird dann noch eine Bilduberschrift und die Bezeichnung der x-Achseund y-Achse definiert. In Matlabr gibt es dafur die getrennten Befehle title, xlabelund ylabel.Fuhrt man im Anschluss die Befehle der ersten Zeile von Session 12 durch, so stelltman fest, dass Scilab versucht, beide Graphen in ein gemeinsames Koordinatensystemzu packen, was hier nicht gezeigt wird.Will man dies in Matlabr, so muss man den Befehl hold verwenden. In Scilab kann mandieses Verhalten generell mit set(gca(),“auto clear“,“on“) ausschalten. Daher wirddas Grafikfenster mittels clf() geloscht, ehe wieder gezeichnet wird. Man beachte ferner,dass linspace als Standardvorgabe 100 Punkte in dem angegebenen Intervall erzeugt,wenn man wie in linspace(-% pi,% pi) auf die Angabe einer Anzahl verzichtet.In Session 12 wird die Moglichkeit eines Grafikgitters und der einer anderen Achsen-platzierung vorgestellt; in Matlab

r sind die entsprechenden Befehle etwas anders –grid statt xgrid() – bzw. gar nicht moglich: set(gca,’XAxisLocation’,’top’) istdie einzige Alternative zu set(gca,’XAxisLocation’,’bottom’)

Ferner kann man statt durchgezogener schwarzer Linien mit anderen Zeichen, z.B.”+“

oder”x“, oder mit anderen Farben zeichnen, siehe Session 13.

Einige weitere Grafikmoglichkeiten werden in Session 14 kurz vorgestellt. Zuerst wirdmittels param3d (stattdessen plot3d in Matlabr) eine Kurve im R

3 gezeichnet, hiereine Schraubenlinie (Helix), wobei auch noch ein spezieller Blickwinkel gewahlt wer-den kann (2.Befehl), vgl. erstes Bild. Anschließend wird auf zwei verschiedene Arten derGraph der Funktion f : [0, 2π]×[0, 2π] → R, f(x, y) = cos(x) sin(y) gezeichnet, vgl. zwei-tes Bild (stattdessen in Matlabr, z.B.: [X,Y]=meshgrid(t,t);Z=sin(X) .* cos(Y)

und dann mesh(X,Y,Z)). Will man die Topographie deutlicher machen, so ist eine Farb-palette fur die Hohen nutzlich. In Matlabr verwendet man statt dem xset-Befehleinfach colormap(’hot’) und surf an Stelle von plot3d1.In Session 15 zwei weitere Moglichkeiten, den Graphen reeller Funktionen zweier Va-riablen zu zeichnen, hier von f : [−2, 2] × [−2, 2] → R, f(x, y) = x4 − 3y2x + y4,wobei im einen Fall (fplot3d) die Funktion dem Graphik-Befehl mit ubergeben wird,im anderen Fall (plot3d) werden die Funktionswerte mittels feval vorher auf demx-y-Gitter ausgewertet. Eine andere Moglichkeit der Veranschaulichung sind Hohenli-nien des Graphen, wie in den beiden nachsten Befehlen. Statt feval verwendet manin Matlabr z.B. [xm,ym]=meshgrid(x,y);zm=xm.^4-ym.^2+ym.^4; und dann etwacontour(xm,ym,zm,[-1,-0.5,0,1,3,10,20]). Optisch beeindruckender wird die Gra-fik wieder mit einer Farbpalette. Eine andere Farbpalette (und ein spezieller Blickwinkel)wurde beim letzten Befehl fur den Graphen von f verwendet.Abschließend sei nochmals betont, dass viele der Grafik-Befehle in Matlabr eine andereSyntax haben und wir nur zum Teil darauf hingewiesen haben.

17

Page 18: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

-->x=linspace(-%pi,%pi);y=sin(x);plot(x,y)

-->clf()

-->plot(x,sin(x))

−4 −3 −2 −1 0 1 2 3 4−1.0

−0.8

−0.6

−0.4

−0.2

0.0

0.2

0.4

0.6

0.8

1.0

-->clf();plot(x-%pi,sin(x),x+%pi,cos(x))

-->a=gca();a.x_location = "middle";a.y_location = "middle";

-->xgrid()

−4 −2 0 2 4 6 8 10

−1.0

−0.8

−0.6

−0.4

−0.2

0.0

0.2

0.4

0.6

0.8

1.0

Session 12: Grafiken (2)

18

Page 19: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

-->clf();x=(0:0.1:2*%pi)’

-->plot2d(x,[sin(x),sin(2*x),sin(3*x)],style=[-1,-2,3],...

rect=[0,-2,2*%pi,2]);

0 1 2 3 4 5 6−2.0

−1.5

−1.0

−0.5

0.0

0.5

1.0

1.5

2.0

Session 13: Grafiken (3)

11 Polynome

Fur Polynome† gibt es in Scilab einen eigenen Datentyp. Mittels der Funktion poly wer-den Polynome sowohl uber ihre Koeffizienten als auch uber ihre Nullstellen (engl. roots)definiert, beispielsweise in Session 16 das Polynom 4+0·x+1·x2 = 4+x2 uber die Koeffizi-enten [4 0 1] bzw. das Polynom p(x) = (x−1)(x−2)(x−3) = x3−6x2+11x−6 uber dieNullstellen 1:3, wobei hier auch abgekurzt p=poly(1:3,’x’) geschrieben werden konnte.Eine dritte Moglichkeit ist die Definition uber andere Polynome. Im Beispiel wird zuerst xals das lineare Polynom f(x) = x definiert und hiernach s als s(x) = (f(x))2+1 = x2+1.Polynomauswertungen an bestimmten Stellen ubernimmt die Funktion horner, etwahorner(p,3), um p(3) zu berechnen. Nullstellen werden mittels der Funktion roots,Ableitungen mittels derivat bestimmt. Polynomdivision geschieht schließlich uber dieFunktion pdiv, die Rest und Quotient zuruckliefert, also in unserem Beispiel fur obigesp(x) und s(x) die Zerlegung p(x) = s(x) ·Q(x)+R(x) mit Q(x) = x−6 und R(x) = 10xbestimmt.In Matlabr ist die Darstellung anders, dort werden Polynome in der Form eines Zeilen-vektors, der fur die Koeffizienten steht, eingegeben und behandelt, etwa roots([1 2 5]),oder auch mittels poly uber die Nullstellen definiert, etwa p=poly([1 2 3]). Polynom-multiplikation kann daher nicht einfach uber * geschehen, sondern die notige Funktionheißt conv, wahrend die Funktion fur die Polynomdivision hier deconv, die fur Poly-nomauswertungen polyval und die fur Ableitungen polyder heißt.

†und auch fur rationale Funktionen, d.h. Bruche von Polynomen

19

Page 20: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

-->t=0:0.01:%pi;param3d(exp(-t/2).*sin(t*10),exp(-t/2).*cos(t*10),t);

-->clf();

-->param3d(exp(-t/2).*sin(t*10),exp(-t/2).*cos(t*10),t,25,60,’X1@X2@X3’);

-->clf();t=-%pi:0.2:%pi;plot3d(t,t,sin(t)’*cos(t),35,45,’X@Y@Z’,[2,2,4]);

-->clf();x=linspace(0,2*%pi,31); z=cos(x)’*sin(x); plot3d(x,x,z)

-->xset("colormap",hotcolormap(32));plot3d1(x,x,z)

-->xset("default");

0.0

0.5

1.0

1.5

2.0

2.5

3.0

3.5

Z

−0.80

−0.20

0.40

1.00X

−1.0

−0.6

−0.2

0.2

0.6

1.0Y

−1

0

1

Z

−4

−3

−2

−1

0

1

2

3

4

X

−4−3

−2−1

01

23

4

Y

Session 14: Grafiken (4)

20

Page 21: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

-->function [z]=f(x,y) , z=x^4-3*y^2*x+y^4; endfunction;

-->x=-2:0.1:2 ;y=x;clf();fplot3d(x,y,f,alpha=3,theta=20)

-->clf();z=feval(x,y,f);plot3d(x,y,z,alpha=3,theta=20)

-->clf();contour(x,y,z,10)

-->clf();fcontour(x,y,f,[-1,-0.5,0,1,3,10,20])

-->xset("colormap",hotcolormap(32));

-->x=-2:0.05:2;y=x;z=feval(x,y,f);

-->clf();colorbar(min(z),max(z));fgrayplot(x,y,f)

-->clf();x=linspace(-2,2,200);y=x;Sfgrayplot(x,y,f)

-->xset("colormap",jetcolormap(32));

-->clf();x=-2:0.1:2 ;y=x;fplot3d1(x,y,f,alpha=3,theta=20)

-->xset("default");clf()

−1.3

13

27

42

56

−2.0 −1.5 −1.0 −0.5 0.0 0.5 1.0 1.5 2.0−2.0

−1.5

−1.0

−0.5

0.0

0.5

1.0

1.5

2.0

−10

0

10

20

30

40

50

60

Z

−2.0

−1.5

−1.0

−0.5

0.0

0.5

1.0

1.5

2.0

X−2.0

−1.5−1.0

−0.50.0

0.51.0

1.52.0

Y

Session 15: Grafiken (5)

21

Page 22: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

-->poly([4 0 1],’x’,"coeff")

ans =

2

4 + x

-->roots(ans)

ans =

2.i

- 2.i

-->x=poly(0,’x’);s=x^2+1

s =

2

1 + x

-->p=poly(1:3,’x’,’roots’)

2 3

- 6 + 11x - 6x + x

-->horner(p,3)

ans =

0.

-->horner(p,0)

ans =

- 6.

-->roots(p)

ans =

1.

2.

3.

-->derivat(p)

ans =

2

11 - 12x + 3x

-->[R,Q]=pdiv(p,s)

Q =

- 6 + x

R =

10x

Session 16: Polynome

22

Page 23: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

Literatur

[1] Benker, Hans: Mathematik mit Matlab: eine Einfuhrung fur Ingenieure undNaturwissenschaftler. Springer, 2000. – B.292, FH 2001.04324

[2] Beucher, Ottmar: Matlab und Simulink : grundlegende Einfhrung. Pearson Stu-dium, 2002. – B.292, FH 2002.16227

[3] Biran, Adrian ; Breiner, Moshe: Matlab fur Ingenieure. Addison-Wesley, 1997.– B.292, FH 1997 a 788, engl. Ausgabe FH 1997 a 2190

[4] Duffy, Dean G.: Advanced engineering mathematics with Matlab. Chapman &Hall, 2003. – C.101, FH 2004.10503

[5] Grupp, Frieder ; Grupp, Florian: Matlab 7 fur Ingenieure : Grundlagen undProgrammierbeispiele. Oldenbourg, 2004. – B.292, FH 2005.09812, altere Auflage:2003.13635

[6] Higham, Desmond J.: Matlab guide. SIAM, 2000. – B.284, FH 2001.00883

[7] Magrab, Edward B.: An engineer’s guide to Matlab. Prentice-Hall, 2000. –B.292, FH 2002.03283

[8] Malek-Madani, Reza: Advanced engineering mathematics: with Mathematica andMatlab. Bd. 1 und 2. Addison-Wesley, 1998. – B.292, 1998 a 5607 [Vol. 1] bzw.5696 [Vol. 2]

[9] Nakamura, Shoichiro: Numerical analysis and graphic visualization with Matlab.Prentice Hall, 1996. – B.292, FH 1996 a 7265

[10] Palm, William J.: Introduction to Matlab 6 for engineers. McGraw-Hill, 2001. –B.292, FH 2001.13486

[11] Pincon, B.: Eine Einfuhrung in Scilab (Ubersetzer: Helmut Jarausch).http://scilabsoft.inria.fr/contrib/displayContribution.php?fileID=

211&attachFileName=PinconD.pdf. – Online–Ressource, Abruf: 17.April 2006

[12] Pratap, Rudra: Getting started with Matlab: version 6. Oxford Univ. Press,2002. – B.292, FH 2002.08178

[13] Rouault, Jacques-Deric: SCILAB STEP-TO-STEP WEB SITE. http://h0.web.u-psud.fr/orscilab/index.html. – Online–Ressource, Abruf: 17.April 2006

[14] Schweizer, Wolfgang: Matlab kompakt. Oldenbourg, 2005. – B.292, FH 2005.09923

[15] Uberhuber, Christoph ; Katzenbeisser, Stefan: Matlab 6 : eine Einfuhrung.Springer, 2000. – B.292, FH 2001.01689

23

Page 24: Materialien zur Vorlesung - math.uni-magdeburg.de · me erh¨altlich ist und im Standardbefehlsumfang weitgehend ident isch mit Matlabr ist, die gr¨oßten Unterschiede sind hierbei

Anhang: Sehnentrapezregel und Simpson’sche Regel

b∫

a

fk(x) dx =(y0

2+ y1 + . . . + yk−1 +

yk

2

)

h = h

((

k∑

j=0

yj

)

−y0

2−

yk

2

)

function erg = strintegral(a,b,func,k)

x= linspace(a,b,k+1);

h=(b-a)/k;

y=func(x);

erg=h*(sum(func(x))-y(1)/2-y(k+1)/2);

endfunction

Datei 1: Sehnentrapezregel

b∫

a

fk(x)dx =h

3

m∑

j=1

(y2j−2 + 4y2j−1 + y2j) =h

3

(

4

(

m∑

j=1

y2j−1

)

+ 2

(

m∑

j=0

y2j

)

− y0 − y2m

)

function erg = simpsonint(a,b,func,m)

k = 2*m;

h = (b-a)/k;

x1 = linspace(a,b,m+1); x2 = linspace(a+h,b-h,m);

y1 = func(x1); y2 = func(x2);

erg=4*sum(y2)+2*sum(y1)-y1(1)-y1(m+1);

erg=erg*h/3;

endfunction

Datei 2: Simpson’sche Regel

-->function y=f(x); y=sin(x) endfunction

-->strintegral(0,%pi,f,10)

ans =

1.9835235

-->strintegral(0,%pi,f,100)

ans =

1.9998355

-->simpsonint(0,%pi,f,10)

ans =

2.0000068

-->simpsonint(0,%pi,f,50)

ans =

2.

Session 17: Test fur Sehnentrapezregel und Simpson’sche Regel

24