08.01.2015 Aufrufe

Rechnergestützte Analyse technischer Systeme

Rechnergestützte Analyse technischer Systeme

Rechnergestützte Analyse technischer Systeme

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!