Anwendungssoftware III (MATLAB)mliedl/data/matlab_specialtopics_VIII.pdf · >> f = sym(’f(x)’);...

34
M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 1 / 34 Anwendungssoftware III (MATLAB) VIII - Spezielle Themen Michael Liedlgruber Fachbereich Computerwissenschaften Universit ¨ at Salzburg Sommersemester 2014

Transcript of Anwendungssoftware III (MATLAB)mliedl/data/matlab_specialtopics_VIII.pdf · >> f = sym(’f(x)’);...

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 1 / 34

Anwendungssoftware III (MATLAB)VIII - Spezielle Themen

Michael LiedlgruberFachbereich Computerwissenschaften

Universitat Salzburg

Sommersemester 2014

Spezielle Themen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 2 / 34

Im Folgenden behandeln wir folgende spezielle Themen:

� Effizientes Programmieren� Symbolisches Rechnen

Vektorisierte Programmierung

Spezielle Themen

Effiziente Programmierung

Vektorisiert Programmieren

Vectorize

Preallocation

Zusammenfassung

Symbolisches Rechnen

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 3 / 34

Obwohl man mittels Schleifen sehr oft Probleme auf eine einfache Weise losenkann, sollte man darauf verzichten wann immer das moglich ist.Denn: Schleifen werden in MATLAB sehr ineffizient ausgefuhr t.

Wir haben bereits gesehen, dass es eine große Starke von MATLAB ist, dassnahezu alle MATLAB-Funktionen auch Vektoren oder Matrizen alsArgumente akzeptieren .

Wollen wir zum Beispiel alle Zahlen von 1 bis 1000 aufsummieren, konnte mandies mit einer for-Schleife wie folgt losen:

>> summe = 0;

for i=1:1000

summe = summe+i;

end

Eine viel effizientere Losung ist aber das Verwenden von vektorisiertenArgumenten:

>> x = 1:1000;

summe = sum(x);

Vektorisierte Programmierung

Spezielle Themen

Effiziente Programmierung

Vektorisiert Programmieren

Vectorize

Preallocation

Zusammenfassung

Symbolisches Rechnen

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 4 / 34

Weiteres Beispiel:Will man zum Beispiel die Funktion

f(x) = 1 +√

|10 · sin(x)/ cos(x)|

fur diskrete x von 1 bis n = 100 berechnen, kann man dies wie folgt losen:

>> n = 100;

>> s = zeros(1, n);

>> for i=1:n

s(i) = 10*sin(i)/cos(i);

s(i) = 1+sqrt(abs(s(i)));

end

Der elegantere und effizientere Weg ist aber, Vektorisierung zu verwenden:

>> n = 100; x = 1:n;

>> a = 10*sin(x); % Werte fur Za hler berechnen

>> b = cos(x); % Werte fur Nenner berechnen

>> s = a./b; % elementweise Division

>> s = 1+sqrt(abs(s)); % elementweiser Betrag und Wurzel

Vektorisierte Programmierung

Spezielle Themen

Effiziente Programmierung

Vektorisiert Programmieren

Vectorize

Preallocation

Zusammenfassung

Symbolisches Rechnen

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 5 / 34

Im vorherigen Beispiel haben wir nutzliche Eigenschaften von MATLAB genutzt:

� Skalare mit Vektoren addieren (funktioniert auch mit Subtraktion).� Skalare mit Vektoren multiplizieren (funktioniert auch mit Division).

Das Ergebnis dieser Berechnungen ist wieder ein Vektor. Dieser hat die gleicheLange und Orientierung wie der Eingangsvektor.

Die vectorize-Funktion

Spezielle Themen

Effiziente Programmierung

Vektorisiert Programmieren

Vectorize

Preallocation

Zusammenfassung

Symbolisches Rechnen

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 6 / 34

Hat man eine bestimmte Funktion und will diese vektorisieren, kann die Funktionvectorize dabei behilflich sein.

vectorize fugt bei einer gegebenen Funktion vor jedem ^, / und * einen Punktein.

>> s = vectorize(’(sin(x)* cos(x))/y’)

s =

(sin(x).*cos(x))./y

Das Ergebnis dieser Funktion ist ein String, welcher dann mittels der Funktioneval evaluiert werden kann:

>> x = 1:100; y = 10;

eval(s)

In diesem Beispiel evaluiert MATLAB die gegebene Funktion fur die gegebenenWerte von x und y.

Bei Schleifen Speicher pr aallozieren

Spezielle Themen

Effiziente Programmierung

Vektorisiert Programmieren

Vectorize

Preallocation

Zusammenfassung

Symbolisches Rechnen

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 7 / 34

Es gibt aber auch Situationen, in welchen man ein Problem nicht ohne Schleifenlosen kann.

Wie bereits schon fruher besprochen, sollte in solchen Fallen dieAusgabevariable bereits in der richtigen Gr oße vorliegen (pr aalloziert) . Diesfuhrt zu

� einer schnelleren Programmausfuhrung.� einer geringeren Fehleranf alligkeit , da man sich bereits im Vorhinein uber

Große und Orientierung der Ausgabevariable Gedanken machen muss.

In folgendem Beispiel sei eine Matrix A gegeben. Das Programm soll nun dieEigenwerte der Matrizen Ak fur k = 1, . . . , 10 spaltenweise in eineAusgabematrix schreiben:

>> A = rand(2, 2); % A hat 2 Eigenwerte

>> E = zeros(2, 10); % Pr a allokation der Ausgabevariable

>> for k=1:10

E(:, k) = eig(A^k);

end

Zusammenfassung

Spezielle Themen

Effiziente Programmierung

Vektorisiert Programmieren

Vectorize

Preallocation

Zusammenfassung

Symbolisches Rechnen

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 8 / 34

Wie wir gesehen haben, hat das Ersetzen einer Schleife durch eineVektoroperation (Vektorisierung) folgende Vorteile:

� GeschwindigkeitViele der in MATLAB vorhandenen Funktionen werden schnellerausgefuhrt , wenn man als Argumente Vektoren (Matrizen) verwendet.

� UbersichtlichkeitOft ist die vektorisierte Version eines Programms einfacher zu lesen .

� ForschungIn der Wissenschaft ist man oft daran interessiert, Problemstellungen zuvektorisieren , da diese auf bestimmten Rechnerarchitekturen effizienterausgefuhrt werden konnen.

Folgende Grundsatze sind also wichtig:

� Schleifen vermeiden wann immer m oglich� Vektorisieren wann immer m oglich

Symbolisches Rechnen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 9 / 34

Beim symbolischen Rechnen wird mit Variablen gerechnet, welche nicht miteinem Wert belegt sein mussen.

Um in MATLAB symbolische Berechnungen durchfuhren zu konnen, muss dieSymbolic Math Toolbox installiert sein.

Symbolische Berechnungen bieten zum Beispiel folgende Vorteile:

� arithmetische Operationen konnen exakt durchgefuhrt werden� Rechnen mit Polynomen� differenzieren und integrieren wird moglich (auch unbestimmt)

Symbolisches Rechnen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 10 / 34

Um symbolisch rechnen zu konnen, mussen zuerst die benotigten symbolischenVariablen angelegt werden. Dafur gibt es in MATLAB das Kommando syms.

>> syms x y

Damit werden die symbolischen Variablen x und y angelegt und man kannsymbolische Terme eingeben, z.B.

>> x^2+y^2

ans =

x^2 + y^2

Symbolisches Rechnen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 11 / 34

Terme vereinfachen oder ausmultiplizierenMit Hilfe der Funktion simplify kannn man symbolische Terme vereinfachen .

So gilt zum Beispiel bekanntlicherweise

(a+ b)2 = a2 + 2ab+ b2

Wir konnen die rechte Seite dieser Gleichung mit MATLAB vereinfachen:

>> syms a b

>> simplify(a^2+2*a*b+b^2)

ans =

(a + b)^2

Wie wir sehen, erhalten wir die linke Seite der obigen Gleichung.

Wollen wir aus der linken Seite die rechte Seite berechnen, verwenden wir denBefehl expand (Term ausmultiplizieren ):

>> expand((a+b)^2)

a^2 + 2*a*b + b^2

Symbolisches Rechnen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 12 / 34

Variablen substituierenMit Hilfe der Funktion subs konnen in einem Term Variablen durch

� andere Terme� Variablenbelegungen

substituiert werden.

Zum Beispiel:

>> syms x

>> z = subs(x^2, x, 1+x) % x durch 1+x ersetzen

z =

(x + 1)^2

>> y = 1:5;

>> subs(z, x, y) % x durch die Werte in y ersetzen

ans =

4 9 16 25 36

Wir sehen also: mit Hilfe von subs konnen wir symbolische Variablen mitWerten belegen.Wichtig: z wird automatisch als symbolische Variable angelegt.

Symbolisches Rechnen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 13 / 34

Variablen zusammenfassenUm in einem Symbolischen Term Variablen zusammenzufassen, verwendet mandie Funktion collect. Zum Beispiel:

>> syms x

>> collect ((x^2+x+1)*(x^3-x^2+1)) % Zusammenfassen

ans =

x^5 + x + 1

Ein Polynom faktorisierenWill man ein Polynom faktorisieren (Zerlegung in Faktoren), verwendet man inMATLAB die Funktion factor. Zum Beispiel:

>> syms x

>> factor(x^2-1) % Faktorisieren

ans =

(x - 1)*(x + 1)

>> simplify((x - 1)*(x + 1)) % Kontrolle

ans =

x^2 - 1

Symbolisches Rechnen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 14 / 34

Terme formatiert ausgebenEine weitere nutzliche Funktion ist pretty. Mit Hilfe dieser Funktion konnenTerme schon formatiert ausgegeben werden.

Zum Beispiel:

>> syms x

>> z = (sin(x)/cos(x))*exp(x^2)/pi;

>> pretty(z)

2

exp(x ) sin(x)

--------------

PI cos(x)

Das Ergebnis von pretty ist also eine Schreibweise, welche einfacher zu lesenist.

Mathematische Funktionen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 15 / 34

Um eine mathematische Funktion symbolisch abzubilden, verwendet man inMATLAB sogenannte symbolische Funktionsterme .

Solche Funktionsterme werden zum Beispiel wie folgt definiert.

>> syms x

>> f = x^2+x^4+2*x; % symbolischer Funktionsterm

>> g = x^2; % weiterer symbolischer Funktionsterm

Man kann aber auch abstrakte Funktionsterme erstellen:

>> f = sym(’f(x)’);

In diesem Beispiel erzeugt MATLAB den Funktionsterm f, welchem keineexplizite Funktion zugrunde liegt.

Das bedeutet: MATLAB ist nur bekannt, dass es sich bei f um eine von xabhangige Funktion handelt.

Mathematische Funktionen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 16 / 34

Mit derartigen Funktionstermen kann man in MATLAB verschiedenstesymbolische Berechnungen durchfuhren, zum Beispiel:

>> syms x

>> f = x^2+x^4+2*x; % symbolischer Funktionsterm

>> g = x^2; % weiterer symbolischer Funktionsterm

>> f*3 % f mit 3 multipliziert

ans =

3*x^4 + 3*x^2 + 6*x

>> simplify(f/(1+x)) % Polynomdivision

ans =

x*(x^2 - x + 2)

>> simplify(f*g) % Funktionen f und g multiplizieren

ans =

x^3*(x^3 + x + 2)

>> compose(f, g) % Komposition von f und g = f(g(x))

x^8 + x^4 + 2*x^2

Mathematische Funktionen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 17 / 34

Um einen symbolischen Funktionsterm fur einen bestimmten Wertauszuwerten verwendet man die Funktion subs. Dabei gibt es zweiMoglichkeiten:

� symbolisch: Ergebnis ist ein Term� numerisch: Ergebnis ist eine Zahl

>> syms x

>> f = sqrt(x); % symbolischer Funktionsterm

>> pretty(subs(f, x, sym(3))) % x = 3 (symbolisch)

1/2

3 % Ergebnis: symbolischer Term

>> subs(f, x, 3) % numerische Auswertung

ans =

1.7321 % Ergebnis: eine Zahl

>> double(subs(f, x, sym(3))) % auch mo glich

ans =

1.7321

Wir sehen: ein symbolisches Ergebnis kann auch mit der Funktion double ineinen numerischen Wert umgewandelt werden.

Mathematische Funktionen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 18 / 34

Die Funktionsauswertung funktioniert auch fur eine Liste von Werten (Vektoren):

>> syms x

>> f = sqrt(x); % symbolischer Funktionsterm

>> subs(f, x, sym(1:5)) % symbolisch

ans =

[ 1, 2^(1/2) , 3^(1/2) , 2, 5^(1/2)]

>> subs(f, x, 1:5) % numerisch

ans =

1.0000 1.4142 1.7321 2.0000 2.2361

Hinweis: wie wir sehen, kann beim symbolischen Rechnen auf viele der inMATLAB vorhandenen Funktionen zuruckgegriffen werden (z.B. sqrt, sin, cos,exp, ...).

Mathematische Funktionen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 19 / 34

UmkehrfunktionenWill man fur eine gegebene Funktion die Umkehrfunktion berechnen, bietetMATLAB das Kommando finverse.

Zum Beispiel:

>> syms x

>> f = sqrt(x);

>> finverse(f)

ans =

x^2

Hinweis: MATLAB erkennt ob die Losung eindeutig ist, und gibt eine Warnungaus, wenn die Umkehrfunktion nicht eindeutig bestimmt werden kann.

Zum Beispiel:

>> finverse(ans)

Warning: finverse(x^2) is not unique.

> In sym.finverse at 46

ans =

x^(1/2)

Losen von Gleichungen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 20 / 34

Losen einfacher GleichungenAuch das Losen von Gleichungen ist mittels symbolischem Rechnen in MATLABmoglich. Dazu verwendet man die Funktion solve.

Wollen wir zum Beispiel die Nullstellen der Funktion f(x) = x2 − 1 finden, kannman diese wie folgt berechnen:

>> solve(’x^2 -1=0’) % entspricht: solve(x^2-1)

ans = % es gibt zwei Lo sungen

-1

1

>> solve(’cos(x)=x’)

ans =

0.73908513321516064165531208767387

Hinweis: wir sehen, dass wir fur solve keine symbolischen Variablendeklarieren mussen, wenn man den symbolischen Ausdruck als String ubergibt.

Losen von Gleichungen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 21 / 34

Will man Nullstellen numerisch berechnen, kann man dazu die Funktion fzero

verwenden.

Dabei muss zusatzlich zur Funktion noch ein Punkt angegeben werden, welcherals Startpunkt fur die Suche verwendet werden soll. Zum Beispiel:

>> fzero(’x^2-3’, -1)

ans =

-1.7321 % Nullstelle am nachsten zu -1

>> fzero(’x^2-3’, 1)

ans =

1.7321 % Nullstelle am nachsten zu 1

Hinweis: wir sehen, dass wir fur fzero keine symbolischen Variablendeklarieren mussen, wenn man den symbolischen Ausdruck als String ubergibt.

Losen von Gleichungen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 22 / 34

Arbeitet man mit Gleichungen in mehreren Variablen, kann man zusatzlichangeben, nach welcher Variable gelost werden soll:

>> solve(’x^2+y=1’, ’x’) % losen nach x

ans =

(1 - y)^(1/2) % 2 Lo sungen

-(1 - y)^(1/2)

>> solve(’x^2+y=1’, ’y’) % losen nach y

ans =

1 - x^2 % nur eine Losung

Hinweis: gibt man keine Variable an, wird nach jener Variable gelost, welchealphabetisch n aher bei x ist.

Losen von Gleichungen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 23 / 34

Losen von GleichungssystemenNeben dem Losen einzelner Gleichungen, kann MATLAB auchGleichungssysteme losen.

Das Gleichungssystem

a2 + 2b+ 3 = 0

−2a2 − b = 0

kann man in MATLAB zum Beispiel wie folgt losen:

>> [a, b] = solve(’a^2+2*b+3=0’, ’ -2*a^2-b=0’);

>> a’, b’

ans =

[ 1, -1] % Losungen fur a

ans =

[ -2, -2] % Losungen fur b

Wir sehen: solve gibt fur jede symbolische Variable einen Ausgabeparameterzuruck.

Grenzwerte berechnen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 24 / 34

Um in MATLAB Grenzwerte von Folgen zu berechnen, stellt MATLAB dieFunktion limit zur Verfugung.

Es gibt mehrere Arten, wie limit verwendet werden kann:

Mathematische Bedeutung limit-Verwendung

limx→0 f(x) limit(f)

limx→a f(x) limit(f, x, a) oder limit(f, a)

limx→a

x<0f(x) limit(f, x, a, ’left’)

limx→a

x>0f(x) limit(f, x, a, ’right’)

Grenzwerte berechnen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 25 / 34

Beispiele zu GrenzwertenBekanntlicherweise ist der Grenzwert der Folge

an =1

n

fur n → 0 gleich unendlich:

>> syms n

>> limit(1/n, n, 0, ’right’)

ans =

Inf

Dagegen konvergiert die gleiche Folge fur n → ∞ gegen 0:

>> syms n

>> limit(1/n, Inf)

ans =

0

Grenzwerte berechnen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 26 / 34

Beispiele zu GrenzwertenDie Eulersche Zahl e = 2.7183... ist der Grenzwert der Folge

an =

(

1 +1

n

)n

mit n ≥ 1

>> syms n

>> limit((1+1/n)^n, Inf)

ans =

exp(1) % die Eulersche Zahl e

Der Grenzwert fur

limh→0

(x+ h)3 − x3

h

ist nichts anderes als die Ableitung von x3:

>> syms x h

>> limit(((x+h)^3-x^3)/h, h, 0)

ans =

3*x^2

Endliche und unendliche Reihen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 27 / 34

Um das symbolische Summieren uber Reihen zu ermoglichen, bietet MATLABdie Funktion symsum. Dabei unterstutzt diese Funktion sowohl endliche alsauch unendliche Reihen.

Die Summe der endlichen Reihe

k=10∑

k=1

k2k = 2 + 8 + 24 + · · ·+ 10240 = 18434

kann in MATLAB zum Beispiel folgendermaßen berechnet werden:

>> syms k

>> symsum(k*2^k, 1, 10) % endliche Summe

ans =

18434

Endliche und unendliche Reihen

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 28 / 34

Beispiel fur eine unendliche SummeIn der Analysis gilt

∞∑

n=1

1

n2=

π2

6

Dies kann man in MATLAB folgendermaßen zeigen:

>> syms n

>> symsum (1/n^2, 1, Inf) % unendliche Summe

ans =

pi^2/6

Differenzialrechnung

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 29 / 34

Ein weiteres wichtiges Gebiet, welches MATLAB beim symbolischen Rechnenunterstutzt, ist die Differenzialrechnung (bilden von Ableitungen).

Dazu verwendet man die Funktion diff:

>> syms x y

>> f = x^2+4; % eine symbolische Funktion

>> g = x^3-sin(y); % eine weitere symbolische Funktion

>> diff(f, x) % die Ableitung von f nach x berechnen

ans =

2*x

>> diff(g, y, 2) % g nach y abgeleitet (2 mal !)

ans =

sin(y)

>> diff(f, y) % die Ableitung von f nach y berechnen

ans =

0 % klar , da y in f nicht enthalten ist

Hinweis: gibt man keine Variable an, nach welcher abgeleitet werden soll, wirdnach jener Variable abgeleitet, welche alphabetisch n aher bei x ist.

Differenzialrechnung

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 30 / 34

Partielles DifferenzierenLiegt eine Funktion in mehreren Variablen vor und soll diese Funktion nach einerbestimmten Variable abgeleitet werden, nennt man dies eine partielle Ableitung .

Beispiele:

>> syms x y

>> f = x^2+4-cos(y); % f hat die Variablen x und y

>> diff(f, x) % partielle Ableitung von f nach x

ans =

2*x

>> diff(f, y) % partielle Ableitung von f nach y

ans =

sin(y)

Differenzialrechnung

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 31 / 34

Gradient einer FunktionHat man eine Funktion in mehreren Variablen, kann man mit Hilfe der Funktionjacobian die Ableitungen nach den verschiedenen Variablen berechnen (in derMathematik der Nabla-Operator ).

Der Gradient der Funktion

f(x, y, z) = xez + 2xy2 + xyz

wir in MATLAB folgendermaßen bestimmt:

>> syms x y z

>> jacobian(x*exp(z)+x*2*y^2+x*y*z).’

ans =

2*y^2 + z*y + exp(z) % Ableitung nach x

4*x*y + x*z % Ableitung nach y

x*y + x*exp(z) % Ableitung nach z

Differenzialrechnung

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 32 / 34

Die Hesse-MatrixDer Gradient ergibt Ableitungen nach allen in einer Funktion vorkommendenVariablen. Berechnet man von diesen Ableitungen noch einmal dieAbleitungen nach allen Variablen , erhalt man die Hesse-Matrix.

Die Hesse-Matrix der Funktion

f(x, y) = x3 + xy2

wird in MATLAB folgendermaßen bestimmt:

>> syms x y

>> jacobian(jacobian(x^3+x*y^2). ’)

ans =

[ 6*x, 2*y]

[ 2*y, 2*x]

Differenzialrechnung

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 33 / 34

Die Jacobi-MatrixDie Jacobi-Matrix ist die Matrix aller partiellen Ableitungen einer n-dimensionalenFunktion. Sei zum Beispiel folgende Funktion gegeben:

f : R3 → R2 f(x, y, z) =

(

2 sin(x) + y2

xyz

)

Die Jacobi-Matrix fur f wird in MATLAB wie folgt berechnet:

>> syms x y z

>> jacobian([2* sin(x)+y^2, x*y*z], [x, y, z])

ans =

[ 2*cos(x), 2*y, 0] % Ableitungen der 1. Funktion

[ y*z, x*z, x*y] % Ableitungen von x*y*z

Integralrechnung

Spezielle Themen

Effiziente Programmierung

Symbolisches Rechnen

Mathematische Funktionen

Losen von Gleichungen

Losen von Gleichungen

Grenzwerte

Reihen

Differenzialrechnung

Integralrechnung

M. Liedlgruber Anwendungssoftware III (MATLAB) – SS 2014 34 / 34

Neben der Differenzialrechnung beherrscht MATLAB auch das symbolischeIntegrieren von Funktionen .

Dazu bietet MATLAB die Funktion int. Ahnlich dem Differenzieren, kann manauch hier wieder bestimmte und unbestimmte Integrale berechnen.

>> syms x y

>> int(sin(x), 0, 2*pi) % bestimmtes Integral nach x

ans =

0

>> int(x^2*y, y, 0, 100) % bestimmtes Integral nach y

ans =

5000*x^2

>> int(sin(x), x) % unbestimmtes Integral

ans =

-cos(x)

>> int(x^2, x) % unbestimmtes Integral

ans =

x^3/3