Rechnergestützte Analyse technischer Systeme
Rechnergestützte Analyse technischer Systeme
Rechnergestützte Analyse technischer Systeme
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Rechnergestützte <strong>Analyse</strong> <strong>technischer</strong> <strong>Systeme</strong><br />
Joachim Schneider ‡<br />
Juni 2004<br />
Zusammenfassung<br />
Dieser Vortrag soll anhand von Aufgaben aus der angewandten Mathematik<br />
und Mechanik einen Einblick in die Anwendung der numerischen<br />
Programmsysteme Matlab und Octave geben.<br />
Dafür wird die Software Octave (http://www.octave.org) eingesetzt.<br />
GNU Octave ist eine interaktive Hochsprache für numerische Berechnungen,<br />
die weitgehend kompatibel zu Matlab ist.<br />
1 Einführung<br />
Octave und Matlab sind Werkzeuge zur interaktiven oder skriptgesteuerten<br />
numerischen Berechnung und zur Visualisierung von Berechnungsergebnissen<br />
und Daten.<br />
Beide sind für die heute üblichen Betriebssysteme (verschiedene UNIX-<br />
Derivate und Microsoft-Windows) verfügbar.<br />
Matlab ist für Studenten sehr günstig zu erwerben, ansonsten sind die Lizenzen<br />
recht teuer. Octave steht unter der GNU General Public License<br />
und ist deshalb frei und im Quelltext erhältlich.<br />
Die Eingabesyntax der beiden <strong>Systeme</strong> ist weitgehend zueinander kompatibel,<br />
so daß die umfangreiche Literatur zu Matlab ( [1], [2], [3], [7]), [4] auf<br />
beide <strong>Systeme</strong> anwendbar ist. Octave ist in [5] dokumentiert.<br />
‡ Q2, 11-12<br />
68161 Mannheim<br />
email: joachim@hal.rhein-neckar.de<br />
1
2 VISUALISIERUNG 2<br />
2 Visualisierung<br />
Die einfache Visualisierung des Verlaufs von Funktionen kann in Ihrer Bedeutung<br />
kaum unterschätzt werden. Als Beispiel soll die Sinus-Funktion zusammen<br />
mit Ihren ersten Taylor-Polynomen “geplottet” werden.<br />
Die folgende einfache Eingabedatei wird erstellt, sie könnte aber ebenso am<br />
Matlab(Octave)-Prompt eingegeben werden:<br />
%%<br />
% Taylorpolynome des Sinus plotten<br />
%%<br />
% x-Werte definieren (Das ist ein Vektor!):<br />
x = (-pi: 0.01: pi);<br />
% Taylorpolynome des Sinus<br />
%<br />
% Octave(Matlab) rechnet "am liebsten" mit<br />
% Vektoren bzw. Matrizen.<br />
% ’.’ = Komponentenweise<br />
% Anwendung eines Operators<br />
%<br />
T1 = x;<br />
T3 = T1 - x.^3/6.0;<br />
T5 = T3 + x.^5/120.0;<br />
sinvec = sin(x);<br />
%%<br />
%plot(x, [sinvec; T1; T3; T5])<br />
%%<br />
hold on<br />
plot(x, sinvec)<br />
plot(x, T1)<br />
plot(x, T3)<br />
plot(x, T5)<br />
pause
2 VISUALISIERUNG 3<br />
%%<br />
% EOF<br />
%%<br />
Sie erzeugt dann die folgende Bildschirmdarstellung:<br />
Man kann die Ausgabe noch etwas verbessern, indem die Plot-Befehle verfeinert<br />
werden:<br />
%%<br />
% Taylorpolynome des Sinus plotten<br />
%%<br />
% x-Werte definieren (Das ist ein Vektor!):<br />
x = (-pi: 0.1: pi);<br />
% Taylorpolynome des Sinus<br />
%<br />
% Octave(Matlab) rechnet "am liebsten" mit
2 VISUALISIERUNG 4<br />
% Vektoren bzw. Matrizen.<br />
% ’.’ = Komponentenweise<br />
% Anwendung eines Operators<br />
%<br />
T1 = x;<br />
T3 = T1 - x.^3/6.0;<br />
T5 = T3 + x.^5/120.0;<br />
sinvec = sin(x);<br />
% x-y-Achsenabschnitte spezifizieren<br />
axis([-pi, pi, -1.8, 1.8]);<br />
% Augabefenster putzen<br />
clearplot;<br />
xlabel(’X-Achse’);<br />
ylabel(’Y-Achse’);<br />
title(’Taylorpolynome des Sinus’);<br />
grid on<br />
% Alles in einen Plot<br />
hold on<br />
plot(x, sinvec, "+r;sin;")<br />
plot(x, T1, "*g;T1;")<br />
plot(x, T3, "ob;T3;")<br />
plot(x, T5, "xm;T5;")<br />
hold off<br />
pause<br />
%%<br />
% EOF<br />
%%
2 VISUALISIERUNG 5<br />
Zugehörige Bildschirmdarstellung:<br />
Auffällig ist hier, daß die Plot-Befehle auf Vektoren (bzw. auf Matrizen arbeiten).<br />
Natürlich lassen sich auch Ausgaben in Grafikformate erzeugen, bei Octave<br />
erzeugen die Befehle<br />
%%<br />
% Taylorpolynome des Sinus plotten<br />
%%<br />
% x-Werte definieren (Das ist ein Vektor!):<br />
x = (-pi: 0.1: pi);<br />
% Taylorpolynome des Sinus<br />
%<br />
% Octave(Matlab) rechnet "am liebsten" mit<br />
% Vektoren bzw. Matrizen.<br />
% ’.’ = Komponentenweise<br />
% Anwendung eines Operators
2 VISUALISIERUNG 6<br />
%<br />
T1 = x;<br />
T3 = T1 - x.^3/6.0;<br />
T5 = T3 + x.^5/120.0;<br />
sinvec = sin(x);<br />
%<br />
% Keine Bildschirmausgabe, dafuer JPEG-file<br />
% erzeugen: Octave-spezifisch!<br />
%<br />
%gset term jpeg large;<br />
gset term jpeg giant;<br />
gset output ’num-oct-04.jpeg’;<br />
% x-y-Achsenabschnitte spezifizieren<br />
axis([-pi, pi, -1.8, 1.8]);<br />
xlabel(’X-Achse’);<br />
ylabel(’Y-Achse’);<br />
title(’Taylorpolynome des Sinus’);<br />
grid on<br />
%<br />
% Gnuplot-Ausgabe-Befehle --- Octave-spezi-<br />
% fisch. Gnuplot plottet bei 2D-Plots<br />
% defaultmaessig die ersten beiden Spalten<br />
% einer uebergebenen Matrix (daraus wird<br />
% intern ein Datenfile gemacht). Deshalb<br />
% muessen die Zeilenvektoren noch<br />
% transponiert werden.<br />
%<br />
d_sin = [x’, sinvec’];<br />
d_T1 = [x’, T1’];<br />
d_T3 = [x’, T3’];<br />
d_T5 = [x’, T5’];<br />
% Matlab/Octave-Fortsetzungszeilen: ...<br />
gplot d_sin t "sin" with lines, ...<br />
d_T1 t "T1" with points, ...<br />
d_T3 t "T3" with linespoints, ...
2 VISUALISIERUNG 7<br />
d_T5 t "T5" with dots;<br />
%%<br />
% EOF<br />
%%<br />
das JPEG-File num-oct-04.jpeg, das hier eingebunden ist:<br />
Dreidimensionale Grafiken sind auch möglich. Die Befehlsfolge<br />
%<br />
% Plotten einer 3-D-Funktion<br />
%<br />
%<br />
% Gitter erzeugen:<br />
%<br />
x = (-3:0.1:3);
2 VISUALISIERUNG 8<br />
y = (-3:0.1:3);<br />
[X, Y] = meshgrid(x, y);<br />
% Paare (x_ij, y_ij) aus (X, Y) enthalten<br />
% jetzt die Gitterkoordinaten<br />
% X = ( x, x, x, ..., x )’<br />
% Y = ( y, y, y, ..., y )<br />
%<br />
% Funktion definieren<br />
%<br />
alpha = 0.5;<br />
r2 = X.^2 + Y.^2;<br />
f = sin(alpha*r2) .* r2 .* exp(-sqrt(r2));<br />
%<br />
% Funktion plotten<br />
%<br />
title("sin(0.5*(x^2+y^2))*(x^2+y^2)*exp(-sqrt(x^2+y^2))");<br />
%gset term jpeg large;<br />
gset term jpeg giant;<br />
gset output ’plot-3d-00.jpeg’;<br />
grid on<br />
mesh(x, y, f);<br />
%<br />
% EOF<br />
%
3 TASCHENRECHNER MIT VEKTORARITHMETIK 9<br />
erzeugt folgende Ausgabe:<br />
3 Taschenrechner mit Vektorarithmetik<br />
Zunächst sei erwähnt, daß sich Octave wie ein üblicher wissenschaftlicher<br />
Taschenrechner einsetzen läßt. Die Eingabeaufforderung von Octave bzw.<br />
von Matlab ist >>.<br />
>><br />
>> b = 0.7<br />
b = 0.70000<br />
>> alpha = pi/3<br />
alpha = 1.0472<br />
>> y = b * sin(alpha)<br />
y = 0.60622<br />
>><br />
>> % Komplexe Zahlen gehen auch:<br />
>>
3 TASCHENRECHNER MIT VEKTORARITHMETIK 10<br />
>> exp(2*pi*i)<br />
ans = 1.0000e+00 - 2.4492e-16i<br />
>><br />
>> (100-10)*(100+10)<br />
ans = 9900<br />
>><br />
>><br />
>><br />
>> % Vektor definieren<br />
>><br />
>> v = [ 1.0, 1.5, 2.0 ];<br />
>><br />
>> sin(v)<br />
ans =<br />
0.84147 0.99749 0.90930<br />
>> % Wird komponentenweise ausgewertet!<br />
>><br />
>><br />
Octave verügt über leistungsfähige eingebaute Vektor- und Matrixoperationen.<br />
Damit ist es einfach, lineare Gleichungssysteme zu lösen, wie sie zum<br />
Beispiel in der Statik bei der Berechnung des Gleichgewichts eines Systems<br />
starrer Körper auftreten. Ein Standardproblem ist dabei die Berechnung der<br />
Auflagerkräfte (Zwangskräfte) und -Momente bei gegebenen Lasten (eingeprägte<br />
Kräfte und Momente). Nachdem die Körper “freigeschnitten” wurden,<br />
also das System in Einzelkörper zerlegt wurde, und an den Schnittstellen die<br />
inneren Kräfte und Momente mit den zugehörigen Gegenkräften eingetragen<br />
wurden, müssen jetzt für jeden Körper die Gleichgewichtsbedingungen<br />
∑<br />
⃗F i = 0,<br />
i<br />
∑ −−→<br />
P A i × F ⃗ i = 0<br />
i<br />
erfüllt sein (“Summe der Kräfte gleich 0 und Summe der Momente gleich<br />
0”); die Kraft ⃗ F i hat dabei den Angriffspunkt A i .<br />
Offensichtlich bilden diese Gleichungen ein inhomogenes lineares Gleichungssystem<br />
zur Berechnung der Auflagerkräfte, da ja darin die Lasten gegeben<br />
sind.<br />
(1)
3 TASCHENRECHNER MIT VEKTORARITHMETIK 11<br />
Betrachtet man etwa den dargestellten ebenen Dreigelenkbogen<br />
G<br />
o...............................<br />
/.\ /|\<br />
/ \ |<br />
/ . \ |<br />
/ \ |<br />
|F / . \ |<br />
| / \ |<br />
| / . \ |<br />
| / \ |<br />
\|// . \ |<br />
/ \ |<br />
/ . \ F | 2a<br />
/ \
3 TASCHENRECHNER MIT VEKTORARITHMETIK 12<br />
|G_V<br />
|<br />
\|/ G_H<br />
oo<br />
| / /|\<br />
| / | \<br />
I \|// | \<br />
/ | \<br />
/ G_V| \<br />
/ \<br />
/ \<br />
/ \<br />
/ \ II<br />
/ \<br />
/ \ F<br />
/ \ o \<br />
/|\ \<br />
| \<br />
| \<br />
| y /|\ \ B_H<br />
A_V| | \<br />
| o x |<br />
|B_V<br />
(nach [9] Kapitel 2.4), so kann man für die Körper I und II die Gleichgewichtsbedingungen<br />
formulieren:
3 TASCHENRECHNER MIT VEKTORARITHMETIK 13<br />
1. Körper I x-Komponenten der Kräfte:<br />
A H − G H = 0 (2)<br />
2. Körper I y-Komponenten der Kräfte:<br />
A V − F − G V = 0 (3)<br />
3. Körper I Moment um A:<br />
−aF − 2aG V + 2aG H = 0 (4)<br />
4. Körper II x-Komponenten der Kräfte:<br />
G H − F − B H = 0 (5)<br />
5. Körper II y-Komponenten der Kräfte:<br />
B V + G V = 0 (6)<br />
6. Körper II Moment um B :<br />
aF − 2aG H − 2aG V = 0 (7)<br />
Daraus folgt nach Division durch a und F das Gleichungssystem (unbekannt:<br />
A H , A V , B H , B V , G H , G V ; bekannt: F )<br />
⎛<br />
⎜<br />
⎝<br />
1 0 0 0 −1 0<br />
0 1 0 0 0 −1<br />
0 0 0 0 2 2<br />
0 0 −1 0 1 0<br />
0 0 0 1 0 1<br />
0 0 0 0 −2 −2<br />
⎞ ⎛<br />
⎟ ⎜<br />
⎠ ⎝<br />
A H /F<br />
A V /F<br />
B H /F<br />
B V /F<br />
G H /F<br />
G V /F<br />
⎞<br />
⎛<br />
=<br />
⎟ ⎜<br />
⎠ ⎝<br />
0<br />
1<br />
1<br />
1<br />
0<br />
−1<br />
⎞<br />
, (8)<br />
⎟<br />
⎠<br />
von der Form Ax = b, das man so direkt in Matlab eintippen kann:<br />
>><br />
>> A = [ 1, 0, 0, 0, -1, 0; ...
3 TASCHENRECHNER MIT VEKTORARITHMETIK 14<br />
A =<br />
0, 1. 0, 0, 0, -1; ...<br />
0, 0, 0, 0, 2, -2; ...<br />
0, 0, -1, 0, 1, 0; ...<br />
0, 0, 0, 1, 0, 1; ...<br />
0, 0, 0, 0, -2. -2 ]<br />
1 0 0 0 -1 0<br />
0 1 0 0 0 -1<br />
0 0 0 0 2 -2<br />
0 0 -1 0 1 0<br />
0 0 0 1 0 1<br />
0 0 0 0 -2 -2<br />
>><br />
>> det(A)<br />
ans = 8<br />
>><br />
>><br />
>> b = [0, 1, 1, 1, 0, -1]’<br />
b =<br />
0<br />
1<br />
1<br />
1<br />
0<br />
-1<br />
>><br />
>><br />
>> x = A\b<br />
x =<br />
0.50000<br />
1.00000<br />
-0.50000<br />
0.00000<br />
0.50000<br />
0.00000
4 OCTAVE/MATLAB ALS PROGRAMMIERSPRACHE 15<br />
>><br />
>><br />
>><br />
Wir haben uns noch durch Berechnen der Determinate der Systemmatrix<br />
davon überzeugt, daß die Gleichung eindeutig lösbar ist. Man erhält so<br />
⎛<br />
⎜<br />
⎝<br />
A H /F<br />
A V /F<br />
B H /F<br />
B V /F<br />
G H /F<br />
G V /F<br />
⎞<br />
⎛<br />
=<br />
⎟ ⎜<br />
⎠ ⎝<br />
0.5<br />
1.0<br />
−0.5<br />
0.0<br />
0.5<br />
0.0<br />
⎞<br />
. (9)<br />
⎟<br />
⎠<br />
4 Octave/Matlab als Programmiersprache<br />
Neben der interaktiven Nutzung können Octave und Matlab als Laufzeitumgebung<br />
für Matlab-Programme verwendet werden.<br />
Matlab ist eine prozedurale Programmiersprache. Sie hat Kontrollstrukturen<br />
und Operatoren wie die Programmiersprache C Die Art der Indizierung<br />
von Feldern lehnt sich an die Programmiersprache Fortran an<br />
Eine wesentliche Erweiterung gegenüber diesen Sprachen ist die in die Sprache<br />
integrierte Vektor- und Matrixarithmetik. Die aritmetischen Operationen<br />
+, -, . . . sind also direkt auf diese Objekte anwendbar. Man wird — im Gegensatz<br />
zu C und Fortran nur selten auf einzelne Vektor- oder Matrixkomponenten<br />
zugreifen. Vektoren und Matrizen können an Funktionen übergeben<br />
und von diesen zurückgeliefert werden.<br />
Für die “höheren” Matrixoperationen, wie zum Beispiel die Inversion<br />
(Ax = b, x = A\b) verwenden Matlab und Octave intern Lapack.<br />
Lapack (Linear Algebra Package) ist ein frei verfügbares (public domain)<br />
Softwarepacket von Fortran 77 Unterprogrammen mit deren Hilfe man viele<br />
Standard-Probleme der Linearen Algebra numerisch lösen kann. Dadurch<br />
werden diese Operationen sehr performant ausgeführt.<br />
Zur Ein- und Ausgabe stehen Funktionen zur Verfügung, die denen der C-<br />
StandardIO-Bibliothek nachempfunden sind.<br />
Als Beispiel soll hier ein Programm vorgeführt werden, das die Aufgabe löst,<br />
Flächenträgheitsmomente “beliebig vorgegebener” ebener Figuren zu berechnen.<br />
Genauer soll in einer Datei durch eine Folge von (x, y)-Paaren ein Polygonzug<br />
als Randkurve der Figur spezifiziert werden. Das Programm soll
4 OCTAVE/MATLAB ALS PROGRAMMIERSPRACHE 16<br />
dann den Schwerpunkt und die Flächenträgheitsmomente um den Schwerpunkt<br />
berechnen, die Figur und die berechneten Werte plotten.<br />
Das Programm ist in der Datei traegmom.m angehängt.<br />
Hier die Rechenbeispiele:<br />
% Rechteck, (x,y)-Koordinaten<br />
0.0 0.0<br />
2.0 0.0<br />
2.0 1.0<br />
0.0 1.0<br />
% EOF<br />
% Dreieck, (x,y)-Koordinaten<br />
0.0 0.0<br />
4.0 0.0<br />
3.0 2.0<br />
% EOF
4 OCTAVE/MATLAB ALS PROGRAMMIERSPRACHE 17<br />
% T-Traeger, (x,y)-Koordinaten<br />
-2.5 -2.5<br />
2.5 -2.5<br />
2.5 -1.5<br />
0.5 -1.5<br />
0.5 1.5<br />
2.5 1.5<br />
2.5 2.5<br />
-2.5 2.5<br />
-2.5 1.5<br />
-0.5 1.5<br />
-0.5 -1.5<br />
-2.5 -1.5<br />
% EOF
5 AUSBLICK 18<br />
5 Ausblick<br />
So wie man im Bereich der linearen Algebra Matlab und Octave als eine<br />
sehr angenehme Schnittstelle zu den Lapack-Fortran-Routinen ansehen<br />
kann, so gibt es auch für andere Aufgaben der numerischen Mathematik<br />
wie zum Beispiel die Integration oder das Lösen von Differentialgleichungen<br />
Fortran-Unterprogramme, die von der Octave/Matlab-Laufzeitumgebung<br />
aus aufgerufen werden können.
5 AUSBLICK 19<br />
Außerdem ist es möglich diese Sammlung von kompilierten Unterprogrammen<br />
selbst zu erweitern. Dadurch kann man von den Vorteilen einer interpretierten<br />
Sprache profitieren und trotzdem an den wichtigen Stellen schnell<br />
sein.
LITERATUR 20<br />
Literatur<br />
[1] Beucher, O.: MATLAB und Simulink — Grundlegende Einführung.<br />
München: Addison-Wesley/Pearson Studium, 2002.<br />
[2] Nowottny, D.: Mathematik am Computer. Berlin, Heidelberg, New<br />
York: Springer-Verlag, 1999.<br />
[3] Gramlich, G. u. Werner, W.: Numerische Mathematik mit Matlab. Heidelberg:<br />
dpunkt.verlag, 2000.<br />
[4] Überhuber, C. u. Katzenbeisser, S.: MATLAB 6 — eine Einführung.<br />
Wien, New York: Springer, 2000.<br />
[5] Eaton, J. W.: GNU Octave Manual. Network Theory Limited, 2000.<br />
[6] Heuser, H.: Lehrbuch der Analysis — Teil 1. Stuttgart,Leipzig: B.G.<br />
Teubner, 1998.<br />
[7] Chapra, S.C. u. Canale R.P.: Numerical Methods for Engineers. Boston,<br />
. . . : Mc Graw-Hill, 2002.<br />
[8] Collatz, L.: Differentialgleichungen. Stuttgart: B. G. Teubner, 1990.<br />
[9] Hagedorn, P.: Technische Mechanik — Band 1: Statik. Frankfurt am<br />
Main: Verlag Harri Deutsch, 1989.<br />
[10] Hagedorn, P.: Technische Mechanik — Band 2: Festigkeitslehre. Frankfurt<br />
am Main: Verlag Harri Deutsch, 1990.