• Keine Ergebnisse gefunden

L¨ osungsvorschlag zu ¨ Ubungsblatt Nr. 5 zur Vorlesung

N/A
N/A
Protected

Academic year: 2022

Aktie "L¨ osungsvorschlag zu ¨ Ubungsblatt Nr. 5 zur Vorlesung"

Copied!
5
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Karlsruher Institut f¨ur Technologie WS 2010/11 Institut f¨ur theoretische Festk¨orperphysik

Dr. Andreas Poenicke und Dipl.-Phys. Patrick Mack 15.12.10

http://comp.physik.uni-karlsruhe.de/Lehre/ERA/ era@physik.uni-karlsruhe.de

L¨ osungsvorschlag zu ¨ Ubungsblatt Nr. 5 zur Vorlesung

” Einf¨ uhrung in das rechnergest¨ utzte Arbeiten“

1 Matrizen

Die Konstruktion von Matrizen wird in Matlab durch verschiedene Befehle erleichtert, die schon bestimmte Matrizen erzeugen. Z.B.: diag, eye, ones, zero, meshgrid (siehe Hilfe). Oft hilf- reich ist auch, daß Matlab Matrizen durch Nulleintr¨age auf die entsprechende Dimension erg¨anzt.

a) Der Befehl meshgrid kann genutzt werden zwei Matrizen Xij = i und Yij =j zu erzeugen.

Zu beachten ist, daß die nachfolgende Multiplikation als elementweise Operation nicht als Matrix- Multiplikation durchgef¨uhrt wird.

[X Y] = meshgrid(1:10);

A = X + Y B = X .* Y

b) Matrizen lassen sich auch leicht aus Teilen anderer Matrizen zusammensetzen. Quell- und Ziel- bereiche werden in den Indizes angegeben. Beachten sie die Abk¨urzung :f¨ur ganze Zeilen/Spalten.

C(1:5, :) = A(1:5, :);

C(6:10, :) = B(6:10, :);

det(C) trace(C)

c)

Der Befehl eye(m) erzeugt eine Einheitsmatrix der Dimension m×m. Wird der Befehldiag mit einem Vektor als Argument aufgerufen gibt er eine Diagonalmatrix mit den Werten des Vektors als Diagonalwerte zurueck.ones(m,n)erzeugt einem×n-Matrix mit dem Wert 1 in allen Elementen, kann also genutzt einen Vektor nur mit 1en zu erzeugen.

m=10

D=2*eye(m) - diag( ones( 1, m-1 ), -1 ) + diag( ones( 1, m-1 ), 1 ) eig(D)

(2)

2 Der Matlab-Befehl plot stellt Vektoren graphisch dar. Im Gegensatz zu z.B. Maple wird daher der Bereich der dargestellt werden soll nicht durch eine Option des Plot-Befehls sondern durch die Definition des Vektors selbst festgelegt. Bei Definition der Vektoren bietet sich oft der Befehl linspace an.

t = linspace(0, 40, 301);

xi=.1;

x(1, :) = exp(-xi * t) .* cos( sqrt(1 - xi^2) * t );

xi=.5;

x(2, :) = exp(-xi * t) .* cos( sqrt(1 - xi^2) * t );

xi=1;

x(3, :) = exp(-xi * t) .* cos( sqrt(1 - xi^2) * t );

xi=5;

x(4, :) = exp(-xi * t) .* cos( sqrt(1 - xi^2) * t );

plot(t, x) alternativ z.B.

t=0:40/300:40 hold on

xi=0.1;

plot( t, exp(-xi*t).*cos(sqrt(1-xi^2)*t) );

xi=0.5

plot( t, exp(-xi*t).*cos(sqrt(1-xi^2)*t) );

xi=1.0

plot( t, exp(-xi*t).*cos(sqrt(1-xi^2)*t) );

xi=5.0

plot( t, exp(-xi*t).*cos(sqrt(1-xi^2)*t) );

hold off

0 5 10 15 20 25 30 35 40

−0.8

−0.6

−0.4

−0.2 0 0.2 0.4 0.6 0.8 1

Abbildung 1: Beispiel zu Aufgabe 2)

(3)

3 Um die Felder plotten zu k¨onnen, m¨ussen wir sie erst diskretisieren. Entlang einer Achse verwenden wir den Ausdruck x1:dx:x2, der einen Vektor mit den Elementen (x1, x1 +dx, x1 + 2dx, . . . , x2) erstellt. Weiterhin ist es hilfreich, zwei Felder zu haben die jeweils einfach dem x- bzw. den y-Wert entsprechen. In Matlab erhalten wir diese recht komfortabel mit der Funktion meshgrid, welche als Parameter die Punkte entlang der x- und y-Achse erwartet.

a) Wichtig ist wieder, dass Matlab bei Feldern und Matrizen im Prinzip immer Matrix-Operationen durchf¨uhren will. Um punktweise Operationen zu erwingen ist immer ein Punkt vor dem Operator n¨otig, also x.*y, x./y etc.!

[x,y] = meshgrid( -5:0.2:5, -5:0.2:5 );

surf( x, y, x.*y );

surf( x, y, 1 ./ ( 1 + ( x.^2 + y.^2 ).^3 ) );

surf( x, y, exp( -( x.^2 + y.^2) ) );

−5

0

5 −5 0

−30 5

−20

−10 0 10 20 30

−5

0

5 −5 0

5 0

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

−5

0

5 −5 0

5 0

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Abbildung 2: Beispiele zu Aufgabe 3a)

Andere Darstellungen ergeben sich durch Ersetzen von surf durch mesh, pcolor odercontour.

b) F¨ur die Darstellung von Vektorfeldern existiert die Funktion quiver, die an den Diskretisie- rungspunkten kleine Pfeile zeichnet. Die Syntax ist fast analog zur Darstellung skalarer Felder, nur dass jetzt zwei Argumente (x- und y-Komponente) des darzustellenden Feldes ¨ubergeben werden m¨ussen:

[x,y] = meshgrid( -5:0.5:5, -5:0.5:5 ); % Geringere Diskretisierungsdichte!

quiver( x, y, -y, x );

quiver( x, y, -x ./ sqrt( x.^2 + y.^2 ), -y ./ sqrt( x.^2 + y.^2 ) );

quiver( x, y, -y, -x );

(4)

−6 −4 −2 0 2 4 6

−6

−4

−2 0 2 4 6

−5 −4 −3 −2 −1 0 1 2 3 4 5

−5

−4

−3

−2

−1 0 1 2 3 4 5

−6 −4 −2 0 2 4 6

−6

−4

−2 0 2 4 6

Abbildung 3: Beispiele zu Aufgabe 3b)

4

a) In Matlab m¨ussen Funktionen in einer Datei liegen, die den selben Dateinamen wie die Funktion selbst tr¨agt und als Endung .m hat. Wir legen also eine Dateipotential.mmit folgendem Inhalt an:

function result=potential(x,y,x0,y0,q)

result= q ./ sqrt((x-x0).^2+(y-y0).^2) end

Der Aufruf erfolgt wie in der Aufgabenstellung vorgegeben!

−5

0

5

−5 0

5 0 1 2 3 4 5 6 7 8

Abbildung 4: Beispiele zu Aufgabe 4a)

(5)

b) Die Funktion besteht aus einer Schleife, die alle Zeilen der ¨ubergebenen Matrix durchgeht. F¨ur jede Zeile wird die Funktion potential aus Teilaufgabe a) aufgerufen und zum Gesamtpotential hinzuaddiert.

function resultat = potential2(x,y,qList)

% Einfache Methode um die Matrix zu initialisieren resultat = 0*x;

% Eine Schleife ueber alle Zeilen der Liste for( i = 1:length(qList(:,1)) )

resultat = resultat + potential(x,y,qList(i,1),qList(i,2),qList(i,3));

end

Der Aufruf erfolgt wie in der Aufgabenstellung vorgegeben.

−5

0

5

−5 0

5

−8

−6

−4

−2 0 2 4 6 8

Abbildung 5: Beispiel zu Aufgabe 4b)

Referenzen

ÄHNLICHE DOKUMENTE