Prof. Dr. A. Karbach und Prof. Dr. G. Manthei Aufgabenblatt 1

Werbung
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 1
Einführung in MATLAB
Aufgabe 1
Quadrieren Sie die Zahlen 3, pi, 1 und i mit Hilfe des Operators ^ und ziehen Sie aus den Ergebnissen jeweils die Wurzel (Funktion sqrt).
Aufgabe 2
Wählen Sie unterschiedliche Winkel w zwischen 0 und
Summe der Quadrate von sin(w) und cos(w).
ür jeden Winkel die
Aufgabe 3
Erzeugen Sie das 1x5-Array sval, das die fünf Sinus-Werte für die Bogenmaß-Winkel 0, /6,
/4, /2 und enthält. Führen Sie die gleichen Rechnungen für die Grad-Winkel 0, 30°, 45°,
90° und 180° durch. Hierzu müssen Sie die Winkel ins Bogenmaß umrechnen, da die MATLAB-Funktionen sin und cos ihre Argumente im Bogenmaß erwarten – zur Erinnerung: entspricht 180°. Versuchen Sie es auch einmal mit den Funktionen sind und cosd.
Aufgabe 4
Was erhalten Sie, wenn Sie den Spaltenvektor v = [2;3] mit der Matrix A = [1 0; 0 1] multiplizieren? Was ist das Ergebnis von A*A?
Aufgabe 5
Erzeugen Sie einen Zeilenvektor, der als Komponenten nicht Zahlen, sondern Buchstaben
enthält. Überprüfen Sie den Typ des Vektors mit der Funktion whos.
Aufgabe 6
Versuchen Sie, durch bewusst falsche Anweisungen Fehlermeldungen zu erzeugen, um ein
Gefühl dafür zu bekommen, wie MATLAB auf Fehler reagiert.
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 1
Einführung in MATLAB
Lösung Aufgabe 1
%
% Aufgabe 1
%
zi : Variable für die Zahl
%
qi : das Quadrat der Zahl
%
wi : die Wurzel aus dem Quadrat
z1 = 3
q1 = z1^2
w1 = sqrt( q1 )
z2 = pi
q2 = z2^2
w2 = sqrt( q2 )
z3 = -1
q3 = z3^2
w3 = sqrt( q3 )
z4 = i
q4 = z4^2
w4 = sqrt( q4 )
%
Lösung Aufgabe 2
% Aufgabe 2
%
wi : verschiedene Winkel zwischen 0 und pi
%
ei : Summe von sin- und cos-Quadrat zu wi
w1 = 0
e1 = sin(w1)^2 + cos(w1)^2
w2 = pi
e2 = sin(w2)^2 + cos(w2)^2
w3 = pi/2
e3 = sin(w3)^2 + cos(w3)^2
w4 = pi/4
e4 = sin(w4)^2 + cos(w4)^2
w5 = pi/6
e5 = sin(w5)^2 + cos(w5)^2
%
Lösung Aufgabe 3
% Aufgabe 3
%
rval : Array mit verschiedenen Winkeln
rval = [ 0, pi/6, pi/4, pi/2, pi ]
sval = [ sin(0), sin(pi/6), sin(pi/4), sin(pi/2), sin(pi) ]
frsin = sin( rval )
frcos = cos( rval )
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 1
Einführung in MATLAB
c = pi/180
wval = [ 0, 30, 45, 90, 180 ]
cval = [ sin(0*c), sin(30*c), sin(45*c), sin(90*c), sin(180*c) ]
fwsin = sin( wval * c )
dval = [ sind(0), sind(30), sind(45), sind(90), sind(180) ]
fsind = sind( wval )
fcosd = cosd( wval )
%
Lösung Aufgabe 4
% Aufgabe 4
v = [2;3]
A = [1 0; 0 -1]
A_v = A * v
A_A = A * A
%
Lösung Aufgabe 5
% Aufgabe 5
%
s = [ 'H', 'e', 'l', 'l', 'o' ]
whos s
%
Lösung Aufgabe 6
% Aufgabe 6
%
Beispiele für fehlerhafte Anweisungen
e0 = 3,4 * 3
e1 = 'Hello,
world'
e2 = [5 2] * [3 3]
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 2
Funktionen in MATLAB
Aufgabe 1
Erstellen Sie die Funktion Flaeche zur Berechnung der Kreisfläche:
function F = Flaeche(r)
Die Formel zur Berechnung der Kreisfläche lautet: F = * r2.
Schreiben Sie auch eine sinnvolle H-Line und testen Sie sowohl die Funktion wie auch den
Aufruf der H-Line.
Aufgabe 2
Schreiben Sie die Funktion Kreis, die sowohl den Umfang wie auch die Fläche berechnet
und die beiden Werte zurückgibt:
function [umf,F] = Kreis(r)
Testen Sie die Funktion und lassen Sie sich die einzelnen Rückgabeparameter im Command-Window anzeigen.
Aufgabe 3
Schreiben Sie die Funktion Celsius, die eine übergebene Fahrenheit-Temperatur in den
zugehörigen Celsius-Wert umrechnet und diesen zurückgibt:
function c = Celsius(fahr)
Zur Umrechnung von Grad Fahrenheit in Grad Celsius dient die Formel: c = (5.0/9.0) (fahr 32 ). Testen Sie Ihre Funktion mit mehreren Temperaturen. Schreiben Sie eine weitere Funktion Fahrenheit, die eine übergebene Celsius-Temperatur in den Fahrenheit-Wert umrechnet:
function f = Fahrenheit(c)
Rufen Sie die beiden Funktionen auch hintereinander auf, also beispielsweise
>> f = Fahrenheit(Celsius(fahr))
Aufgabe 4
Erstellen Sie die Funktion Addition, die zwei übergebene Argumente a und b addiert und
deren Summe zurückgibt:
function c = Addition(a,b)
Testen Sie Ihre Funktion mit mehreren Zahlenpaaren.
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 2
Funktionen in MATLAB
Lösung Aufgabe 1
function u = Flaeche(r)
% Aufgabe 1: Berechnung der Kreisfläche
%
u = Flaeche(r), r: Kreisradius
% Berechnung der Fläche aus dem Eingangswert r
erg = double ( pi * r * r );
% Zuweisung des Ergebnisses an den Rückgabewert u
u = erg;
Lösung Aufgabe 2
function [umf,F] = Kreis(r)
% Aufgabe 2.1.2: Berechnung der Kreisdaten
%
[umf,F] = Kreis(r), r: Kreisradius
% Berechnung
F = double (
% Berechnung
umf = double
der Fläche aus dem Eingangswert r
pi * r * r );
des Umfangs
( 2 * pi * r );
Lösung Aufgabe 3
function c = Celsius(fahr)
% Aufgabe 3: Umrechung Fahrenheit nach Celsius
%
c = Celsius(fahr)
c = (5.0/9.0) * ( fahr - 32 );
function f = Fahrenheit(c)
% Aufgabe 3: Umrechung Celsius nach Fahrenheit
%
f = Fahrenheit(c)
f = (9.0/5.0) * c + 32;
Lösung Aufgabe 4
function c = Addition(a,b)
% Aufgabe 4: Addition zweier Zahlen
%
c = Addition(ca,b)
c = a + b;
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 3 Ein- und Ausgabe in MATLAB
Aufgabe 1
Erweitern Sie die Funktion UmfangInput, damit sie außer dem Umfang auch noch die Kreisfläche berechnet. Die beiden Ergebnisse sollen sowohl mit fprintf ausgegeben als auch von
der Funktion zurückgegeben werden.
Aufgabe 2
Erstellen Sie die Funktion AdditionInput, die nacheinander zwei Zahlen über den Aufruf von
input anfordert und in den Variablen a und b speichert. Diese Zahlen werden danach addiert.
Ihre Summe wird zurückgegeben:
function c = AdditionInput()
Verwenden Sie zur Eingabe-Aufforderung einen geeigneten Prompt und testen Sie Ihre Funktion mit unterschiedlichen Zahlenpaaren.
Aufgabe 3
Schreiben Sie eine Funktion, die einen Namen von der Tastatur anfordert und anschließend
auf dem Bildschirm die Meldung 'Hallo ' mit dem Namen ausgibt:
function NameInput()
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 3 Ein- und Ausgabe in MATLAB
Lösung Aufgabe 1
function [umf,F] = KreisInput()
% Aufgabe 1: berechnet Kreisumfang und -fläche
%
[umf,F] = KreisInput()
%
Radius wird von der Tastatur eingelesen
% Einlesen des Radius von der Tastatur
r = input('Bitte Radius eingeben: ');
% Berechnung des Umfangs aus dem Eingabewert und Rückgabe
umf = 2*pi*r;
F
= pi*r*r;
% Ausgabe des Ergebnisses auf dem Bildschirm
fprintf('Der Umfang zum Radius %g ist: %g \n',[r, umf]);
fprintf('Die Fläche zum Radius %g ist: %g \n',[r, F]);
Lösung Aufgabe 2
function c = AdditionInput()
% Aufgabe 2: Addiert zwei Zahlen
%
c = AdditionInput()
%
Die beiden Zahlen werden von der Tastatur eingelesen.
fprintf('Die Funktion addiert zwei Zahlen: \n');
% Einlesen der Zahlen von der Tastatur
a = input('Bitte 1. Zahl eingeben: ');
b = input('Bitte 2. Zahl eingeben: ');
% Berechnung der Summe
c = a + b;
% Ausgabe des Ergebnisses auf dem Bildschirm
fprintf('Die Summe von %g + %g ist %g \n', a, b, c);
Lösung Aufgabe 3
function NameInput()
% Aufgabe 3: Gibt eingegeben Namen aus
%
NameInput()
%
Der Name wird von der Tastatur eingelesen.
n = input('Bitte Namen eingeben: ');
fprintf('Hello, %s \n',n);
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 4
Verknüpfungen in MATLAB
Aufgabe 1
Schreiben Sie eine Funktion, die zwei Zahlen a und b von der Tastatur einliest. Prüfen, ob b
gleich null ist. In diesem Fall eine Fehlermeldung ausgeben. Ansonsten den Quotienten a/b
berechnen und das Ergebnis mit fprintf ausgeben. Kommentieren Sie die Funktion im Programm-Code und vergessen Sie auch die H-Line nicht. Testen Sie die Funktion mit mehreren
Zahlenwerten.
Aufgabe 2
Schreiben Sie die Funktion intervall, die von der Tastatur eine Zahl einliest. Liegt diese Zahl
im Intervall zwischen 10 und 99, wird sie zurückgegeben. Anderenfalls erfolgt eine Fehlermeldung. Testen Sie die drei möglichen Fälle mit mehreren Zahlenwerten.
Schreiben Sie die weitere Funktion intervall2, die analog nur Eingabewerte außerhalb des
Intervalls von 1 und 2 bearbeitet. Testen Sie die Funktion.
Aufgabe 3
Erstellen Sie die Funktion Auswahl, die als Erstes von der Tastatur ein Zeichen c einliest. Mit
einer verschachtelten if-else-Abfrage soll dann in Abhängigkeit von c wie folgt verfahren
werden:
Ist c das Zeichen „k“, wird von der Tastatur ein Radiuswert r abgefragt und die Kreisfläche
pi*r*r berechnet. Ist c das Zeichen „q“, wird von der Tastatur die Kantenlänge a abgefragt
und die Quadratfläche a*a berechnet. Ist c das Zeichen „r“, werden von der Tastatur die
Länge l und die Breite b abgefragt und die Rechteckfläche l*b berechnet. Kommt ein anderes
Zeichen, wird eine Fehlermeldung ausgegeben. Zu jedem der regulären Fälle sollen die Lösung und der Flächentyp mit fprintf ausgegeben werden.
Schreiben Sie eine weitere Funktion Auswahl2, die anstelle der verschachtelten if-elseAbfragen eine switch-Anweisung verwendet, und testen Sie alle möglichen Fälle.
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 4
Verknüpfungen in MATLAB
Lösung Aufgabe 1
function c = QuotientInput()
% Aufgabe 1: Bildet den Quotienten zweier Zahlen
%
c = QuotientInput()
%
Die beiden Zahlen werden von der Tastatur eingelesen.
fprintf('Die Funktion bildet den Quotienten zweier Zahlen: \n');
% Einlesen der Zahlen von der Tastatur
a = input('Bitte 1. Zahl eingeben: ');
b = input('Bitte 2. Zahl eingeben: ');
if(b == 0)
fprintf('Division durch Null! \n');
c = Inf;
return;
end
% Berechnung des Quotienten
c = a/b;
% Ausgabe des Ergebnisses auf dem Bildschirm
fprintf('%g / %g = %g \n', a, b, c);
Lösung Aufgabe 2
function erg = intervall1()
% Aufgabe 2a: Testet, ob eine Zahl im Intervall [10,99] liegt
%
erg = intervall1()
%
Die Zahl wird von der Tastatur eingelesen.
z = input('Bitte Zahl eingeben: ');
if(z < 10 || z > 99)
fprintf('Zahl liegt außerhalb von [10,99] ! \n');
erg = 0;
return;
end
% korrekte Zahl wird zurückgegeben
erg = z;
function erg = intervall2()
% Aufgabe 2b: Testet, ob eine Zahl außerhalb [1,2] liegt
%
erg = intervall2()
%
Die Zahl wird von der Tastatur eingelesen.
z = input('Bitte Zahl eingeben: ');
if(z >= 1 && z <= 2)
fprintf('Zahl liegt innerhalb von [1,2] ! \n');
erg = 0;
return;
end
% korrekte Zahl wird zurückgegeben
erg = z;
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 4
Verknüpfungen in MATLAB
Lösung Aufgabe 3
function Auswahl()
% Aufgabe 3a: je nach Zeichen wird verschieden gehandelt
%
Auswahl()
%
Das Zeichen wird von der Tastatur eingelesen.
c = input('Zeichen (k, q oder r) eingeben: ');
if(c == 'k')
fprintf('Berechnung der Kreisfläche: \n');
r = input('Bitte Radius eingeben: ');
F = pi * r * r;
fprintf('Die Kreisfläche zum Radius %g ist %g.\n', r, F);
elseif(c == 'q')
fprintf('Berechnung der Quadratfläche: \n');
a = input('Bitte Kantenlänge eingeben: ');
F = a * a;
fprintf('Die Quadratfläche zur Kante %g ist %g.\n', a, F);
elseif(c == 'r')
fprintf('Berechnung der Rechteckfläche: \n');
a = input('Bitte Länge eingeben: ');
b = input('Bitte Breite eingeben: ');
F = a * b;
fprintf('Die Rechteckfläche zu %g und %g ist %g.\n', a, b, F);
else
fprintf('Unzulässiges Zeichen %c \n', c);
end
function Auswahl2()
% Aufgabe 3b: je nach Zeichen wird verschieden gehandelt
%
Auswahl2()
%
Das Zeichen wird von der Tastatur eingelesen.
c = input('Zeichen (k, q oder r) eingeben: ');
switch(c)
case 'k'
fprintf('Berechnung der Kreisfläche: \n');
r = input('Bitte Radius eingeben: ');
F = pi * r * r;
fprintf('Die Kreisfläche zum Radius %g ist %g.\n', r, F);
case 'q'
fprintf('Berechnung der Quadratfläche: \n');
a = input('Bitte Kantenlänge eingeben: ');
F = a * a;
fprintf('Die Quadratfläche zur Kante %g ist %g.\n', a, F);
case 'r'
fprintf('Berechnung der Rechteckfläche: \n');
a = input('Bitte Länge eingeben: ');
b = input('Bitte Breite eingeben: ');
F = a * b;
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 4
Verknüpfungen in MATLAB
fprintf('Die Rechteckfläche zu %g und %g ist %g.\n', a, b, F);
end
otherwise
fprintf('Unzulässiges Zeichen %c \n', c);
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 5
Schleifen in MATLAB
Aufgabe 1
Erstellen Sie eine Funktion, die mit einer Zählschleife rückwärts die Kubikwerte x3 für x=5 bis
x=2 ausgibt. Formatieren Sie die Ausgabe übersichtlich und erzeugen Sie auch eine aussagekräftige Überschrift.
Aufgabe 2
Erstellen Sie eine Funktion, die das große Einmaleins für m=11 bis m=20 und n=1 bis n=10
ausgibt. Formatieren Sie die Tabelle übersichtlich.
Aufgabe 3
Schreiben Sie eine Funktion, die die Werte von n! für n=1 bis n=6 ausgibt.
Tipp: Zur Berechnung von n! für ein festes n können Sie die bereits fertig gestellte Funktion
fakultaet verwenden.
Aufgabe 4
Schreiben Sie die Funktion intervall, die nur Eingabewerte im Intervall zwischen 10 und 99
akzeptiert.
Testen Sie die Funktion für alle möglichen Fälle.
Aufgabe 5
Schreiben Sie die Funktion sinus, die über folgende Reihenentwicklung einen Näherungswert
für den Sinus:
x
y = sinus(x) =
( 1)( )/
, n = 1, 3, 5, 7, ..
n!
Die ersten Glieder der Reihe haben also die Form:
y=
x
1!
x
x
+
3! 5!
=x
x
x
+
6 120
Wählen Sie wie im Beispiel efunktion eine sinnvolle Schranke für den Abbruch der Summe.
Testen Sie die Funktion mit mehreren Winkelwerten und vergleichen Sie die Ergebnisse mit
den Werten der MATLAB-Funktion sin.
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 5
Schleifen in MATLAB
Lösung Aufgabe 1
function kubik()
% Aufgabe 1: berechnet Kubik-Zahlen
%
kubik()
fprintf('Kubik-Zahlen: \n');
fprintf('
n
| n^3 \n');
fprintf('---------------\n');
for(n=5:-1:2)
q = n * n * n;
fprintf(' %3d | %3d
\n', n, q);
end
Lösung Aufgabe 2
function grosses_1x1()
% Aufgabe 2: berechnet das Große 1x1
%
grosses_1x1()
fprintf('\n');
fprintf(' ---------- Grosses 1x1 ---------- \n');
fprintf('\n');
for(m=11:20)
for(n=1:10)
erg = m*n;
fprintf(' %3.0f ', erg);
end
fprintf('\n');
end
Lösung Aufgabe 3
function fakListe()
% Aufgabe 3: berechnet Fakultäts-Liste
%
fakListe()
fprintf('Fakultäts-Liste: \n');
fprintf('
n
| n!
\n');
fprintf('---------------\n');
for(n=1:6)
% Aufruf der vorher geschriebenen Funktion fakultaet,
% deren M-File am besten im selben Verzeichnis liegt
f = fakultaet(n);
fprintf(' %3d | %3d
\n', n, f);
end
function erg = fakultaet(n)
z = 1;
for(k=2:n)
z = z * k;
end
erg = z;
% Zeile 1
% Zeile
% Zeile 3
% Zeile
% Zeile
% Zeile
2
4
5
6
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 5
Schleifen in MATLAB
Lösung Aufgabe 4
function erg = intervall()
% Aufgabe 4: Testet, ob eine Zahl im Intervall [10,99] liegt
%
erg = intervall()
%
Die Zahl wird von der Tastatur eingelesen.
z = 0;
% Start mit nicht akzeptabler Zahl
while(z < 10 || z > 99)
z = input('Bitte Zahl eingeben: ');
if(z < 10 || z > 99)
fprintf('Zahl liegt außerhalb von [10,99] ! \n');
end
end
% korrekte Zahl wird zurückgegeben
fprintf('Zahl %g war korrekt \n', z);
erg = z;
Lösung Aufgabe 5
function y = sinus(x, epsi, ausgabe)
% Aufgabe 5: berechnet den Sinus
%
y = sinus(x, epsi, ausgabe)
%
x : Winkel im Bogenmaß
%
epsi : Schranke zum Abbruch
%
ausgabe : ob Zahl der Summanden ausgegeben wird
%
%
Verwendete Rekursionsformel für Summenglieder:
%
sn = - sn * x*x / (n*(n-1))
%
mit Startwert: s1 = x
n = 1;
sn = x;
z = sn;
% 1 = Startnummer des Summanden
% 1. Summand = x
% Zwischensumme = x
while(abs(sn) > epsi) % Kriterium zum Weitermachen
n = n + 2;
% nächste Summandennummer
sn = - sn * x*x / (n *(n-1)); % aktueller Summand
z = z + sn;
% Summand zu Zwischensumme addieren
end
y = z; % Rückgabe der Summe
if(ausgabe) % Kontrollausgabe, falls ausgabe == 1
fprintf('Zahl der Summanden: %g \n', n);
fprintf('Wert sinus(%g) = %16.15g \n', x, y);
fprintf('Differenz zu MATLAB-sin: %g \n', y - sin(x));
end
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 6
Felder in MATLAB
Aufgabe 1
Schreiben Sie die Funktion res = vecAddition(v1, v2), die die beiden Spaltenvektoren v1 und
v2 addiert und das Ergebnis in res zurückgibt.
Testen Sie die Funktion, zum Beispiel mit den Vektoren v1 = [1;2;3] und v2 =
[2;1;3].
Aufgabe 2
Schreiben Sie die Funktion A = Drehung(w), die aus dem Drehwinkel w die zugehörige
zweidimensionale Drehmatrix A berechnet.
Die Drehmatrix A ist wie folgt definiert:
A = [cos(w), -sin(w); sin(w), cos(w)]
Testen Sie die Funktion mit unterschiedlichen Winkeln. Welche Matrizen erhält man beispielsweise für die Winkel /2 (90 Grad), (180 Grad) und 2 (360 Grad)?
Aufgabe 3
Schreiben Sie die Funktion fncPlot, die analog der sin-Funktion die Funktion
f(x) = (x*x*x + 5*x) * cos(3*x)
im Intervall x = [5,+6] zeichnet.
Aufgabe 4
Erstellen Sie die Funktion d = Drehung(w, v), die den übergebenen 2D-Spaltenvektor v um
den Winkel w dreht und den gedrehten Vektor d zurückgibt. Die Drehung eines Vektors v
kann über die Multiplikation mit der zum Winkel w gehörenden Drehmatrix A (siehe oben)
realisiert werden:
d = A * v;
Testen Sie die Funktion Drehung, beispielsweise für w = pi/2 und v = [1;0].
Schreiben Sie eine weitere Funktion [dx,dy] = linTransf(w, v, t), die nach einer Drehung noch
eine Verschiebung um den Vektor t = [tx;ty] vornimmt:
d = A * v + t;
Testen Sie mit unterschiedlichen Verschiebungen, zum Beispiel für t = [0;1]. Unterscheiden
sich die Ergebnisse, wenn man die Reihenfolge der Operationen vertauscht, also zuerst dreht
und dann verschiebt bzw. zuerst verschiebt und dann dreht?
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 6
Felder in MATLAB
Lösung Aufgabe 1
function res = vecAddition(v1, v2)
% Aufgabe 1: addiert zwei Vektoren
%
res = vecAddition(v1, v2)
res = v1 + v2;
Lösung Aufgabe 2
function A = Drehung(w)
% Aufgabe 2: berechnet eine Drehmatrix
%
A = Drehung(w)
%
w : Drehwinkel im Bogenmaß
A(1,1)
A(1,2)
A(2,1)
A(2,2)
=
cos(w);
= - sin(w);
=
sin(w);
=
cos(w);
Lösung Aufgabe 3
function fncPlot(anfang, ende, diff)
% Aufgabe 3: Funktions-Plot
%
fncPlot(anfang, ende, diff)
%
anfang : Startpunkt, z.B. -5
%
ende : Endpunkt, z.B. +6
%
diff : Abstand der Stützstellen, z.B. 0.1
% 1. Berechnungspunkt: anfang
akt = anfang;
% 1. Element der Matrix
n = 1;
% Vektoren x und y berechnen, bis ende erreicht ist
while (akt <= ende)
% x-Matrix von anfang bis ende
x(n) = akt;
% y-Matrix = sin-Wert zu x
y(n) = (x(n)*x(n)*x(n) + 5*x(n))*cos(3*x(n));
% nächste Vektorkomponente wählen
n = n +1;
% akt. Berechnungspunkt, um diff weiter
akt = akt + diff;
end
% Daten plotten
plot(x,y,'r');
% dazu Grid einschalten
grid on;
title('Funktion: (x*x*x + 5*x)*cos(3*x)');
xlabel('x-Achse');
ylabel('y-Achse');
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 6
Felder in MATLAB
Lösung Aufgabe 4
function d = VecDrehung(w, v)
% Aufgabe 4a: dreht einen Vektor um Winkel
%
d = VecDrehung(w, v)
%
w : Drehwinkel im Bogenmaß
%
v : der zu drehende Vektor
A(1,1)
A(1,2)
A(2,1)
A(2,2)
=
cos(w);
= - sin(w);
=
sin(w);
=
cos(w);
d = A * v;
function [dx,dy] = linTransf(w, v, t)
% Aufgabe 4b: Lineare Transformation
%
[dx,dy] = linTransf(w, v, t)
%
w : Drehwinkel im Bogenmaß
%
v : der zu drehende Vektor
%
t : Verschiebungsvektor
A(1,1)
A(1,2)
A(2,1)
A(2,2)
=
cos(w);
= - sin(w);
=
sin(w);
=
cos(w);
d = A * v + t;
dx = d(1);
dy = d(2);
function [dx,dy] = linTransf2(w, v, t)
% Aufgabe 4c: Lineare Transformation
%
[dx,dy] = linTransf2(w, v, t)
%
w : Drehwinkel im Bogenmaß
%
v : der zu drehende Vektor
%
t : Verschiebungsvektor
%
2. Variante: erst verschieben und dann drehen
A(1,1)
A(1,2)
A(2,1)
A(2,2)
=
cos(w);
= - sin(w);
=
sin(w);
=
cos(w);
% erst verschieben und dann drehen
d = A * (v + t);
dx = d(1);
dy = d(2);
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 7
Grafik in MATLAB
Aufgabe 1
Erstellen Sie die Funktion polyPlot, die folgende Funktionen zusammen in einem Grafikfenster ausgibt, für x im Intervall [2,2]:
y1 = x; y2 = x2; y3 = x3; y4 = x4 ;
Bringen Sie auch eine Überschrift und entsprechende Beschriftungen (Legende) an.
Versuchen Sie, auch andere Funktionen zu plotten.
Aufgabe 2
Erstellen Sie die Funktion dataPlot, die eine gewisse Menge von Zahlen (zum Beispiel zehn
Zahlen) über eine Schleife von der Tastatur einliest und diesen Datensatz in einer 2D-Grafik
ausgibt.
Testen Sie die Funktion und stellen Sie im Programm sicher, dass von der Tastatur auch wirklich nur Zahlenwerte eingelesen werden.
Aufgabe 3
Erstellen Sie die Funktion flaeche3d, die mit der Funktion surf eine 3D-Fläche zeichnet, wobei die Höhe z über der x-y-Ebene durch folgende Punkte (y,x) definiert ist:
z = 0 2 3 0
0 2 3 0
Erweitern Sie die Funktion, indem Sie die z-Werte für die Höhe über die Tastatur einlesen
(mittels einer verschachtelten Zählschleife!).
Stellen Sie im Programm sicher, dass von der Tastatur auch wirklich nur Zahlenwerte eingelesen werden.
Aufgabe 4
Erstellen Sie die Funktion multPlot, die mit Hilfe der Funktion subplot die Fläche aus der vorherigen Aufgabe vierfach in einem einzigen Fenster darstellt. Wählen Sie für die einzelnen
Plots unterschiedliche Ansichten mittels der Funktion view(Azimuth, Elevation), zum Beispiel
die Standardansichten einer Fertigungszeichnung.
Speichern Sie die Zeichnung im bmp-, jpg- oder tif-Format ab.
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 7
Grafik in MATLAB
Lösung Aufgabe 1
function polyPlot()
% Aufgabe 1: Funktions-Plot
%
polyPlot()
x = [-2:0.1:2];
y1
y2
y3
y4
=
=
=
=
x;
x.*x;
x.*x.*x;
x.*x.*x.*x;
hold on
plot(x,y1,'r-');
plot(x,y2,'g:');
plot(x,y3,'b.-');
plot(x,y4,'m--');
legend('x','x*x','x*x*x','x*x*x*x');
hold off
Lösung Aufgabe 2
function dataPlot(num)
% Aufgabe 2: Daten-Plot
%
dataPlot()
%
num : Zahl der zu plottenden Daten
fprintf('%g Daten werden eingelesen: \n', num);
% Vektoren x und y belegen
for (n = 1:num)
% x-Vektor von 1 bis num
x(n) = n;
% nächste Zahl von Tastatur holen
zahl = 0; % Vorbelegung: keine Zahl
% innere Schleife, bis wirklich auch Zahl eingegeben
while(zahl == 0)
next = input('nächste Zahl: ');
% Check, ob Eingabe einen Zahl ist
zahl = isnumeric(next);
% keine Zahl, d.h. nochmal nachfragen
if(zahl == 0)
fprintf('Eingabe war keine Zahl - ');
end
end
% y-Vektor = eingelesener Wert zu x
y(n) = next;
end
% Daten plotten
plot(x,y,'k:s');
% dazu Grid einschalten
grid on;
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 7
Grafik in MATLAB
title('Daten-Plot');
xlabel('x-Achse');
ylabel('y-Achse');
Lösung Aufgabe 3
function flaeche3d()
% Aufgabe 3a: Flächen-Plot
%
flaeche3d()
% Definition der Fläche
z = [ 0 2 3 0; 0 2 3 0 ];
surf(z);
xlabel('x-Achse')
ylabel('y-Achse')
zlabel('z-Achse')
function flaecheInput()
% Aufgabe 3b: Flächen-Plot
%
flaecheInput()
% Definition der Fläche
% Daten werden von Tastatur gelesen
for(m=1:2)
% 2 Zeilen
for(n=1:4)
% 4 Spalten
% innere Schleife, bis wirklich auch Zahl eingegeben
zahl = 0;
while(zahl == 0)
next = input('nächster Höhenwert: ');
% Check, ob Eingabe einen Zahl ist
zahl = isnumeric(next);
% keine Zahl, d.h. nochmal nachfragen
if(zahl == 0)
fprintf('Eingabe war keine Zahl - ');
end
end
% Zahl in Array übernehmen
z(m,n) = next;
end
end
surf(z);
xlabel('x-Achse')
ylabel('y-Achse')
zlabel('z-Achse')
Lösung Aufgabe 4
function multPlot()
% Aufgabe 4: Flächen-Plot
%
flaeche3d()
% Definition der Fläche
z = [ 0 2 3 0; 0 2 3 0 ];
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 7
Grafik in MATLAB
figure
subplot(2,2,1);
mesh(z);
view(0, 90)
axis square
subplot(2,2,2);
mesh(z);
view(90, 0)
axis square
subplot(2,2,3);
mesh(z);
view(0, 0)
axis square
subplot(2,2,4);
mesh(z);
view(-45, 45)
axis square
xlabel('x-Achse')
ylabel('y-Achse')
zlabel('z-Achse')
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 8
Strukturen in MATLAB
Aufgabe 1
Erweitern Sie die Funktion print_person, indem Sie zum struct person folgende weitere
Komponenten hinzufügen, die Sie ebenfalls von der Tastatur einlesen lassen:
• Straße
• Hausnummer
• Postleitzahl
• Ort
• Geburtsdatum [Array aus 3 Zahlen]
Aufgabe 2
Erstellen Sie die Funktion find_person, die den struct person verwendet, um eine Liste mit
Personendaten zu erstellen. Nach der Tastaturabfrage einer Telefonnummer soll die Funktion die zu dieser Nummer gehörende Person in der Liste identifizieren und deren Daten auf
dem Bildschirm ausgeben.
Aufgabe 3
Erweitern Sie die Funktion pyramide dahingehend, dass sie andere 3D-Körper mit geraden
Linien darstellt, beispielsweise einen Quader, eine Pyramide mit dreieckiger Basis, ein Prisma
etc. Die Parameter und der Typ der Körper werden über die Tastatur eingegeben. Mit einer
switch-Anweisung schalten Sie dann zur Berechnung der Körperlinien.
Aufgabe 4
Erweitern Sie das OOP-Beispiel drahtmodell um folgende Methoden:
• function d = addPt( d, x, y, z ) fügt einen weiteren Punkt zur Datenbasis hinzu.
• function d = addLn( d, n1, n2 ) fügt eine weitere Linie zur Datenbasis hinzu.
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 8
Strukturen in MATLAB
Lösung Aufgabe 1
function print_person2( num_pers )
% Aufgabe 1: struct-Erzeugung
%
print_person2( num_pers )
% struct person definieren
person = struct( 'name', '', 'telnr', 0, ...
'str', '', 'nr', 0, ...
'plz', '', 'ort', '', ...
'geb', [] );
fprintf( 'Bitte die Daten von %g Personen eingeben: \n', num_pers );
% Einleseschleife: von n=1 bis n=num_pers
for( n = 1:num_pers )
person(n).name = input( 'Name: ' );
person(n).telnr = input( 'Tel.-Nr.: ' );
person(n).str = input( 'Straße: ' );
person(n).nr = input( 'Hausnummer: ' );
person(n).plz = input( 'Postleitzahl: ' );
person(n).ort = input( 'Ort: ' );
fprintf( 'nun der Geburtstag, nacheinander Tag, Monat, Jahr\n');
person(n).geb(1) = input( 'Geburtstag: ' );
person(n).geb(2) = input( 'Geburtsmonat: ' );
person(n).geb(3) = input( 'Geburtsjahr: ' );
fprintf( '\n' );
end
% Überschrift ausgeben
fprintf( '\nMeine Freunde : \n' );
fprintf( '---------------\n' );
% Ausgabeschleife
for( n = 1:num_pers )
fprintf( 'Name: %s, Tel.Nr.: %g \n', ...
person(n).name, person(n).telnr );
fprintf( 'Adresse: %s %g \n', ...
person(n).str, person(n).nr );
fprintf( '%g %s \n', ...
person(n).plz, person(n).ort );
fprintf( 'Geburtstag: %g.%g.%g \n\n', ...
person(n).geb(1), person(n).geb(2), person(n).geb(3) );
end
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 8
Strukturen in MATLAB
Lösung Aufgabe 2
function find_person( num_pers )
% Aufgabe 2: Suche in struct
%
find_person( num_pers )
% struct person definieren
person = struct( 'name', '', 'telnr', 0 );
fprintf( 'Bitte die Daten von %g Personen eingeben: \n', num_pers );
% Einleseschleife: von n=1 bis n=num_pers
for n = 1:num_pers
person(n).name = input( 'Name: ' );
person(n).telnr = input( 'Tel.-Nr.: ' );
fprintf( '\n' );
end
telNr = input( 'Gesuchte Telefonnummer: ' );
telGefunden = 0; % Flag, ob Tel-Nr. gefunden wurde
% Suche in struct-Array
for n = 1:num_pers
if( telNr == person(n).telnr )
fprintf( 'Gefunden: %s hat die Tel.Nr.: %g \n', ...
person(n).name, person(n).telnr );
telGefunden = 1;
end
end
% Meldung, falls keine Person gefunden wurde
if( telGefunden == 0 )
fprintf( 'Es wurde keine Person mit Tel-Nr. %g gefunden. \n', ...
telNr );
end
Lösung Aufgabe 3
function koerper()
% Aufgabe 3: zeichnet verschiedene 3D-Körper
%
koerper()
pt = struct( 'x', 0, 'y', 0, 'z', 0 );
ln = struct( 'p1', [], 'p2', [] );
typ = input( 'Körper-Typ (´p´=Pyramide, ´q´=Quader): ' );
% Unterschiedliche Geometrien je nach Körpertyp:
anzLn = 0;
laenge = 0;
hoehe = 0;
switch( typ )
case 'p'
anzLn = 8;
laenge = input( 'Seitenlänge der Pyramide: ' );
hoehe = input( 'Höhe der Pyramide: ' );
% Definition der Punkte des Körpers
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 8
Strukturen in MATLAB
pt(1).x
pt(2).x
pt(3).x
pt(4).x
pt(5).x
=
=
=
=
=
0;
laenge;
laenge;
0;
laenge/2;
pt(1).y
pt(2).y
pt(3).y
pt(4).y
pt(5).y
=
=
=
=
=
0;
0;
laenge;
laenge;
laenge/2;
pt(1).z
pt(2).z
pt(3).z
pt(4).z
pt(5).z
% Definition der Linien des Körpers über
ln(1) = struct( 'p1', pt(1), 'p2', pt(2)
ln(2) = struct( 'p1', pt(2), 'p2', pt(3)
ln(3) = struct( 'p1', pt(3), 'p2', pt(4)
ln(4) = struct( 'p1', pt(4), 'p2', pt(1)
Punkte
);
);
);
);
ln(5)
ln(6)
ln(7)
ln(8)
);
);
);
);
=
=
=
=
struct(
struct(
struct(
struct(
'p1',
'p1',
'p1',
'p1',
pt(1),
pt(2),
pt(3),
pt(4),
'p2',
'p2',
'p2',
'p2',
pt(5)
pt(5)
pt(5)
pt(5)
=
=
=
=
=
0;
0;
0;
0;
hoehe;
=
=
=
=
=
=
=
=
0;
0;
0;
0;
hoehe;
hoehe;
hoehe;
hoehe;
case 'q'
anzLn = 12;
laenge = input( 'Seitenlänge des Quaders: ' );
hoehe = input( 'Höhe des Quaders: ' );
% Definition der Punkte des
pt(1).x = 0;
pt(1).y
pt(2).x = laenge;
pt(2).y
pt(3).x = laenge;
pt(3).y
pt(4).x = 0;
pt(4).y
pt(5).x = 0;
pt(5).y
pt(6).x = laenge;
pt(6).y
pt(7).x = laenge;
pt(7).y
pt(8).x = 0;
pt(8).y
Körpers
= 0;
= 0;
= laenge;
= laenge;
= 0;
= 0;
= laenge;
= laenge;
pt(1).z
pt(2).z
pt(3).z
pt(4).z
pt(5).z
pt(6).z
pt(7).z
pt(8).z
% Definition der Linien des Körpers über
ln(1) = struct( 'p1', pt(1), 'p2', pt(2)
ln(2) = struct( 'p1', pt(2), 'p2', pt(3)
ln(3) = struct( 'p1', pt(3), 'p2', pt(4)
ln(4) = struct( 'p1', pt(4), 'p2', pt(1)
Punkte
);
);
);
);
ln(5)
ln(6)
ln(7)
ln(8)
);
);
);
);
ln(9)
ln(10)
ln(11)
ln(12)
=
=
=
=
struct(
struct(
struct(
struct(
=
=
=
=
struct(
struct(
struct(
struct(
'p1',
'p1',
'p1',
'p1',
pt(1),
pt(2),
pt(3),
pt(4),
'p1',
'p1',
'p1',
'p1',
pt(5),
pt(6),
pt(7),
pt(8),
'p2',
'p2',
'p2',
'p2',
'p2',
'p2',
'p2',
'p2',
pt(5)
pt(6)
pt(7)
pt(8)
pt(6)
pt(7)
pt(8)
pt(5)
);
);
);
);
otherwise
fprintf( 'Unbekannter Typ! \n' );
return;
end
% Aufruf der Zeichen-Funktion
drawLines( ln, anzLn );
% Ansicht und Bildgröße bestimmen
view( 30, 20 );
axis( [-2, laenge+2, -2, laenge+2, -2, hoehe+2] );
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 8
Strukturen in MATLAB
return;
function drawLines( line, nmax )
figure;
hold on;
for n = 1:nmax
x(1) = line(n).p1.x;
y(1) = line(n).p1.y;
z(1) = line(n).p1.z;
x(2) = line(n).p2.x;
y(2) = line(n).p2.y;
z(2) = line(n).p2.z;
end
plot3( x,y,z, '-s' );
hold off;
return;
Lösung Aufgabe 4
function d = addLn( d, n1, n2 )
d.anz_ln = d.anz_ln + 1;
d.ln( d.anz_ln ) = struct( 'p1', n1, 'p2', n2 );
drawLines( d );
return;
function d = addPt( d, x, y, z )
d.anz_pt = d.anz_pt + 1;
d.pt( d.anz_pt ).x = x;
d.pt( d.anz_pt ).y = y;
d.pt( d.anz_pt ).z = z;
return;
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 9
Dateien in MATLAB
Aufgabe 1
Schreiben Sie eine Funktion, die testet, ob eine Datei existiert:
function res = fileExists( filename )
Die Funktion gibt 0 zurück, wenn die Datei mit dem Name filename nicht existiert, und 1,
wenn sie gefunden wurde.
Tipp: Versuchen Sie als Test, die Datei zum Lesen zu öffnen. Ein ungültiger File-Identifier liefert die Information, ob das geklappt hat.
Aufgabe 2
Schreiben Sie eine Funktion, die zwei Textdateien zu einer einzigen zusammenfügt:
function res = filesAdd( file1, file2, new_file )
Als Argumente werden jeweils die Dateinamen der beiden bestehenden Dateien und der
Name der neu zu erstellenden Datei übergeben.
Testen Sie die Funktion mit verschiedenen Dateien und überprüfen Sie das Ergebnis!
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 9
Dateien in MATLAB
Lösung Aufgabe 1
function res = fileExists( filename )
% Aufgabe 1: testet, ob die Datei mit filename existiert
%
res = fileExists( filename )
% Datei zu filename testweise zum Lesen (read) öffnen
fid = fopen( filename, 'r' );
% Check, ob fid gültig ist
if( fid < 0 )
res = 0; % ungültig, deshalb eine 0
else
res = 1; % gültig, die Datei gibt es
% offene Datei wieder schließen
fclose( fid );
end
Lösung Aufgabe 2
function res = filesAdd( file1, file2, new_file )
% Aufgabe 2: addiert den Inhalt zweier Dateien
%
res = filesAdd( file1, file2, new_file )
res = 0;
% Vorbelegung, noch nichts OK
% Datei zu filename testweise zum Lesen (read) öffnen
fid1 = fopen( file1, 'r' );
if( fid1 < 0 )
% Check, ob fid gültig ist
return;
end
fid2 = fopen( file2, 'r' );
if( fid2 < 0 )
% Check, ob fid gültig ist
fclose( fid1 );
return;
end
fidNew = fopen( new_file, 'w' );
if( new_file < 0 )
% Check, ob fid gültig ist
fclose( fid1 );
fclose( fid2 );
return;
end
% so lange weiter, bis Ende der ersten Datei erreicht ist
weiter = 1; % Flag als Merker, ob Datei-Ende erreicht ist
while( weiter )
% nächste Zeile einlesen
tline = fgetl( fid1 );
if( tline == -1 ) % Datei-Ende erreicht, falls tline = -1
weiter = 0; % Flag zum Beenden setzen
else
% Text in die neue Datei schreiben
fprintf( fidNew, '%s \n', tline );
end
end
fclose( fid1 );
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 9
Dateien in MATLAB
weiter = 1; % Flag als Merker, ob Datei-Ende erreicht ist
while( weiter )
% nächste Zeile einlesen
tline = fgetl( fid2 );
if( tline == -1 ) % Datei-Ende erreicht, falls tline = -1
weiter = 0; % Flag zum Beenden setzen
else
% Text in die neue Datei schreiben
fprintf( fidNew, '%s \n', tline );
end
end
fclose( fid2
);
fclose( fidNew );
res = 1;
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 10
Strings in MATLAB
Aufgabe 1
Schreiben Sie die Abfragefunktion
function erg = frage( txt );
die einen übergebenen Fragetext txt auf den Bildschirm schreibt und als Tastatur-Eingabe
eine Antwort erwartet. Kommt als Antwort der String „Ja“, dann gibt die Funktion den Wert
1 zurück. Für jede andere Antwort ist der Rückgabewert 0.
Aufgabe 2
Schreiben Sie eine Funktion, die eine txt-Datei in eine HTML-Datei umwandelt. Die HTMLDatei hat den gleichen Namen wie die txt-Datei, nur die andere Extension „.html“. Zum Beispiel wird aus myFile.txt die Datei myFile.html.
Am Anfang der neuen HTML-Datei steht zum Beispiel folgender Text:
<HTML>
<HEAD> <TITLE>Von txt zu html</TITLE> </HEAD>
<BODY>
Dann wird die txt-Datei eingelesen. Die Zeichen der einzelnen Zeilen werden analysiert und
gegebenenfalls in das HTML-Format konvertiert. Die meisten Zeichen können unverändert in
die HTML-Datei übernommen werden. Nur folgende Zeichen werden ersetzt:
\n
<br>
ä
ä
Ä
Ä
ö
ö
Ö
Ö
ü
ü
Ü
Ü
ß
ß
Am Ende der HTML-Datei kommen als Abschluss noch die beiden Zeilen:
</BODY>
</HTML>
Erzeugen Sie eine Textdatei. Konvertieren Sie diese mit Ihrer Funktion nach HTML und überprüfen Sie das Ergebnis, die neu erzeugte HTML-Datei, in Ihrem Web-Browser.
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 10
Strings in MATLAB
Lösung Aufgabe 1
function erg = frage( txt )
% Aufgabe 1: fragt nach 'Ja'
%
erg = frage( txt )
% Antwort von der Tastatur holen
antw = input( txt );
% Vergleich der Antwort mit dem Text 'Ja'
if( strcmp( antw, 'Ja' ) )
erg = 1;
else
erg = 0;
end
Lösung Aufgabe 2
function erg = txt2html( txtFile, htmlFile )
% Aufgabe 2: wandelt einen Text- in einen HTML-File
%
erg = txt2html( txtFile, htmlFile )
erg = 0;
fid1 = fopen( txtFile, 'r' );
if( fid1 < 0 )
% Check, ob fid gültig ist
return;
end
fid2 = fopen( htmlFile, 'w' );
if( fid2 < 0 )
% Check, ob fid gültig ist
fclose( fid1 );
return;
end
fprintf( fid2, '<HTML> \n' );
fprintf( fid2, '<HEAD> <TITLE>Von txt zu html</TITLE> </HEAD> \n' );
fprintf( fid2, '<BODY> \n' );
% so lange weiter, bis Ende der Text-Datei erreicht ist
weiter = 1; % Flag als Merker, ob Datei-Ende erreicht ist
while( weiter )
% nächste Zeile einlesen
tline = fgetl( fid1 );
if( tline == -1 ) % Datei-Ende erreicht, falls tline = -1
weiter = 0; % Flag zum Beenden setzen
else
% Zahl der Zeichen in der Zeile
len = length( tline );
% alle Zeichen untersuchen
for( n=1:len )
z = '';
% n. Zeichen der Zeile checken
switch( tline( n ) )
case 'ä'
z = 'ä';
case 'ö'
z = 'ö';
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 10
Strings in MATLAB
case 'ü'
z = 'ü';
case 'Ä'
z = 'Ä';
case 'Ö'
z = 'Ö';
case 'Ü'
z = 'Ü';
case 'ß'
z = '&szlig';
% normales Zeichen
otherwise
z = tline( n );
end
% evtl. gewandeltes Zeichen in Datei schreiben
fprintf( fid2, '%s', z );
end
% Zeilenende in die neue Datei schreiben
fprintf( fid2, '<br> \n' );
end
end
fprintf( fid2, '</BODY> \n' );
fprintf( fid2, '</HTML> \n' );
fclose( fid1 );
fclose( fid2 );
erg = 1;
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 11
Anwendungen in MATLAB
Aufgabe 1
Die Seile 1 und 2 sollen in unserer Konstruktion durch Stäbe ersetzt werden. Die zusätzliche
äußere Kraft F2 sei nicht vorhanden. Stellen Sie für diesen Fall das lineare Gleichungssystem
auf und berechnen Sie die Kräfte in den Stäben. Was fällt Ihnen beim Stab 2 auf?
Aufgabe 2:
Wo schneiden sich zwei Geraden in der Ebene? Auch diese Aufgabe führt auf ein lineares
Gleichungssystem. Die Gleichungen für die beiden Geraden y1(x) und y2(x) lauten:
y1 = a * x + b
y2 = c * x + d
a, b, c und d sind vorgegebene, reelle Zahlen.
Der Schnittpunkt der Geraden P = (x,y) ist dadurch definiert, dass dort die x- und die y-Werte
der beiden Geraden übereinstimmen, speziell ist y1 = y2 = y. Etwas umgeschrieben erhält
man so die Gleichungen:
- a * x + y = b
- c * x + y = d
oder als Matrix-Gleichung: A · P = r mit:
=
1
,
1
=
,
=
Die Determinante von A liefert die Information, ob es für eine bestimmte Wahl von a, b, c, d
überhaupt einen Schnittpunkt gibt.
Berechnen Sie die Schnittpunkte für verschiedene Werte von a, b, c, d – beispielsweise:
a = 1, b = 0, c = -1, d = 0
a = 2, b = 3, c = 5, d = -3
a = 3, b = 0, c = 3, d = 1
Erstellen Sie jeweils eine Skizze mit den Geraden und verifizieren Sie die gefundenen
Schnittpunkte.
In ähnlicher Weise können Sie übrigens auch den Schnittpunkt einer Geraden mit einer Ebene im dreidimensionalen Raum berechnen – nur dass Sie dann drei Gleichungen mit drei
Unbekannten (x, y, z) haben.
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 11
Anwendungen in MATLAB
Lösung Aufgabe 1
%
% function tm_stabsystem()
%
Kraftsystem mit Stäben
%
function tm_stabsystem()
% Konstante Variable belegen
a1 = 70; a2 = 40; b = 70; F1 = 80;
A = [ -cosd(a1), -cosd(a2); sind(a1), -sind(a2) ];
% äußere Kraft berechnen (F2 = 0)
r = [ 0; F1 ];
% Aufgabe lösen
Fs = A \ r;
% Ausgabe der Daten
fprintf( 'Stabkraft Fs1 = %g N \n', Fs(1) );
fprintf( 'Stabkraft Fs2 = %g N \n', Fs(2) );
% Fs2 wird negativ, d.h. der Stab wird auf Druck belastet
Lösung Aufgabe 2
%
% function schnittpunkt( a, b, c, d )
%
Berechnung von Geraden-Schnittpunkten
%
y1 = a * x + b
%
y2 = c * x + d
%
%
Testaufrufe:
%
schnittpunkt( 1, 0, -1, 0 );
%
schnittpunkt( 2, 3, 5, -3 );
%
schnittpunkt( 3, 0, 3, 1 );
%
function schnittpunkt( a, b, c, d )
%
A
%
r
A * P = r, P = [x;y] : Schnittpunkt
= [ -a, 1; -c, 1 ];
rechte Seite berechnen
= [ b; d ];
% Test auf Lösbarkeit
dA = det( A );
if( abs( dA ) < eps )
fprintf( 'Geraden sind parallel, kein Schnittpunkt \n' );
return;
end
% Aufgabe lösen
P = A \ r;
% Ausgabe des Schnittpunkts
fprintf( 'Schnittpunkt P = (%g,%g) \n', P(1), P(2) );
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 12
Anwendungen in MATLAB
Aufgabe 1
Schreiben Sie eine MATLAB-Funktion, die folgende periodische Funktion für die Grundfrequenz f = 220 Hz im Intervall t = [0, 2s] grafisch darstellt und das zugehörige Frequenzspektrum berechnet und anzeigt:
y = sin(2*pi*f*t) - 1/9 * sin(2*pi*3*f*t) + ...
1/25 * sin(2*pi*5*f*t) - 1/49 * sin(2*pi*7*f*t);
Spielen Sie den Ton mit der Funktion wavplay ab.
Aufgabe 2:
Schreiben Sie eine MATLAB-Funktion, die die folgenden vier Funktionen zur Grundfrequenz
f = 440 Hz im Intervall t = [0, 2s] grafisch darstellt und jeweils das zugehörige Frequenzspektrum berechnet und anzeigt:
y1 = sin( 2*pi*f*t );
y2 = cos( 2*pi*f*t );
y3 = sin( 2*pi*f*t + pi/6 );
y4 = ( sin( 2*pi*f*t ) + cos( 2*pi*f*t ) ) / sqrt(2);
Zusätzlich zum Betrag der Frequenzamplituden soll zu jeder Funktion auch noch der Phasenwinkel der Frequenzen berechnet und dargestellt werden.
Wodurch unterscheiden sich die Frequenzspektren?
Hinweis: Den Phasenwinkel w zu einer komplexen Zahl erhalten Sie mit Hilfe der MATLABFunktion angle, also beispielsweise w = angle(c) für den Frequenzvektor c.
Aufgabe 3:
Schreiben Sie eine MATLAB-Funktion, die folgende periodische Funktion für die Grundfrequenz f = 220 Hz im Intervall t = [0, 2s] grafisch darstellt und das zugehörige Frequenzspektrum berechnet und anzeigt:
y = sign( sin(2*pi*f*t) );
Hinweis: Die MATLAB-Funktion sign berechnet das Vorzeichen der übergebenen Zahl, also
beispielsweise: sign( 2 ) = +1, sign( 7 ) = 1.
Spielen Sie den Ton mit der Funktion wavplay ab.
Aufgabe 4:
Schreiben Sie eine MATLAB-Funktion, die folgende periodische Funktion für die Grundfrequenz f = 220 Hz im Intervall t = [0, 2s] grafisch darstellt und das zugehörige Frequenzspektrum berechnet und anzeigt:
y = sign( sin(2*pi*f*t) ) - sin(2*pi*f*t);
Spielen Sie den Ton mit der Funktion wavplay ab.
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 12
Anwendungen in MATLAB
Lösung Aufagbe 1
function spektrum3()
% Aufgabe 1: Zeitverlauf und Spektrum anzeigen
%
spektrum3()
% Zeitintervall von 0 bis 2 s
% Array mit Stützpunkten im Abstand 1/40000 s
t = 0 : 1/40000 : 2;
f
= 220;
% Grundfrequenz 220 Hz
H
= 1;
% 1 als Maximalamplitude
% Array y mit Funktionswerten an den t-Stützpunkten
y = H * ( sin(2*pi*f*t)
- 1/9 * sin(2*pi*3*f*t) + ...
1/25 * sin(2*pi*5*f*t) - 1/49 * sin(2*pi*7*f*t) );
% Ausgabe der Funktion als 2D-Plot
subplot(2,1,1)
plot( t, y );
axis( [0 1/10 -4 4] ) % fester Ausgabebereich
% Fourier-Transformation
c = fft( y );
% Betrag der Frequenzamplituden
A = abs( c );
% Array der Frequenzen, normiert auf 40000 Hz
f = (0:length(c)-1).*40000/length(c);
% 2D-Plot der Frequenzamplituden über den Frequenzen
subplot(2,1,2)
plot( f, A )
% Frequenzbereich: 0 Hz bis 4000 Hz
axis( [0 2000 -1 50000] )
% Abspielen
wavplay( y, 40000 );
Lösung Aufagbe 2
function spektrum4()
% Aufgabe 2: Zeitverlauf und Spektrum anzeigen
%
spektrum4()
%
%
t
f
Zeitintervall von 0 bis 1/20 s
Array mit Stützpunkten im Abstand 1/40000 s
= 0 : 1/40000 : 1/20;
= 440;
% Grundfrequenz 440 Hz
% Array y mit Funktionswerten an den t-Stützpunkten
y1 = sin(2*pi*f*t);
plotSpektrum( y1, 1, t, f )
y2 = cos(2*pi*f*t);
plotSpektrum( y2, 2, t, f )
y2 = cos(2*pi*f*t + pi/6 );
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 12
Anwendungen in MATLAB
plotSpektrum( y2, 3, t, f )
y2 = ( sin( 2*pi*f*t ) + cos( 2*pi*f*t ) ) / sqrt(2);
plotSpektrum( y2, 4, t, f )
% gemeinsame Plot-Funktion
function plotSpektrum( y, nr, t, f )
% Ausgabe der Funktion als 2D-Plot
subplot( 4, 3, (nr-1)*3+1 ),
plot( t, y );
axis( [0 1/100 -1.5 1.5] ) % fester Ausgabebereich
c = fft( y );
A = abs( c );
w = angle( c );
% Fourier-Transformation
% Betrag der Frequenzamplituden
% Phasenwinkel
% Array der Frequenzen, normiert auf 40000 Hz
f = (0:length(c)-1).*40000/length(c);
% 2D-Plot der Frequenzamplituden über den Frequenzen
subplot( 4, 3, (nr-1)*3+2 )
plot( f, A )
% Frequenzbereich: 0 Hz bis 4000 Hz
axis( [0 1500 -1 1200] )
% 2D-Plot der Phasen % Unterschiede nur in der Phasenlage, nicht im Frequenzbetrag
subplot( 4, 3, (nr-1)*3+3 )
plot( f, w )
% Frequenzbereich: 0 Hz bis 4000 Hz
axis( [0 1500 -4 4] )
Lösung Aufgabe 3
function spektrumSign()
% Aufgabe 3: Zeitverlauf und Spektrum anzeigen
%
spektrumSign()
% Zeitintervall von 0 bis 2 s
% Array mit Stützpunkten im Abstand 1/40000 s
t = 0 : 1/40000 : 2;
f
= 220;
% Grundfrequenz 220 Hz
% Array y mit Funktionswerten an den t-Stützpunkten
y = sign( sin(2*pi*f*t) );
% Ausgabe der Funktion als 2D-Plot
subplot(2,1,1),
plot( t, y );
axis( [0 1/20 -2 2] ) % fester Ausgabebereich
%
c
%
A
Fourier-Transformation
= fft( y );
Betrag der Frequenzamplituden
= abs( c );
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 12
Anwendungen in MATLAB
% Array der Frequenzen, normiert auf 40000 Hz
f = (0:length(c)-1).*40000/length(c);
% 2D-Plot der Frequenzamplituden über den Frequenzen
subplot(2,1,2)
plot( f, A )
% Frequenzbereich: 0 Hz bis 4000 Hz
axis( [0 4000 -1 60000] )
% Abspielen
wavplay( y, 40000 );
function spektrumSign()
% Aufgabe 4.1.3: Zeitverlauf und Spektrum anzeigen
%
spektrumSign()
% Zeitintervall von 0 bis 2 s
% Array mit Stützpunkten im Abstand 1/40000 s
t = 0 : 1/40000 : 2;
f
= 220;
% Grundfrequenz 220 Hz
% Array y mit Funktionswerten an den t-Stützpunkten
y = sign( sin(2*pi*f*t) );
% Ausgabe der Funktion als 2D-Plot
subplot(2,1,1),
plot( t, y );
axis( [0 1/20 -2 2] ) % fester Ausgabebereich
%
c
%
A
Fourier-Transformation
= fft( y );
Betrag der Frequenzamplituden
= abs( c );
% Array der Frequenzen, normiert auf 40000 Hz
f = (0:length(c)-1).*40000/length(c);
% 2D-Plot der Frequenzamplituden über den Frequenzen
subplot(2,1,2)
plot( f, A )
% Frequenzbereich: 0 Hz bis 4000 Hz
axis( [0 4000 -1 60000] )
% Abspielen
wavplay( y, 40000 );
Lösung Aufgabe 4
function spektrumSign2()
% Aufgabe 4: Zeitverlauf und Spektrum anzeigen
%
spektrumSign2()
% Zeitintervall von 0 bis 2 s
% Array mit Stützpunkten im Abstand 1/40000 s
t = 0 : 1/40000 : 2;
f
= 220;
% Grundfrequenz 220 Hz
% Array y mit Funktionswerten an den t-Stützpunkten
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 12
Anwendungen in MATLAB
y = sign( sin(2*pi*f*t) ) - sin(2*pi*f*t);
% Ausgabe der Funktion als 2D-Plot
subplot(2,1,1),
plot( t, y );
axis( [0 1/20 -2 2] ) % fester Ausgabebereich
%
c
%
A
Fourier-Transformation
= fft( y );
Betrag der Frequenzamplituden
= abs( c );
% Array der Frequenzen, normiert auf 40000 Hz
f = (0:length(c)-1).*40000/length(c);
% 2D-Plot der Frequenzamplituden über den Frequenzen
subplot(2,1,2)
plot( f, A )
% Frequenzbereich: 0 Hz bis 4000 Hz
axis( [0 8000 -1 20000] )
% Abspielen
wavplay( y, 40000 );
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 13
Anwendungen in MATLAB
Aufgabe 1
Diskutieren Sie folgende Funktion:
y(x) = x4 - 5·x3 + 2·x - 2
Verwenden Sie zur Ausgabe das Intervall x = [-1, +5] und als x-Schrittweite den Wert 0.1.
Aufgabe 2
Lösen Sie folgende Gleichungen:
• 4
20
+ 25 = 0
•
•
•
•
•
3
+ +7=0
5
2
+3=0
+3
10
=0
6
+ 11
6=0
2
+1=0
Aufgabe 3
Legen Sie durch folgende Temperatur-Messwerte eine Ausgleichsgerade und stellen Sie die
Messwerte und die Gerade grafisch dar:
16.2, 15.8, 17.6, 19.1, 19.2, 21.0, 20.9, 22.5, 23.1, 23.7
Aufgabe 4
Erzeugen Sie mit Hilfe des MATLAB-Aufrufs w = rand(100,1) ein Datenfeld mit 100 gleichmäßig im Intervall [0,1] verteilten Werten. Berechnen Sie dazu den Mittelwert und die Standardabweichung.
Wiederholen Sie die Auswertung für den Aufruf w = randn(100,1), durch den normalverteilte Daten um den Ursprung erzeugt werden.
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 13
Anwendungen in MATLAB
Lösung Aufgabe 1
function kurvendisk()
% Aufgabe 1: Kurvendiskussiom
%
kurvendisk()
% Funktion: y(x) = x^4 - 5*x^3 + 2*x - 2
% als Polynom-Vektor:
fprintf( 'Funktions-Polynom: ' );
pol = [1,-5,0,2,-2]
% x-Werte zur Anzeige
x = [-1:0.1:5];
% Funktionswerte berechnen und plotten
y = polyval( pol, x );
plot(x,y);
grid on
% Kurvendiskussion
% Nullstellen
fprintf( 'Nullstellen: ' );
nullst = roots( pol )
% Ableitungs-Funktion bzw. Polynom
fprintf( 'Ableitungs-Polynom: ' );
d1 = polyder( pol )
fprintf( 'Extremwerte: ' );
extr = roots( d1 )
% 2. Ableitung:
fprintf( '2. Ableitung: ' );
d2 = polyder( d1 )
fprintf( 'Wendepunkte: ' );
wendep = roots( d2 )
fprintf( 'Krümmung an den Extremwerten: \n' );
kr1 = polyval( d2, extr(1) )
if( kr1 > 0 )
fprintf( '-> Minimum bei x=%g \n', extr(1) );
elseif( kr1 < 0 )
fprintf( '-> Maximum bei x=%g \n', extr(1) );
else
fprintf( '-> Sattelpunkt bei x=%g \n', extr(1) );
end
kr2 = polyval( d2, extr(2) )
if( kr2 > 0 )
fprintf( '-> Minimum bei x=%g \n', extr(2) );
elseif( kr2 < 0 )
fprintf( '-> Maximum bei x=%g \n', extr(2) );
else
fprintf( '-> Sattelpunkt bei x=%g \n', extr(2) );
end
kr3 = polyval( d2, extr(3) )
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 13
Anwendungen in MATLAB
if( kr3 > 0
fprintf(
elseif( kr3
fprintf(
else
fprintf(
end
)
'-> Minimum bei x=%g \n', extr(3) );
< 0 )
'-> Maximum bei x=%g \n', extr(3) );
'-> Sattelpunkt bei x=%g \n', extr(3) );
Lösung Aufgabe 2
function gleichungen()
% Aufgabe 2: Gleichungen
%
gleichungen()
% 1. Gleichung: 4 * x^2 - 20 * x + 25 = 0
% als Polynom-Vektor:
fprintf( '1. Gleichung: ' );
g1 = [4,-20,25]
% Nullstellen
fprintf( 'Lösung d.h. Nullstellen: ' );
L1 = roots( g1 )
% 2. Gleichung: -3 * x^2 + x + 7 = 0
fprintf( '2. Gleichung: ' );
g2 = [-3,1,7]
% Nullstellen
fprintf( 'Lösung d.h. Nullstellen: ' );
L2 = roots( g2 )
% 3. Gleichung: 5 * x^2 - 2 * x + 3 = 0
fprintf( '3. Gleichung: ' );
g3 = [5,-2,3]
% Nullstellen
fprintf( 'Lösung d.h. Nullstellen: ' );
L3 = roots( g3 )
% 4. Gleichung: x^3 + 3 * x^2 - 10 * x = 0
fprintf( '4. Gleichung: ' );
g4 = [1,3,-10,0]
% Nullstellen
fprintf( 'Lösung d.h. Nullstellen: ' );
L4 = roots( g4 )
% 5. Gleichung: x^3 - 6 * x^2 + 11 * x - 6 = 0
fprintf( '5. Gleichung: ' );
g5 = [1,-6,11,-6]
% Nullstellen
fprintf( 'Lösung d.h. Nullstellen: ' );
L5 = roots( g5 )
% 6. Gleichung: x^4 - 2 * x^2 + 1 = 0
fprintf( '6. Gleichung: ' );
g6 = [1,0,-2,1]
% Nullstellen
fprintf( 'Lösung d.h. Nullstellen: ' );
L6 = roots( g6 )
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 13
Anwendungen in MATLAB
Lösung Aufgabe 3
function temperaturen()
% Aufgabe 3: Ausgleichgerade
%
temperaturen()
% Messwerte:
werte = [16.2, 15.8, 17.6, 19.1, 19.2, 21.0, 20.9, 22.5, 23.1, 23.7];
% Messzeiten
t = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
% Ausgleichgerade bestimmen
p = polyfit( t, werte, 1 );
w = polyval( p, t );
hold on
% Ausgleichgerade zeichnen
plot(t,w);
% Messpunkte zeichnen
plot(t,werte,'s');
axis([0 11 15 25])
ylabel( 'Temperatur / °C' );
xlabel( 'Zeit / min' );
hold off
Lösung Aufgabe 4
function statistik()
% Aufgabe 4: Statistik-Aufrufe
%
statistik()
% gleichverteilte Messwerte
we=rand(100,1);
% Mittelwert
me = mean( we );
% Standard-Abweichung
se = std( we );
fprintf( 'Gleichverteilung: \n' );
fprintf( ' Mittelwert = %g, Standardabw. = %g \n', me, se );
wn=randn(100,1);
% Mittelwert
mn = mean( wn );
% Standard-Abweichung
sn = std( wn );
fprintf( 'Normalverteilung: \n' );
fprintf( ' Mittelwert = %g, Standardabw. = %g \n', mn, sn );
figure
subplot(1,2,1)
plot( we, 'x' );
ylabel( 'gleichverteilt' );
subplot(1,2,2)
plot( wn, 'x' );
ylabel( 'normalverteilt' );
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 14
Anwendungen in MATLAB
Aufgabe 1
Lösen Sie die Bewegungsgleichung für das ungedämpfte Fadenpendel, das mit einem Winkel
w um die Senkrechte schwingen kann. Die Differentialgleichung für die Winkelfunktion w(t)
lautet:
( )
sin( ) = 0
+
L: Fadenlänge, z. B. 0.5 m, g = 9.81 m/s : Erdbeschleunigung
Oft verwendet man folgende Näherung der DGL für kleine Winkel:
( )
+
w=0
Lösen Sie mit MATLAB die DGL sowohl für die Version A als auch für Version B. Stellen Sie die
Lösung für unterschiedliche Anfangsbedingungen (Anfangswinkel w und Anfangswinkelgeschwindigkeit dw/dt) grafisch dar.
Warum unterscheiden sich die Lösungen von A und B für große Anfangswinkelgeschwindigkeiten? Diskutieren Sie für diesen Fall die Lösung von A.
Bauen Sie in die linke Seite der DGL auch noch folgenden Reibungsterm ein:
+2
Aufgabe 2
Lösen Sie die Bewegungsgleichung für den senkrechten Fall. Die DGL für die Ortsfunktion
z(t) lautet:
g = 9.81 m/s: Erdbeschleunigung
+
=0
Lösen Sie mit MATLAB die DGL und stellen Sie die Lösung für unterschiedliche Anfangsbedingungen (Anfangsort z und Anfangsgeschwindigkeit dz/dt) grafisch dar.
Bauen Sie in die linke Seite der DGL auch noch folgenden Reibungsterm ein:
+2
Stellen Sie hierfür sowohl die Ortsfunktion z(t) als auch die Geschwindigkeitsfunktion dz/dt(t)
grafisch dar.
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 14
Anwendungen in MATLAB
Lösung Aufgabe 1
%
% function Pendel_1( w0, v0, tm )
%
Pendel-Schwingung, vollständig
%
w0 : Anfangswinkel in Radiant
%
v0 : Anfangswinkelgeschwindigkeit
%
tm : Länge des Zeitintervalls in Sekunden
%
%
Beispiel-Aufrufe:
%
Pendel_1( 0.1, 0, 10 ) - sinus-ähnlich
%
Pendel_1( 2.8, 0, 10 ) - noch periodisch, andere Frequenz
%
Pendel_1( 2.8, -2, 3 ) - durchschlagend
%
%
zugehörige DGL-Funktion: Pendel_1_Fun.m
%
function Pendel_1( w0, v0, tm )
% Pendel-Konstanten
L = 0.5;
% Fadenlänge, 0.5 m,
g = 9.81; % 9.81 m/s2: Erdbeschleunigung
% globale Variable für die DGL-Funktion
global gVar;
gVar = g / L;
% Anfangswerte
y0 = [ w0, v0 ];
% Zeit-Intervall
tspan = [0,tm];
% Lösung des Anfangswert-Problems
[t,y] = ode45( 'Pendel_1_Fun', tspan, y0 );
% daraus den Funktionswert - 1. Komponente
z = y( :, 1 );
% alles plotten
plot( t, z );
grid on;
% DGL-Funktion für ode45:
%
für Pendel_1
% function dy_dt = Pendel_1_Fun( t, y )
%
t : Zeitvariable, y : Vektor aus z und v
function dy_dt = Pendel_1_Fun( t, y )
global gVar; % global: Quadrat der Kreisfrequenz
% dy_dt(1)
dy_dt(1,1)
% dy_dt(2)
dy_dt(2,1)
=
=
=
=
Ableitung von z = y(1) ist v = y(2) :
y(2);
Ableitung von v = y(2): DGL
- gVar * sin( y(1) );
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 14
Anwendungen in MATLAB
%
% function Pendel_2( w0, v0, tm )
%
Pendel-Schwingung, linearisiert
%
w0 : Anfangswinkel in Radiant
%
v0 : Anfangswinkelgeschwindigkeit
%
tm : Länge des Zeitintervalls in Sekunden
%
%
Beispiel-Aufrufe:
%
Pendel_2( 0.1, 0, 10 ) - sinus-ähnlich
%
Pendel_2( 2.8, 0, 10 ) - Frequenz bleibt gleich
%
Pendel_2( 2.8, -2, 3 ) - nicht durchschlagend
%
%
zugehörige DGL-Funktion: Pendel_2_Fun.m
%
function Pendel_2( w0, v0, tm )
% Pendel-Konstanten
L = 0.5;
% Fadenlänge, 0.5 m,
g = 9.81; % 9.81 m/s2: Erdbeschleunigung
% globale Variable für die DGL-Funktion
global gVar;
gVar = g / L;
% Anfangswerte
y0 = [ w0, v0 ];
% Zeit-Intervall
tspan = [0,tm];
% Lösung des Anfangswert-Problems
[t,y] = ode45( 'Pendel_2_Fun', tspan, y0 );
% daraus den Funktionswert - 1. Komponente
z = y( :, 1 );
% alles plotten
plot( t, z );
grid on;
% Linearisierte DGL-Funktion für ode45:
%
für Pendel_2
% function dy_dt = Pendel_2_Fun( t, y )
%
t : Zeitvariable, y : Vektor aus z und v
function dy_dt = Pendel_2_Fun( t, y )
global gVar; % global: Quadrat der Kreisfrequenz
% dy_dt(1)
dy_dt(1,1)
% dy_dt(2)
dy_dt(2,1)
=
=
=
=
Ableitung von z = y(1) ist v = y(2) :
y(2);
Ableitung von v = y(2): DGL
- gVar * y(1);
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 14
Anwendungen in MATLAB
%
% function Pendel_3( w0, v0, tm, d )
%
Pendel-Schwingung, vollständig, mit Reibung
%
w0 : Anfangswinkel in Radiant
%
v0 : Anfangswinkelgeschwindigkeit
%
tm : Länge des Zeitintervalls in Sekunden
%
d : Reibungskoeffizient
%
%
Beispiel-Aufrufe:
%
Pendel_3( 0.1, 0, 10, 0.1 ) - schwache Dämpfung
%
Pendel_3( 0.1, 0, 10, 1 ) - starke Dämpfung
%
Pendel_3( 2.8, -2, 5, 0 ) - durchschlagend
%
Pendel_3( 2.8, -2, 5, 0.1 ) - periodisch mit Dämpfung
%
Pendel_3( 2.8, -5, 5, 0.1 ) - ein Durchschlag
%
%
zugehörige DGL-Funktion: Pendel_3_Fun.m
%
function Pendel_3( w0, v0, tm, d )
% Pendel-Konstanten
L = 0.5;
% Fadenlänge, 0.5 m,
g = 9.81; % 9.81 m/s2: Erdbeschleunigung
% globale Variable für die DGL-Funktion
global gVar;
gVar = g / L;
global delta;
delta = 2 * d;
% Anfangswerte
y0 = [ w0, v0 ];
% Zeit-Intervall
tspan = [0,tm];
% Lösung des Anfangswert-Problems
[t,y] = ode45( 'Pendel_3_Fun', tspan, y0 );
% daraus den Funktionswert - 1. Komponente
z = y( :, 1 );
% alles plotten
plot( t, z );
grid on;
% DGL-Funktion für ode45:
%
für Pendel_3
% function dy_dt = Pendel_3_Fun( t, y )
%
t : Zeitvariable, y : Vektor aus z und v
function dy_dt = Pendel_3_Fun( t, y )
global gVar; % global: Quadrat der Kreisfrequenz
global delta; % Reibungsterm
% dy_dt(1)
dy_dt(1,1)
% dy_dt(2)
dy_dt(2,1)
=
=
=
=
Ableitung von z = y(1) ist v = y(2):
y(2);
Ableitung von v = y(2): DGL
- gVar * sin( y(1) ) - delta * y(2);
Prof. Dr. A. Karbach und Prof. Dr. G. Manthei
Aufgabenblatt 14
Anwendungen in MATLAB
Lösung Aufgabe 2
%
% function SenkrFall( x0, v0, tm, d )
%
Senkrechter Fall mit Reibung
%
x0 : Anfangsort
%
v0 : Anfangsgeschwindigkeit
%
tm : Länge des Zeitintervalls in Sekunden
%
d : Reibungskoeffizient
%
%
Beispiel-Aufrufe:
%
SenkrFall( 0, 0, 3, 0 ) - ungebremster Fall
%
SenkrFall( 0, 10, 3, 0 ) - Wurf nach oben, ungebremst
%
SenkrFall( 0, 0, 3, 1 ) - Fall mit Reibung, v -> const
%
SenkrFall( 0,-10, 3, 1 ) - abgebremster Wurf nach unten
%
%
zugehörige DGL-Funktion: SenkrFall_Fun.m
%
function SenkrFall( x0, v0, tm, d )
% globale Variable für die DGL-Funktion
global delta;
delta = 2 * d;
% Anfangswerte
y0 = [ x0, v0 ];
% Zeit-Intervall
tspan = [0,tm];
% Lösung des Anfangswert-Problems
[t,y] = ode45( 'SenkrFall_Fun', tspan, y0 );
% daraus den Funktionswert - 1. Komponente
z = y( :, 1 );
v = y( :, 2 );
% alles plotten
plot( t, z, t, v );
xlabel( 't / s' );
ylabel( 'x/m | v/(m/s)' );
legend( 'Ort', 'Geschwindigkeit' );
grid on;
% DGL-Funktion für ode45:
%
für SenkrFall
% function dy_dt = SenkrFall_Fun( t, y )
%
t : Zeitvariable, y : Vektor aus z und v
function dy_dt = SenkrFall_Fun( t, y )
global delta; % global: Reibungsterm
g = 9.81;
% Erdbeschleunigung
% dy_dt(1)
dy_dt(1,1)
% dy_dt(2)
dy_dt(2,1)
=
=
=
=
Ableitung von z = y(1) ist v = y(2) :
y(2);
Ableitung von v = y(2): DGL
- g - delta * y(2);
Zugehörige Unterlagen
Herunterladen