Methoden der Topologieoptimierung im Fachwerk

Werbung
Methoden der Topologieoptimierung im
Fachwerk
Studienarbeit
von
Somchai Somsakul
Prüfer: Prof. Dr. sc. math. habil. Joachim Gwinner
Betreuer: Dipl.-Math. Daniel Mohr
Instituts für Mathematik und Rechneranwendung
Fakultät für Luft- und Raumfahrttechnik
Universität der Bundeswehr München
2
Erklärung
Hiermit versichere ich, daß ich diese Arbeit selbständig und nur mit den angegebenen Hilfstmitteln
angefertigt habe.
Neubiberg, 18. Mai 2010
Somchai Somsakul
3
4
Inhaltsverzeichnis
Inhaltsverzeichnis
6
1 Einleitung
7
2 Fachwerk
9
2.1
Definitionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1.1
Elastizitätsmodul E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.2
Exakte Grundstrukturen und Fachwerke . . . . . . . . . . . . . . . . . . . . . 19
3 Fachwerksoptimierung: Sizing, Geometry, Topology
3.1
3.2
Topologieoptimierung beim Fachwerk als Volumensminimierung . . . . . . . . . . . . 28
3.1.1
Elastizitätstheorie für ebene Stabwerke . . . . . . . . . . . . . . . . . . . . . . 28
3.1.2
Optimierungsmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Topologieoptimierung beim Fachwerk mit Steifigkeitsmatrix . . . . . . . . . . . . . . 35
4 Optimierung mit Matlab
4.1
4.1.1
Definition des Bauraum (Zeile 5 bis 6) . . . . . . . . . . . . . . . . . . . . . . 40
4.1.2
Definition des Gitters (Zeile 7 bis 15)
4.1.3
Angreifende Kräfte an der Konstruktion(Zeile 20 bis 22) . . . . . . . . . . . . 43
4.1.4
Festlegung von Lagern im Bauraum (Zeile 27 bis 32) . . . . . . . . . . . . . . 43
Vergleich der Vernetzung
45
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.1.1
jeder Knoten mit jedem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.1.2
Geometriematrix, nur Nachbarknoten . . . . . . . . . . . . . . . . . . . . . . 47
5.1.3
Geometriematrix, nur Nachbarknoten kreuzungsfrei . . . . . . . . . . . . . . 48
5.1.4
Vergleich der Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Vergleich von Stop und Sizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.2.1
Vergleich der Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Literaturverzeichnis
Abbildungsverzeichnis
Tabellenverzeichnis
Anhang
. . . . . . . . . . . . . . . . . . . . . . 40
Ausgabe der Lösung ( Zeile 37 bis 41) . . . . . . . . . . . . . . . . . 44
5 Vergleich der Methoden
5.2
39
Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.1.4.1
5.1
23
I
III
V
VII
5
6
Inhaltsverzeichnis
sizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VII
stop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XIII
stäbeknotenaufgitter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XVIII
bilderzeugen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXIII
1 Einleitung
Die Erforschung mechanischer Grundprinzipien ist so alt wie die physikalische Wissenschaft überhaupt. Anfang des 16. Jahrhunderts war Kopernikus wohl einer der ersten, der moderne analytische
Denkweise einsetzte, um die Planetenbewegung zu erklären. Im Jahr 1679 postulierte Hooke das
nach ihm benannte Federgesetz, und legte damit den Grundstein für die Elastizitätstheorie. Über
die Infinitesimalrechnung nach Leibniz und die bahnberechnenden Ergebnisse von Newton begannen drei Jahrhunderte der Entdeckungen, die die Physik zu einer der wesentlichen Wissenschaften
der Menschheit gemacht haben. Die Mathematik spielte dabei stets zwei unterschiedliche Rollen:
Auf der einen Seite dient sie zur Verifikation und Modellbildung, auf der anderen Seite jedoch auch
immer wieder als Impulsgeber für neue physikalische Ansätze. Das Weltbild von Leibniz (1646-116)
Die Welt ist die beste aller möglichen
wird in der Theorie von Darwin (1809-1882) noch verstärkt: Die Evolution dient als ewiger Anpassungs- und Optimierungsprozeß. In diesem Zusammenhang kann man für das Streben des Wissenschaftlers nach besserem Verständnis der Natur über das rein wissenschaftliche Interesse hinaus
eine weitere Motivation angeben: Durch bessere Einsicht in die Funktionsweise der naturgegebenen Möglichkeiten kann der Mensch die seit Millionen von Jahren währende Evolution nutzen, um
selbst besser von der Natur zu profitieren. Dies führte im Laufe der Geschichte immer wieder zu
der Fragestellung nach gut funktionierenden Konstruktionen für mancherlei Anwendungen, indem
man die Natur betrachtete. Ein klassisches Beispiel dafür ist der Beginn der Fliegerei, als man sich
Federn an die Arme band. Natürlich mußten erst Wege gefunden werden, eine Struktur genügend
genau zu beschreiben. Dies geschah stets im Rahmen von Physik und Mathematik, die damals noch
nicht getrennt werden konnten.
Betrachten wir die Konstruktion von Teilen, die einer gegebenen Belastung standhalten sollen: Erst
Ende des letzten Jahrhunderts gelang es eine analytische Theorie zu formulieren, die das elastoplastische Verhalten von Körpern mit Hilfe von Energie- und Spannungszuständen beschreibt. Daran anschließend konnte man sich die Frage nach guten Strukturen stellen. Was dabei als Gütekriterium anzusehen ist, bleibt bis heute umstritten.
Die ersten theoretischen Arbeiten zu diesem Thema betrachten das minimale Gewicht. Die entwickelten Modelle waren jedoch zu kompliziert, als daß man eine effektive Optimierung damals
hätte durchführen können. Erst die Entwicklung numerischer Verfahren gestattete es, einfache Optimierungsprobleme zu lösen. Dies gelang ab den fünfziger Jahren mit dem Beginn der mathematischen Optimierung. Die parallel einsetzende Entwicklung von elektronischen Rechnern gestattete
die Anwendung immer aufwendigerer Algorithmen auf immer komplexere Probleme. Dabei wurde
das eigentliche Ziel, die automatische Generierung einer sehr guten Struktur, nie aus den Augen
verloren. Eine eigene Wissenschaftsrichtung, die sich genau mit dieser Frage beschäftigt, hat sich
gegründet, die Strukturoptimierung. Sie ist in dem Dreieck bestehend aus Ingenieurwesen, Physik
und angewandter Mathematik angesiedelt.
7
8
Kapitel 1. Einleitung
Die letzten 40 Jahren haben aus den erwähnten Gründen (Weiterentwicklung der klassischen physikalischen Theorie, Entwicklung von nummerischen Optimierungsmethoden und von Digitalrechnern) zu einem Boom in der Strukturoptimierung geführt. Die Entwicklung sehr komplexer Bauteile
und Konstruktionen ist dabei nicht mehr nur auf Erfahrungswerte angewiesen, sondern kann neue
wissenschaftliche Erkenntnisse ebenso einbeziehen wie die Verbesserung älterer auf Erfahrung basierender Prinzipien.
Das wachsende Interesse gerade in den letzten 10 Jahren ist sicher nicht nur auf neue Berechnungsmöglichkeiten durch größere Rechenanlagen zurückzuführen, sondern auch auf die phänomenalen
Ergebnisse, die der Entwicklung - z.B. im Flugzeugbau - zugute kamen. So können heute Strukturen
signifikant verbessert werden, die noch vor 10 Jahren praktisch als optimal angesehen wurden. Nicht
zuletzt unter diesem Aspekt wird der Strukturoptimierung eine wachsende Bedeutung zugemessen.
Dabei ist man sich jedoch im klaren, daß es nicht genügt, lediglich neue und bessere Berechnungsmethoden für bekannte Probleme zu entwickeln. Es müssen vielmehr auch neue theoretische Modelle
aufgestellt und auf ihre Brauchbarkeit hin untersucht werden. Dies macht die Strukturoptimierung
zu einer multidisziplinären Wissenschaft, die trotz ihres klassischen Ursprungs stets nach vielen
Richtungen hin offen ist.
In dieser Arbeit soll untersucht werden, wie man die Konstruktion durch unterschiedliche Optimierungsmethoden finden kann. Dabei sollen die Ergebnisse miteinander vergleicht werden.
2 Fachwerk
Es wird zunächst der hier verwendete Fachwerksbegriff sowie das Optimierungsproblem der Gewichtsminimierung ebener Fachwerke definiert. Nach der Darstellung des zugrundeliegenden physikalischen Modells des elastischen Verhaltens eines Stabes wird das Analyseverfahren zur Tragfähigkeitsuntersuchung angegeben.
Die Definitionen und Formalisierungen dieses Kapitels sind im Sinne des Optimierungsproblems minimales Gewicht zu verstehen und erheben keinen Anspruch auf Anwendbarkeit in einem anderen
Kontext. Geltende, physikalische Zusammenhänge sind teilweise vereinfacht, mögliche Problemstellungen sind eingeschränkt. Im einzelnen berührt dies folgende Punkte:
• Es wird nur der ebene Fall betrachtet, d. h. alle Knoten und Stäbe des Fachwerks sowie alle
Kraft- und Verschiebungsvektoren liegen in einer Ebene. Der betreffende Ausschnitt der Ebene
wird als Konstruktionsraum R bezeichnet (R ⊆ R2 ). Eine Verallgemeinerung der Definitionen
dieses Kapitels auf den räumlichen Fall (R ⊆ R3 ) ist problemlos möglich.
• Alle Kraft- und Verschiebungsvektoren sind parallel zu einer der Achsen eines für R vorgegebenen x-y-Koordinatensystems. Kraft- und Verschiebungsanteile für unterschiedliche Koordinatenrichtungen eines Knotens sind – abgesehen vom elastischen Verhalten des Fachwerks –
nicht korreliert. Dies schließt z. B. schräg liegende Freilager aus.
• Ein Stab befindet sich in seiner gesamten Länge innerhalb von R, wenn sich seine beiden
Endpunkte in R befinden.
• Alle Stäbe sind aus demselben Material hergestellt und haben einheitliche, physikalische
Eigenschaften, insbesondere denselben Elastizitätsmodul E.
• Es werden ideale Stäbe mit linearem, elastischem Verhalten angenommen, d. h. die Verlängerung u eines Stabes ist proportional (u ∼ f mit Proportionalitätskonstante k) zur in
Stablängsrichtung wirkenden Kraft f (Hookesches Materialgesetz): ku = f
• Vorspannungen von Stäben, thermische Einflüsse u. ä. bleiben bei der Belastungsanalyse
unberücksichtigt.
• Anstelle einer Unterscheidung verschiedener Versagensformen von Stäben wie Stabilitäts- und
Festigkeitsversagen wird Versagen hier als Überschreitung der Stabspannung σ einer maximalen Stabspannung σmax definiert, der Wert σ wird zwischen σmin ≤ σ ≤ σmax angenommen.
Mit σmin = −σmax wird der maximale Druck auf den selben Zahlenwert wie der maximale
Zug gesetzt.
• Bei der Überprüfung der Tragfähigkeit wird das Eigengewicht des Fachwerks vernachlässigt.
Dieses Vorgehen verfälscht das Ergebnis der Tragfähigkeitsuntersuchung nur wenig, wenn die
9
10
Kapitel 2. Fachwerk
Abbildung 2.1: Beispiel eines Fachwerks
durch die Belastungen hervorgerufenen Kräfte deutlich größer sind als die durch die Belastungen hervorgerufenen Kräfte deutlich größer sind als die durch die Eigenmasse des Fachwerks
auftretenden Gewichtskräfte.
2.1 Definitionen
Brückenträger, Dachbinder, Kräne, Gerüste u. a. m. sind in der Regel technische Anwendungen
von Tragwerken, die aus einer endlichen Zahl von Stäben zusammengesetzt sind (vgl. Abb. 2.1).
Dabei sind die Stäbe nur an ihren Enden miteinander verbunden. Diese Verbindungsstellen nennt
man Knoten. Nimmt man nun idealisierend an, daß
1. die Knoten reibungsfreie Gelenke sind, so daß keine Momente von einem Stab auf die anschließend Stäbe übertragen werden und
2. die äußeren Kräfte (Belastungen und Bedingungen) nur in den Knoten angreifen.
dann ist das Tragwerkssystem ein Fachwerk. Liegen sämtliche Stäbe dabei in einer Ebene, die auch
Lastebene ist, so ist das Tragwerk ein ebenes Fachwerk.
Diese vorläufige Definition wird im weiteren für die Zwecke der rechnergestützten Optimierung
noch formaler gefasst.
Die Aufgabe, ein Fachwerk minimalen oder möglichst minimalen Gewichtes zu finden, läßt sich
zunächst wie folgt formulieren:
Finde für ein gegebenes Material und gegebene Belastungen ein Fachwerk, so daß keiner der
Stäbe des Fachwerks unter einer der Belastungen versagt. Das Fachwerk soll ein möglichst kleines
Kapitel 2. Fachwerk
11
Gewicht haben.
Das Optimierungsziel möglichst kleines Gewicht ist dem Ziel einer möglichst hohen Tragfähigkeit
eines Tragwerks gegensätzlich, weil sich das Tragwerksgewicht nicht beliebig reduzieren läßt, ohne
an Tragfähigkeit zu verlieren. Betrachtet man z. B. den Extremfall eines Fachwerks ganz ohne Stäbe, so hat dieses sicherlich das kleinstmögliche Gewicht, aber überhaupt keine Tragfähigkeit. Dies
bedeutet allerdings nicht, daß ein schweres Tragwerk grundsätzlich tragfähiger ist als ein leichtes.
Das Material, aus dem die Stäbe eines Fachwerks aufgebaut sind, wird durch seine physikalischen,
für die Optimierungsaufgabe bedeutsamen Eigenschaften beschrieben. Die im Rahmen der Gewichtsberechnung und Tragfähigkeitsuntersuchung relevanten Größen sind:
Spezifische Dichte ρ. Der Quotient aus Masse m und Volumen V eines Körpers.
• Ein Stab des Volumens V besitzt die Masse m = ρV . Bei einer im Konstruktionsraum R
gültigen Massenbeschleunigung g ergibt sich daraus das Stabgewicht G = gm = gρV .
Da hier g an jeder Stelle des Konstruktionsraums und für alle Belastungsfälle als gleich angenommen wird, ist G proportional zu m (G ∼ m). Unter dieser Voraussetzung ist minimales
Gewicht gleichbedeutend mit minimaler Masse b.z.w. minimales Volumen und der Wert von
g spielt für die Optimierung keine Rolle.
2.1.1 Elastizitätsmodul E
Das Elastizitätsmodul E beschreibt den mechanischen Zusammenhang zwischen Dehnung und
Spannung σ eines Fachwerksstabes.
Wir betrachten einen einzelnen Stab mit der Querschnittsfläche a und wollen Fakten auflisten, wie
sich dieser Stab unter Belastung verhält.
Wie allgemein üblich setzen wir für das Material, aus dem der Stab besteht, voraus, daß es homogen
und isotrop ist, d.h. die Materialeigenschaften sind in jedem Punkt gleich (homogen), und die
elastischen Eigenschaften sind in jedem Punkt unabhängig von der Richtung einer angelegten Kraft
(isotrop). Wirkt auf den Stab eine äußere Kraft, die nach Voraussetzung nur an den Enden angreift,
dann entsteht (actio = reactio) eine (gedachte) innere Kraft f , die durch die Verformung des Stabes
hervorgerufen wird. Die Beanspruchung des Materials drückt sich dann durch den Quotienten von
der Kraft f und Stabquerschnitt a aus,
σ=
f
a
der angibt, wieviel Kraft pro Flächeneinheit wirkt. Dieser Quotient wird Spannung genannt und
besitzt üblicherweise die Einheit N/mm2 . Die Richtung der Kraft drückt sich dabei in der Spannung
aus: Positive Spannungen sind als Zug, negative als Druck zu interpretieren. Viel interessanter als die
Materialbeanspruchung selbst ist der Zusammenhang zwischen der Spannung σ und der Verformung
des Stabes. Da sich eine solche Verformung lediglich in Längsachse des Stabes äußert (Kräfte
wirken nach Voraussetzung lediglich in Längsrichtung!), kann sie einfach als Längenänderung ∆l
der ursprünglichen Länge l des Stabes gemessen werden. Man arbeitet mit dem Begriff der Dehnung
12
Kapitel 2. Fachwerk
welche die relative Längenänderung des Stabes beschreibt,
=
∆l
l
Die Dehnung ist ein dimensionsloser Faktor. Der Zusammenhang zwischen Dehnung und Spannung wurde von dem englischen Physiker Robert Hooke (1635-1703) untersucht, der für nicht zu
große Spannungen einen linearen Zusammenhang feststellte. Das bekannte und nach ihm benannte
Hookesche Gesetz lautet
σ = E
für
σp− ≤ σ ≤ σp+
(2.1)
dabei bezeichnen σp± Grenzen für die maximale Zug-bzw. Druckspannung, für die das lineare Verhalten gilt(s.u.). Die Konstante E ist dabei materialabhängig und hat wie die Spannung die Einheit
N/mm2 . Sie ist nur experimentell zu ermitteln, und wird Elastizitätsmodul oder Youngscher Modulus genannt. Für Stahl ergibt sich beispielsweise
N
EStahl = 21000 mm
2
Typische Elastizität Zahlenwerte
Hinweise zur Einheitenumrechnung:
N
• 1 mm
2 = 1M P a (Ein Newton pro Quadratmillimeter ist ein Mega-Pascal)
kN
• 1 mm
2 = 1GP a (Ein Kilo-Newton pro Quadratmillimeter ist ein Giga-Pascal)
Material
E-modul in kN/mm2
Metallische Werkstoffe bei 20◦ C
Ferritischer Stahl
210
Austenitischer Stahl 195
Sphäroguss
170. . . 185
Grauguss
80. . . 185
Messing
78. . . 123
Kupfer
100. . . 130
Titan
105
Aluminium
70
Magnesium
42
Blei
16
Invar
130. . . 150
Nickel
200
Wolfram
411
Material
E-Modul in kN/mm2
Werkstoffe (nicht isotrop) bei 20◦ C
CFK parallel zur Faser 150
Glas
50. . . 90
Glasfaser
55. . . 87
Beton
22. . . 45
Knochen
18. . . 21
Holz parallel zur Faser 7. . . 20
CFK quer zur Faser
13
Epoxyd
≈ 25
Polyamid
2. . . 4
Polyester
1. . . 5
Polypropylen
1. . . 2
Holz quer zu Faser
0,23. . . 1,33
Silikonkautschuk
0,01. . . 0,1
Tabelle 2.1: Materialeigenschaft
Der im Hookeschen Gesetz beschriebene lineare Zusammenhang gilt nur für Spannung, die betragsmäßig klein genug sind. Dabei können die Grenzen σp− und σp+ für Druck- und Zugspannungen
verschieden sein. Diese Grenzen heißen Proportionalitätsgrenzen.
Im folgenden betrachten wir zunächst den Fall der Formveränderung unter Zug.
Kapitel 2. Fachwerk
13
Für die Praxis ist interessant, bis zu welcher angelegten Spannung ein Stab wieder seine Ausgangslänge annimmt, wenn man die angelegte Kraft entfernt. (Man stelle sich die fatale Situation vor,
daß ein einmal belastetes Teil einer Maschine bleibend verformt wird.) Dieser Bereich der Spannungen wird elastischer Bereich genannt. Experimentell ermittelt man die maximale Spannung σE im
elastischen Bereich, die Elastizitätsgrenze oder Fließgrenze genannt wird, und für die stets σE ≥ σP
gilt.
Schließlich kann man die Spannung weiter Erhöhen, so daß man die sog. Streckgrenze σS erreicht.
In ihr ist die angelegte äußere Kraft so groß, daß die inneren Bindekräfte zwischen den einzelnen
Molekülen nicht mehr in der Lage sind mit einer haltbaren Verformung zu reagieren. Das Material
beginnt zu fließen; bei weiterer Erhöhung der Dehnung geschehen unterschiedliche materialabhängige Phänomene, die nicht mehr linear beschrieben werden können. Der Stab ist zudem dauerhaft
verformt, wenn man die angelegte Kraft entfernt. Dieser Bereich wird daher plastischer Bereich
genannt.
Der theoretische Zusammenhang zwischen σ und eines sog. idealisierten elasto-plastischen Materials ist in Figur. 2.2 , einem sog. Spannungs-Dehnungs-Diagramm dargestellt. Außer den oben
schon genannten Größen ist
Abbildung 2.2: Spannungs-Dehnungs-Diagramm für idealisiertes Material
σzu eingezeichnet, die zulässige Spannung, die die Ingenieure für eine sog. ruhende Belastung mit
der Faustregel
σzu = 0.6σS
berechnen. Sie gibt an, mit welcher Spannung ein Stab in einem Fachwerk aus Sicherheitsgründen
maximal belastet werden darf.
Das Diagramm ist dahingehend idealisiert, als daß eine Dehnungsvergrößerung über den kritischen
Punkt hinaus keine Änderung der Spannung mehr zur Folge hat.
14
Kapitel 2. Fachwerk
Abbildung 2.3: Spannungs-Dehunngs-Diagramm für weichen Stahl
In der Realität sieht ein Spannungs-Dehnungs-Diagramm, etwa für weichen Stahl, aus, wie Abb. 2.3
zeigt. Die Spannung steigt an bis zur Zugfestigkeit σz , sinkt jedoch bei weiterer Längenänderung
völlig zusammen; das Material bricht bei einer Bruchdehnung B .
Wir werden uns später nur für den elastischen Bereich interessieren, so daß nichtlineares Verhalten
keine Rolle spielt. Dies ist natürlich eine ganz entscheidende Vereinfachung und eine Schwäche des
betrachteten Modells.
Beschäftigen wir uns noch kurz mit dem Verhalten unter Druck. Bis zur Proportionalitätsgrenze
σP− gelten analoge Aussagen wie oben, jedoch kann es passieren, daß bereits bei einer Spannung,
die betragsmäßig kleiner als die Proportionalitätsgrenze ist, ein Knicken des Stabes auftritt. Man
spricht von der elastischen Knickung. Sie hängt nicht nur von der Spannung, sondern u.a. auch von
der Länge des Stabes ab. Bereits Euler (1707-1783) entwickelte eine Formel, mit deren Hilfe man
für diesen Fall die maximale Druckkraft errechnen kann, die man auf einen Stab entlang seiner
Längsachse ausüben darf.
Da wir später im Optimierungsmodell keine Anti-Knick-Nebenbedingungen berücksichtigen, wird
nicht näher auf dieses schwierige und für die Praxis nicht unwichtige Problem eingegangen. Schon
für einen Stab erhält man Nichtdifferenzierbarkeiten in den interessierenden Funktionen. Modelliert man mehrere Stäbe als System in einem Fachwerk und will Anti-Knick-Nebenbedingungen
berücksichtigen, dann sind genauere Modelle meist nicht mehr zu beherrschen (Unstetigkeiten,
Nichtdifferenzierbarkeiten, ganzzahlige Restriktionen).
Maximale Spannung σmax . die Grenze für die Belastbarkeit eines aus dem Material gefertigten
Stabes.
• Für jedes Material gibt es bezogen auf eine bestimmte Querschnittsfläche eine maximale
Kraft, die versagensfrei übertragen werden kann. Der Quotient aus dieser maximalen Kraft
und der Querschnittsfläche ist die materialabhängige Konstante σmax .
Kapitel 2. Fachwerk
15
Formal wird ein Material hier wie folgt definiert:
Definition 1. 4-Tupel
M := (ρ, E, σmax , σmin )
mit
ρ
Spezifische Dichte
E
Elastizitätsmodul
σmax
Maximale Spannung ohne Versagen
σmin
minimale Spannung
heißt Material.
Das Material des gesuchten Fachwerks ist in dieser Arbeit für das Optimierungsproblem vorgegeben.
Die variablen Größen einer Fachwerksbeschreibung lassen sich den folgenden Gruppen zuordnen:
Topologie: Die Topologie beschreibt die Knotenmenge K des Fachwerks sowie Stäbe S als Verbindungen der Knoten. Das Tupel (K, S) ist somit ein ungerichteter Graph mit Knotenmenge K
und Kantenmenge S ⊆ {{k, k 0 } |k, k 0 ∈ K, k 6= k 0 }.
In dem Fachwerk in Abb. 2.1 sind die Knoten mit arabischen und die Stäbe mit römischen Ziffern
beschriftet. Es ist K = {1, ..., 9} und S = {sI , ..., sXII } mit
sI
=
{1, 2}
sII
=
{2, 3}
sIII
=
{3, 6}
sIV
=
{2, 5}
sV
=
{1, 4}
sV I
=
{5, 6}
sV II
=
{4, 5}
sV III
=
{6, 9}
sIX
=
{5, 8}
sX
=
{4, 7}
sXI
=
{8, 9}
sXII
=
{7, 8}
Es wird von einem konvexen Konstruktionsraum R ausgegangen, so daß sich auch die Stäbe in ihrer
gesamten Länge innerhalb von R befinden.
Legt man den Ursprung des x-y- Koordinatensystems von Abb. 2.1 in den Knoten 1, so ergibt sich
mit den Variablen a für die Positionen der Knoten
16
Kapitel 2. Fachwerk
P (1)
=
(0, 0)
P (2)
=
(0, a)
P (3)
=
(0, 2a)
P (4)
=
(a, 0)
P (5)
=
(a, a)
P (6)
=
(a, 2a)
P (7)
=
(2a, 0)
P (8)
=
(2a, a)
P (9)
=
(2a, 2a)
Bemessung: Durch eine Bemessungsfunktion werden den Stäben s ∈ S Attribute zugewiesen, die
benötigt werden, um Aussagen über das Versagen eines Stabes machen zu können. Für die hier
betrachtete Versagensform genügt die Angabe der Stabquerschnittsfläche A(s), aus der zusammen
mit einer sich aus der Belastung ergebenden Stabkraft die Stabspannung berechnet wird. Wenn der
Betrag dieser Spannung die zulässige Maximalspannung σmax überschreitet, versagt der Stab.
Zusammenfassend läßt sich ein Fachwerk im Sinne des Gewichtsoptimierungsproblems wie folgt
formal definieren:
Definition 2. Ein 5- Tupel
F := (M, K, S, P, A)
mit
M = (ρ, E, σmax )
Material
K = {k1 , ..., kn }
S⊆
{{k, k 0 }
⊆ K|k 6=
endliche Knotenmenge
k0 }
Stabmenge
P :K→R
Knotenpositionen
A : S → R+
Stabquerschnittsflächen
und der zusätzlichen Eigenschaft (Eindeutigkeit der Knotenpositionen)
P (k) = P (k 0 ) ⇒ k = k 0 für alle k, k 0 ∈ K
(2.2)
heißt (hier) Fachwerk im Konstruktionsraum R.
Für ein festes x-y-Koordinatensystem eines Konstruktionsraums R ⊆ R2 bezeichne xk die x− und
yk die y- Koordinate eines Knotens k ∈ K , also P (k) = (xk , yk ).
Aus der Geometrie eines Fachwerks ergibt sich die Definition für die Länge l eines Stabes.
Definition 3. Länge
Kapitel 2. Fachwerk
17
Die Länge l : S → R+ eines Stabes s = {k, k 0 } ∈ S in einem unbelasteten Fachwerk F ist der
euklidische Abstand seiner Endknoten k, k 0 im Konstruktionsraum R ⊆ R2 :
l(s) :=
q
(xk − xk0 )2 + (yk − yk0 )2
(2.3)
Hier sind die Längen aller Stäbe von sI bis sXII des Fachwerks aus Abb. 2.1 gleich a.
Die Stablänge wird sowohl bei der Berechnung der Stabreaktionskraft aufgrund einer Belastung als
auch bei der Berechnung des Fachwerksgewichts benötigt.
f
u
a)
b)
Abbildung 2.4: Belastung eines Knotens,gegeben (a) durch angreifende Kraft f oder (b) durch vorgegebene
Verschiebung U
Definition 4. Volumen
Das Volumen V : S → R+
0 eines Stabes s ∈ S in einem Fachwerk F ist.
V (s) := A(s)l(s)
(2.4)
Definition 5. gesamte Volumen
Das gesamte Volumen V : S → R+
0 eines Fachwerks F ist die Summe der Gewichte seiner Stäbe
V (F ) :=
X
A(s)l(s)
(2.5)
s∈S
Damit ist die Zielfunktion V des Optimierungsproblems formal definiert. Nimmt man an, daß F die
Menge aller Fachwerke F ist, die alle Restriktionen - insbesondere hinsichtlich der Tragfähigkeit erfüllen, so ist ein Fachwerk F ∗ ∈ F gesucht mit
V (F ∗ ) ≤ V (F ) für alle F ∈ F
(2.6)
18
Kapitel 2. Fachwerk
Eine Belastung eines Fachwerks ist durch die Belastung seiner Knoten definiert. Eine Belastung
eines Knotenpunkts kann entweder durch eine im Knoten angreifende Kraft f oder durch eine Verschiebung u des Knotens innerhalb des Konstruktionsraums gegeben sein (vgl. Abb.2.4). Für eine
Kraft kann eine äquivalente Belastung durch eine Verschiebung und umgekehrt für eine Verschiebung eine äquivalente Belastung durch eine Kraft berechnet werden.
Bei Vorgabe einer Kraft f am Knoten k kann die äquivalente Verschiebung durch Anwendung der
Vorschrift:
Verschiebe k gerade soweit in Richtung von f , bis die vom Fachwerk erzeugte Gegenkraft
gleich −f ist.
Abbildung 2.5: Beispiel für Festlager und Freilager bzgl. x und y Richtung
ermittelt werden. Umgekehrt kann bei Vorgabe einer Verschiebung u am Knoten k die äquivalente
Kraft mittels der Vorschrift:
Wende gerade soviel Kraft auf, daß der Knoten um die vorgegebene Verschiebung u nachgibt.
bestimmt werden.
Der mechanische Zusammenhang zwischen f und u ist von den elastischen Eigenschaften des gesamten Fachwerks abhängig. Beispiele für Knoten, für die eine Verschiebung vorgegeben ist, sind
die Lagerknoten eines Fachwerks.
Lagerknoten sind Knoten k ∈ K, an denen ein Fachwerk im Konstruktionsraum festgemacht ist und
deren Verschiebung bezüglich einer oder mehrerer Richtungen ausgeschlossen wird (u = 0). Ist eine
Verschiebung eines Lagers gänzlich ausgeschlossen, so spricht man von einem Festlager; kann ein
Lagerknoten in einem ebenen Konstruktionsraum nur bezüglich einer Richtung verschoben werden,
während er bezüglich der anderen Richtung verschieblich ist, spricht man von einem Freilager.
Kapitel 2. Fachwerk
19
Abb. 2.5 zeigt für ein Fachwerk in einem ebenen Konstruktionsraum ein Festlager sowie je ein
Freilager bezüglich x und y Richtung. Dabei bedeutet Freilager bezüglich x-Richtung, daß sich der
Knoten bezüglich der x-Richtung wie ein Lager verhält und bezüglich der y-Richtung frei verschoben werden kann. Analog ist Freilager bezüglich y-Richtung zu verstehen. Das Symbol für Freilager
unterscheidet sich vom Symbol für Festlager durch zwei Rollen, die andeuten sollen, daß das Freilager entlang der Kante der schraffierten Fläche verschoben werden kann. Schräge Freilager, bei
denen die Verschieberichtung nicht parallel zu einer der Achsen des Koordinatensystems ist, werden
hier nicht betrachtet.
2.1.2 Exakte Grundstrukturen und Fachwerke
Wir wollen nun den Begriff des Fachwerks etwas mathematischer fassen, da dieses Voraussetzung
für exakte Aussagen und Begriffsbildungen ist. Wir unterscheiden zunächst den Begriff des Fachwerks und den der Grundstruktur (eines Fachwerks). Unter einer Grundstruktur wollen wir dabei
im wesentlichen die Geometrie eines Fachwerks verstehen, ohne auf Dicken von Stäben einzugehen. Ein Fachwerk hingegen soll zusätzlich Information über Materialeigenschaften und -verteilung
enthalten. Man spricht von potentiellen Stäben, denen nach Lösung einer Optimierungsaufgabe ein
gewisses Volumen gegeben wird. Dieses kann jedoch auch Null sein, so daß der betreffende Stab
nicht im resultierenden Fachwerk vorkommt. Auch lassen sich Eigenschaften von Fachwerken allein
aus der Position der Knoten und der potentiellen Stäbe ableiten, ohne daß die Volumina der Stäbe
bekannt sein müssen. Dies motiviert ebenfalls die Unterscheidung.
Die Grundstruktur eines Fachwerks kann beschrieben werden, indem man seine Knotenpositionen,
die Stabverbindungen zwischen den Knoten und die Auflagerbedingungen angibt.
Wir betrachten nur ebene Fachwerke. Die Dimension des Raumes wird stets mit
d=2
bezeichnet. Ausgehend von einem kartesischen Koordinatensystem des Rd betrachten wir ein Fachwerk mit
N ≥2
Knoten, indem wir die Knotenkoordinaten v1 , . . . , vN ∈ Rd in einer Menge ν zusammenfassen,
ν = {v1 , . . . , vN } ⊂ Rd
Zur Vereinfachung nehmen wir an, daß vorhandene Auflagerbedingungen stets Fixierung von Knoten in Koordinatenrichtungen des gewählten Koordinatensystems von Rd entsprechen. Diese Annahme vereinfacht die Berechnung sämtlicher zur Beschreibung des Problems notwendiger Matrizen
wesentlich, und das Modell ist beträchtlich einfacher zu handhaben. Schwierigere Auflagerbedingungen können durch diffizilere Definitionen der Steifigkeitsmatrizen aufgefangen werden (Multiplikation mit Rotationsmatrizen etc.), und werden hier nicht betrachtet.
Die Auflagerbedingungen können aufgrund dieser Annahme durch eine binäre Funktion
20
Kapitel 2. Fachwerk
r : ν → {0, 1}d notiert werden:


0, falls keine Verschiebung von Knoten v





in Koordinatenrichtung j erlaubt ist
[r(v)]j :=

 1, falls Verschiebung von Knoten v




für j = 1, . . . , d.
(2.7)
in Koordinatenrichtung j erlaubt ist
Schließlich müssen noch die zugelassenen Stabverbindungen, d.h. die potentiellen Stäbe, definiert
werden. Diese werden im folgenden auch Kanten genannt. Wir bezeichnen stets mit
m>0
die Zahl der Kanten im Stabwerk. Jeder dieser potentiellen Stäbe ist eindeutig durch seine beiden
Endknoten v, v 0 ∈ ν gegeben. In den meisten Fällen muß kein Anfangs- und Endknoten ausgezeichnet werden. Daher können wir jede Kante e als 2–elementige Teilmenge von ν interpretieren,
e∈
v, v 0 |v, v 0 ∈ ν; v 6= v 0
An einer Stelle ist es später jedoch notwendig zwischen Anfangs- und Endknoten zu unterscheiden.
Dann sehen wir eine Kante e als Zweitupel in ν × ν an. Welcher der beiden Knoten zum Anfangsoder Endknoten gemacht wird, ist dabei unerheblich.
Die Menge aller Stäbe wird mit bezeichnet,
= {e1 , . . . , em }
Für eine feste Dimension d = 2 halten wir die mathematische Definition einer Grundstruktur fest:
Definition 6. Eine Grundstruktur (eines Fachwerks) G ist ein Tripel G = (ν, , r), wobei ν ⊂ Rd
eine endliche Menge von Knotenkoordinaten ist (|ν| > 2) ,
⊂
v, v 0 |v, v 0 ∈ ν; v 6= v 0
eine nicht leere endliche Menge von (potentiellen, d. h. möglichen) Stabverbindungen zwischen den
Knoten beschreibt, und r : ν → {0, 1}d gemäß (2.7) die Auflagerbedingungen angibt.
Die Zahl der Knoten wird mit N , die Zahl der Stäbe mit m bezeichnet,
N := |ν|,
m := ||
Zeichnerische Dastellung 7. In der Literatur hat sich ein gewisser Standard ergeben, um ebene
Fachwerke darzustellen. Die im folgenden erklärten Zeichen sind in der Tabelle 2.2 darstellt
Die Knoten einer Grundstruktur oder eines Fachwerks stellen wir durch Punkte dar. Potentielle
Stäbe zwischen zwei Knoten werden durch eine Linie angedeutet. Die Auflagerbedingungen werden,
wie in den Ingenieurwissenschaften üblich, als Dreieck gezeichnet, auf dem der fixierte Knoten ruht.
Um anzudeuten, daß dieser keine Freiheit in eine der beiden Koordinatenrichtungen besitzt, wird
Kapitel 2. Fachwerk
21
Potentiell Stab(mit zwei Endknoten)
In beiden Richtungen fixierter Knoten(keine Richtung frei)
In vertikaler Richtung fixierter Knoten(horizontale Richtung ist frei)
In horizontaler Richtung fixierter Knoten(vertikale Richtung ist frei)
Knoten, an dem vertikal gerichtete Kraft angreift
Tabelle 2.2: Zeichenerklärung für die Darstellung von Stabwerken
das Dreieck auf seiner ruhenden Seite mit einem zusätzliche Strich versehen. Ist ein Knoten nur in
einer Richtung fixiert, dann bekommt das Dreieck zwei kleine Kreise, die eine mögliche Bewegung
(Rollen) in der freien Richtung andeuten siehe Tabelle. 2.2
Beispiel 1.
In Abb. 2.6 ist eine erste (ebene) Grundstruktur gezeigt. Sie stellt das 2-dimensionale Seitenteil
einer Brückenkonstruktion dar, das aus N = 12 Knoten und m = 29 potentiellen Stäben besteht.
Der linke untere Knoten ist in beiden Richtungen fixiert, während der rechte Freiheit in horizontaler Richtung genießt. (Dies entspricht genau der Konstruktion einer Brücke in der Realität, da
man ein Ende der Brücke horizontal beweglich lagert, um minimale Längenänderungen, die durch
Belastung oder Außentemperatur entstehen, ausgleichen zu können). Bezeichnen wir den linken
Abbildung 2.6: Grundstruktur einer Bogenbrücke(Seitenteil)
unteren Knoten mit vl und den rechten mit vr dann ist r nach 2.7 also definiert durch
(
[r(v)]j =
0,
falls(v = vl ∨ (v = vr ∧ j = 2))
1,
sonst.
Aus den Auflagerbedingungen ergibt sich recht einfach ein Maß für die Beweglichkeit eines Stabwerkes in den Knoten : Alle freien Knotenkoordinaten erlauben eine entsprechende Verschiebung des
Stabwerkes. Die Anzahl dieser Koordinaten gibt also Aufschluß über die Möglichkeiten der Struktur, durch Verformung des Stabwerks eine angelegte äußere Kraft zu kompensieren und dadurch
im Gleichgewicht zu bleiben. Diese Anzahl wird Freiheitsgrad genannt.
22
Kapitel 2. Fachwerk
Definition 8. Sei G = (ν, , r) eine Grundstruktur. Dann bezeichnen wir mit n stets den „Freiheitsgrad von G“, der gegeben ist durch
n :=
d X
X
[r(v)]j
j=1 v∈ν
Wie man sieht, ist diese Definition unabhängig von der Kantenmenge . Da wir im Raum der
Verschiebungsvektoren rechnen werden, spielt n eine wichtige Rolle.
Wegen
N ·d=
d X
X
1
j=1 v∈ν
gilt
n=N ·d−
d
X
X
1
j=1 v∈ν:[r(v)]j =0
d. h. n ist die Zahl aller prinzipiell möglichen Knoten- Verschiebungsrichtungen N · d abzüglich
der fixierten Richtungen. In praktischen Anwendungen ist die Zahl der durch Auflagerbedingungen
fixierten Richtungen weitaus kleiner als N · d, so daß meist
n≈N ·d
gilt.
Beispiel 2.
Für das obige Beispiel 1 sind 3 Knoten-Koordinatenrichtungen fixiert, also gilt
n = N · d − 3 = 12 · 2 − 3 = 21.
(2.8)
3 Fachwerksoptimierung: Sizing, Geometry, Topology
Bei der Optimierung von Bauteilen und Konstruktionen, kurz Strukturen genannt, sind verschiedene Philosophien und Problemstellungen möglich, die zum Teil ineinander übergehen oder auch
kombiniert werden können. Es haben sich drei Kategorien von Problemstellungen bzw. Sichtweisen
eingebürgert, die mit Sizing , Geometry (Geometrieoptimierung) und Topology (Topologieoptimierung) betitelt sind. Anhand von Stabwerken sollen diese Begriffe im folgenden erläutert werden. Da
sie Standard in der Strukturoptimierung sind, werden sie nicht übersetzt. Als illustratives Beispiel
dient das Seitenteil einer Bogenbrücke, das im linken unteren Knoten fixiert und im rechten unteren Knoten aufliegt, dort jedoch horizontale Freiheit für Verschiebungen besitzt. In den unteren
Knoten soll jeweils eine vertikal nach unten wirkende Kraft angreifen, die in allen diesen Knoten
den gleichen Betrag hat.
• Sizing-Problem (Dimensionierung)
Man betrachtet eine Grundstruktur, deren Stäben Material zugewiesen werden soll, so daß
ein Zielfunktional unter gegebenen Nebenbedingungen minimal wird. Dabei sollen (im Prinzip) genau die Stäbe benutzt werden, die in der Grundstruktur vorgegeben sind. Meist ist
daher eine positive, kleine Untergrenze für die Stabvolumina gesetzt. Außerdem besteht die
verwendete Grundstruktur aus wenig potentiellen Stäben, da sämtliche Stäbe in der berechneten Struktur vorkommen sollen. Abb. 3.1 zeigt eine Grundstruktur mit N = 12 Knoten und
m = 21 Stäben. Abb. 3.2 zeigt das optimierte Fachewerk, in dem das Volumen jedes Stabs
berechnet wurde. In der Zeichnung wird dies durch entsprechende Rechtecke angedeutet.
Abbildung 3.1: Beispiel einer Grundstruktur für das Sizing-Problem
• Geometry-Problem (Gestaltsbestimmung)
Man geht aus von einer (Start-)Grundstruktur, die bereits alle Informationen über die Konfiguration der Stäbe (Zuordnung der Endknoten, d.h. Kenntnis der Verbindungen der Stäbe)
und über die Auflagerbedingungen enthält. Es werden die optimalen Positionen der Knoten
gesucht, so daß - nach einer Volumenbestimmung der einzelnen Stäbe - eine möglichst gute
Struktur entsteht. Automatisch ändern sich die axialen Richtungen der Stäbe. Die Unterschei-
23
24
Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology
Abbildung 3.2: Als sizing-Problem optimierte Struktur
dung zwischen der Variation der Knotenpositionen (Geometry) und der parallel durchgeführten Optimierung der Stabvolumina (Sizing) ist rein formal und wird mitunter (und von uns
auch) fallen lassen. Der Grund ist, daß zur Unterscheidung, welche Knotenpositionen besser
sind, parallel Sizing-Schritte zur Analyse des Systems unternommen werden müssen. Abb.
3.3 zeigt eine gegebene Grundstruktur mit N = 12 Knoten und m = 25 Stäben. Nach einem
Optimierungsschritt erhält man eine in den Knotenpositionen veränderte Grundstruktur, die
in Abb. 3.4 zu sehen ist. Die simultan berechnete Materialverteilung deutet Abb. 3.5 an. Bei
dieser parallel durchgeführten Optimierung der Stabvolumina haben manche der Stäbe das
Volumen Null erhalten. Sie sind deshalb im Geometrie-optimierten Fachwerk nicht vorhanden.
Der Freiheitsgrad der Grundstruktur wie auch die Konfiguration der Stäbe und deren Anzahl
wird bei der Geometrie-Optimierung also nicht verändert, wohl aber die Länge der Stäbe
und die Positionen der Knoten. Dies schlägt sich in den Einträgen und ν von damit in einer
Änderung der Geometriematrix C nieder (siehe Gl. 3.3)
Abbildung 3.3: Start-Grundstruktur für das Geometry-Problem
Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology
25
Abbildung 3.4: Als Geometry-Problem optimierte Grundstruktur
Abbildung 3.5: Als Geometry-Problem optimiertes Fachwerk
• Topology-Problem(Elementanordnung)
Unter der Topologie einer Struktur versteht man die Positionierung der einzelnen Teile einer
Struktur in der Gesamtkonstruktion, d. h. deren Anordnung als System. Dies drückt sich
genau in dem Begriff der Grundstruktur (siehe Abb. 3.2) aus. Man betrachtet eine Grundstruktur, die sehr viele Knoten und sehr viele potentielle Stäbe enthält. Die Gestalt der zu
optimierenden Struktur sollte damit möglichst frei sein. Die Optimierung wählt aus allen
potentiellen Stäben die beste Teilmenge aus, so daß eine optimale Materialverteilung auf dieser Unter-Grundstruktur ein möglichst gutes Fachwerk ergibt. Im Topology-Problem bleiben
sowohl die Knotenpositionen als auch die Auflagerbedingungen und die Stabverbindungen
(Stäbe) zwischen den fest vorgegebenen Knoten ausgewählt, denen dann Material zugewiesen
wird.
Die Begriffe können bei der Fachwerksoptimierung nicht klar voneinander abgegrenzt werden. Der
Unterschied zwischen dem Sizing- und Topology-Problem liegt in der Philosophie: Während beim
Sizing-Problem wenige Stäbe in der Grundstruktur sind, deren optimale Volumina positiv sind,
werden im Topology-Problem äußerst viele potentielle Stäbe betrachtet, von denen die meisten
das Volumen Null bekommen, d.h. nicht in der optimalen Struktur enthalten sind. Das GeometryProblem enthält ebenfalls einen Topology-Aspekt: Durch die Optimierung der Knotenpositionen
werden eventuell manche Stäbe unnötig, und sind in der Berechneten Struktur nicht mehr vorhanden (s. Abb. 3.4 im Gegensatz zu Abb. 3.5).
Folgende Tabelle gibt einen zusammenfassenden Überblick:
26
Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology
Wünschenswert ist eine simultane Bearbeitung aller drei Optimierungskategorien: Ausgehend von
gegebene Grundstruktur
Knotenpositionen potentielle Stäbe
S
G
T
fest
variabel
fest
wenige
wenige
viele
optimiertes Fachwerk (Resultat)
Knotenpositionen Stabvolumina tatsächliche
Verbindung
gegeben
gesucht
bekannt
gesucht
gegeben
bekannt
gegeben
gesucht
gesucht
Tabelle 3.1: Zusammenfassenden Überblick (S Steht für sizing, G für Geometry und T für Topology
einer genügend dichten Grundstruktur wird sowohl die optimale Position der Knoten als auch die
Menge der notwendigen Stäbe inklusive ihrer optimalen Stabdicken errechnet. Dieses Ziel wurde aufgrund der komplexen Struktur bisher nur für sehr einfache, eher akademische Beispiele betrachtet.
Ist jedoch das zugrundegelegte Modell genügend einfach, dann kann man numerisch funktionierende Methoden anbieten.
Das Hauptaugenmerk der Strukturoptimierung wurde bisher auf das Sizing-Problem gerichtet. Der
Grund dafür ist die beherrschbare Zahl von Variablen und die erhebliche Verringerung der Mathematischen Schwierigkeiten.
Die Geometrieoptimierung allgemeiner sog. Optimal-Schape-Probleme ist heute mit Finite-ElementMethoden und entsprechender mit Grafik versehener Software Standard in der Strukturoptimierung. Es werden dabei die Eck-Punkte verschoben, die die Geometrie der jeweiligen Elemente
definieren (für Fachwerke: Element = Stab). Für große Strukturen mit vielen Knoten werden diese
Probleme jedoch numerisch schwer lösbar, da sie hochgradig nicht linear im Fachwerk mit Geometriematrix sind.
Die wohl interessanteste Fragestellung ist die des Topology-Problems, die abgesehen von der verschiedenen Philosophie für dünne Strukturen formal das Sizing- und eine diskretisierte Form des
Geometry-Problems enthält: Ist man sich über die Lage der Knoten in einer Grundstruktur im
unklaren, dann kann man durch Wahl einer sehr großen Zahl von Knoten in der Grundstruktur
(beispielsweise durch Diskretisierung mit einem Gitter über den Abmessungen, in dem sich die
Knoten befinden sollen) eine diskretisierte Version des Geometry-Problems erhalten. Der Nachteil
ist, daß man die Anzahl der potentiellen Stäbe ebenfalls entsprechend radikal erhöhen muß. Für
die oben gezeigte Brücke könnte man zum Beispiel ein Gitter von N = 7 · 7 = 49 Punkten wählen,
das lediglich die Breite und die Höhe der Brücke festlegt. Wählt man nun jede mögliche Verbindung zweier Punkte in diesem Gitter (und streicht sich überlappende Stäbe), dann ergibt sich eine
Grundstruktur mit m = 748 potentiellen Stäben, die in Abb. 3.6 angedeutet ist. Die bogenartige
Gestalt der Brücke ist dabei in keiner Weise vorbestimmt, sondern die Optimierung allein wird die
optimale Geometrie innerhalb des vorgegebenen Rasters bestimmen. Rozvany[4] nennt eine Grundstruktur in diesem Zusammenhang Strukturell Universe, um anzudeuten, daß alle zur Optimierung
zugelassenen möglichen Strukturen in dieser Diskretisierung der Realität enthalten sind. Das Er-
Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology
27
gebnis der Optimierung ist in Abb.3.7 dargestellt. Die Bogenform ist deutlich sichtbar, wennauch
dünne Balken entstanden sind, die von den festen Knotenpositionen des zugrundegelegten Gitters
herrühren. Man bemerke auch den kombinatorischen 0 − 1− Charakter des Topology-Problems: Es
Abbildung 3.6: Grundstruktur
Abbildung 3.7: Als Topology-Problem optimierte Struktur vgl.Abs 5.1.1 7 × 7 Knoten
wird eine optimale Menge von Stäben aus endlich vielen ausgewählt, um die optimale Unterstruktur
zu bilden.
Kirsch[5] bemerkt, daß schon eine kurze (Vor-)Optimierung der Gestalt einer Struktur, d.h. Geometry und/oder Topology, ein Design wesentlich verbessern kann. Klarerweise kann man kein gutes
Fachwerk nach Berechnung der optimalen Stabvolumina(Sizing) erwarten, wenn die gewählte Geometrie und Konfiguration der Grundstruktur von vorneherein schlecht war.
Wir werden uns hauptsächlich mit dem Topology-Problem beschäftigen. Da für jeden potentiellen
Stab eine Designvariable benötigt wird, hat dieses Problem i.A. eine extrem große Dimension, die
die Anwendung gewöhnlicher Software verhindert. Daher sind neue mathematische Zugänge und
Methoden erforderlich. Im Rahmen dieser Arbeit beschränken wir uns auf anerkannte Zugänge und
Methoden.
28
Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology
3.1 Topologieoptimierung beim Fachwerk als Volumensminimierung
3.1.1 Elastizitätstheorie für ebene Stabwerke
Wir wollen nun mehrere Stäbe in einem Fachwerk betrachten. Diese Stäbe beeinflussen sich gegenseitig, was aber leicht durch das Superpositionsprinzip der Physik beherrscht werden kann: Alle
Auslenkungen in den Knoten werden addiert; es ergibt sich die Auslenkung eines Knotens im System. Jedoch müssen sowohl die Auslenkungen der Endknoten in der Geometrie des Fachwerks
ausgedrückt werden, als auch die elastischen Eigenschaften, die diese Auslenkungen mit äußeren
Kräften in Verbindung bringen. Dies wird mit Hilfe gewisser Matrizen bewerkstelligt, die Steifigkeitsmatrizen genannt werden. Dieser auch aus der Mathematik für finite Elemente bekannte
Begriff wird nun für Stabwerke erklärt.
Um anschaulich zu bleiben, betrachten wir in diesem Unterabschnitt nur ebene Fachwerke. Wir
Abbildung 3.8: Platzierung eines Stabes in der Ebene
haben hier eine möglichst einfache Darstellung gewählt, die allein auf Fachwerke bezogen ist, und
die unser später verwendeten Terminologie genügen soll.
Wir betrachten zunächst den Endknoten eines Stabes. Der Stab stehe an seinen Enden unter Belastung und erfahre dabei eine Längenveränderung. Man stelle sich den Stab dabei nicht isoliert,
sondern als herausgelöstes Teilsystem eines ganzen Stabwerks vor. Dies ist nach dem Überlagerungsprinzip der Physik erlaubt. Wir gehen von den Positionen v (1) , v (2) ∈ R2 der Endknoten in
der Ebene aus, wobei der Stab noch in Ruhe sei. Er schließe dabei mit der horizontalen Koordinatenachse den Winkel φ ∈ [0, 2π] ein. Unter Belastung werde der Knoten v (1) dann um die Länge
∆l(1) nach w(1) und v (2) um ∆l(2) entlang des Stabes nach w(2) verschoben. Die neuen Positionen
w(1) , w(2) der Knoten sind dann nach einfachen Mittel der Vektorrechnung gegeben durch
v (1) − v (2)
w(1) = v (1) + x(1) = v (1) + ∆l(1) · v (1) − v (2) 2
Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology
29
v (2) − v (1)
w(2) = v (2) + x(2) = v (2) + ∆l(2) · v (2) − v (1) 2
Damit ergibt sich die Formel:
w(1) = v (1) + ∆l(1)
w(2) = v (2) + ∆l(2)
1
v (1) − v (2)
l
1
v (2) − v (1)
l
Dabei bezeichnet
l = v (2) − v (1) 2
die Länge des Stabes. Abb. 3.8 zeigt die Situation. Für die Verschiebungsvektoren
x(1) := w(1) − v (1)
x(2) := w(2) − v (2)
und
der Knoten gilt also

(2)
v − v (1) cos φ
∆l(1)
2

=
(2)
l
v − v (1) sin φ

1
x(1) = ∆l(1)
v (1) − v (2) = − 
l
− cos φ
− sin φ
2

 (2)
(1) cos φ
1
v
−
v
∆l(2)
2

x(2) = ∆l(2)
v (2) − v (1) =  =
(2)
l
l
v − v (1) sin φ
2
!
cos φ
sin φ
∆l(1)
!
∆l(2)
Ist umgekehrt
x(1)
z=
!
∈ R2+2
x(2)
ein Verschiebungsvektor, der die Verschiebungen x(1) und x(2) in den Knoten v (1) und v (2) angibt,
dann können wir daraus die Längenänderung ∆l des Stabes berechnen:
∆l =
∆l(1)
+
∆l(2)
− cos φ
=
− sin φ
|
=
∆l = γ̂ T z
wobei
− cos φ
− sin φ
!T
!T
x(1) +
− cos φ
!
∆l(1)
− sin φ
{z
}
=1
cos φ
sin φ
!T
cos φ
+
!T
sin φ
|
cos φ
!
∆l(2)
sin φ
{z
=1
}
x(2)
(3.1)
30
Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology

− cos φ

 − sin φ

γ̂ := 

cos φ

sin φ




 ∈ R4 .


(3.2)
Definition 9. Sei G = (ν, , r) eine Grundstruktur mit dem Freiheitsgrad n und = {e1 , . . . , e
m }.
(1)
(2)
Jede Kante ei ∈ wird als Zweitupel von Anfangs- und Endknoten aufgefasst, ei = vi , vi
∈
(2) (1)
ν (2) , und li := vi − vi sei die Länge dieser Kante.
2
Wir ordnen jeder Komponente in Rn genau eine freie Knoten-Verschiebungskoordinate
n
(v, j) ∈ νD := (v 0 , j 0 ) ∈ ν × {1, ..., d} | r(v 0 )
j0
o
=1
zu und bezeichnen diese mit |vj|.
Dann heißt für i = 1, ..., m der Vektor γi ∈ Rn , definiert durch
[γi ]|vj| :=

(2)
(1)
(1)
1


 li ([vi ]j − [vi ]j ), falls v = vi
(1)
(2)
(2)
1
li ([vi ]j − [vi ]j ), falls v = vi



sonst
0,




für(v, j) ∈ νD



„(reduzierter) Geometrievektor des (potentiellen) Stabes i “
Bemerkung 10.
(1)
• Ist v = vi , dann enthält die Komponente [vj ] von γi gerade den Kosinus des Winkels, den
der (potentielle) Stab mit der j-ten Koordinatenachse des kartesischen Koordinatensystems
in Rd einschließt.[γi ]|v(2) j| enthält den dazu negativen Wert.
i
• Ist d = 2 und [γi ]|v(1) 1| = cos φ, dann gilt [γi ]|v(1) 2| = sin φ. Insgesamt ergeben sich also die
i
i
Vektoren aus Gl. 3.2 und Gl. 3.12
• In der Praxis wird man zur Berechnung von γi alle N · d Knoten-Verschiebungskoordinaten
(1)
durchnummerieren, γ̃i ∈ RN ·d mit 0RN ·d vorbesetzen, und nur für vi
(2)
und vi
die betreffenden
Komponenten berechnen,
[γ̃i ]
[γ̃i ] (2) vi j (1)
vi j
:=
h
1
li (
(2)
vi
i
h
j
:= − [γ̃i ]|v(1) j|
i
(1)
− vi
i
j

), 


für
j = 1, ..., d.



Anschließend werden die Komponenten|vj | mit [r(v)]j = 0 gestrichen, und es entsteht der
Vektor γi .
Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology
(1)
• Die Vertauschung der Rollen von vi
(2)
und vi
31
als Anfangs- und Endknoten des (potentiellen)
Stabes bewirkt eine Vorzeichenänderung von γi , die sich jedoch nicht in dyadischen Produkten (siehe Steifigkeitsmatrizen) äußert, aber dann, wenn von (inneren) Zug- und Druckkräften
die Rede ist. Für Stäbe, deren Endknoten keinen Auflagerbedingungen genügen, ist diese Unterscheidung jedoch eine Frage der Philosophie.
• Eine andere Nummerierung der freien Knotenkoordinaten führt lediglich zu einer Permutation
der Komponenten in γi . Wir werden darauf deshalb nicht mehr eingehen und stets von “den”
Geometrievektoren sprechen, da die Nummerierung im folgenden festgehalten werden soll.
Beispiel 3.
Wir betrachten ein Beispiel mit m = 3 Stäben, das in Abb.3.9 gezeigt ist. Es besitzt 3 in beide
Richtungen fixierte Knoten v1 = (0, 0)T , v2 = (0, 1)T und v3 = (0, 3)T und einen freien Knoten
v4 = (2, 1)T . Die Stäbe e1 = (v1 , v4 ), e2 = (v2 , v4 ) und e3 = (v3 , v4 ) schließen demnach mit der
ersten Koordinatenachse des räumlichen Systems Winkel von φ ≈ 0.4636(≈ 26.56◦ ), φ2 = 0 und
√
√
φ = 23 π(= 270◦ ) ein. Für die Längen der Stäbe gilt l1 = 5, l2 = 2 und l3 = 2 2. Da nur der
Knoten v4 frei ist, ist n = 2 und wir erhalten mit der Nummerierung
Abbildung 3.9: Stabwerk bestehend aus 3 Stäben
32
Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology
R2 3 (x1 , x2 )T = (x|v4 1| , x|v4 2| )T
γ1 =
γ2 =
γ3 =
1
l1 ([v1 ]1
1
l1 ([v1 ]2
− [v4 ]1 )
1
l2 ([v2 ]1
1
l2 ([v2 ]2
1
l3 ([v3 ]1
1
l3 ([v3 ]2
− [v4 ]1 )
=
− [v4 ]2 )
− [v4 ]2 )

!

!
− √25
− √15
− 22
=
− [v4 ]2 )
− [v4 ]1 )

!
= 
0
2
2
− 2√
2
2
√
2 2


=
!
=


=
− cos φ1
!
,
− sin φ1
− cos φ2
!
,
− sin φ2
− cos φ3
!
− sin φ3
,
Sofort aus der Definition der Geometievektoren folgt
Korollar 11. Jeder Geometrievektor γi , i = 1, . . . , m, besitzt höchstens
2·d
Komponenten, die ungleich Null sind.
Um leicht Gleichgewicht innerer und äußerer Kräfte notieren zu können, fassen wir die Geometrievektoren in einer Matrix zusammen, die wir stets mit C bezeichnen.
Definition 12. Sei G = (ν, , r) eine Grundstruktur und γ1 , . . . , γm seien sie Geometrievektoren.
Dann heißt
C := (γ1 · · · γm ) ∈ Rn×m
(3.3)
„(reduzierte) Geometrie der Grundstruktur G“ oder kurz Geometriematrix.
Beispiel 4.
Als einfaches Beispiel betrachten wir den sog. Rahmen, der aus N = 4 Knoten und m = 3 Stäben
besteht (siehe Abb. 3.10). Die beiden unteren Knoten sind fixiert. Schon aus der Geometrie wird
klar, daß diese Grundstruktur kein Gleichgewicht mit einer äußeren Kraft eingehen kann, die in
einem der beiden oberen Knoten horizontal angreift. Für die Geometriematrix C siehe Abb. 3.10
gilt

0
1

 −1
0

C=
 0 −1

0
0


0 


0 

0 −1
Fügt man der Grundstruktur hingegen einen weiteren diagonalen Stab hinzu (siehe Abb. 3.11),
dann erhält man die Geometriematrix C 0
Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology
33
Abbildung 3.10: ohne diagonal Stab im Rahmen
Abbildung 3.11: mit diagonalem Stab im Rahmen

0
1
0

 −1

C0 = 
 0

0
0
−1
0
0
0 −1
0


0 

√

1

2 √2 
1
2 2
3.1.2 Optimierungsmodell
V (a) = lT a → min
a,w
unter: Cw = f
σmin a ≤ w ≤ σmax a
(3.4)
34
Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology
m∈N
Anzahl Stäbe (finiter Elemente)
n∈N
Anzahl Freiheitsgrade (Knotenzahl ∗ Raumdimension)
V (a) ∈ R
Volumen als Zielfunktion m3
l ∈ Rn
Stablängen [m]
a = (a1 , a2 , ..., an
)T
∈
n
R+
C ∈ Rm×n
w∈
Rn
f∈
Rm
σmin ∈
Stabquerschnitte, Designvariablen m2
Geometriematrix / Gleichgewichtsmatrix siehe Gl. 3.3
Reaktionskräfte / Belastungen der einzelnen Stäbe [N ]
vordefinierte Last [N ]
R−
σmax ∈ R+
physikalische Oberschranke(z. B. Fließgrenze)
h
N
h mi2
N
m2
physikalische Unterschranke (z. B. Fließgrenze)
i
σmin und σmax könnten auch Diagonal–Matrizen sein, um jedem einzelnen Stab unterschiedliche
Grenzen zuzuordnen. Als physikalische Grenzen macht dies natürlich nur bei verschiedenen Materialien Sinn. Dies müsste dann auch analog in der Zielfunktion berücksichtigt werden.
Dieser Ansatz (3.4) ist ein lineares Programm:
lT a →
min
a,w+ ,w− ,s1 ,s2

0

unter: 
 σmin I
−σmax I
C −C
0
−I
I
0




a

f



w+ 
0 0 
  0 


 



w =
I0

 −   0 




0 I
 s1 
s2
0
mita, w+ , w− , s1 s2 ≥ 0
Im folgende bezeichnen wir mit f ∈ Rn stets eine äußere Kraft (hier vordefinierte Last,deren
Bezeichnung sich leicht erklären läßt: f wird „von außen“an den Knoten angelegt, und ebenfalls wie die Knotenverschiebungen - im (reduzierten) globalen Koordinatensystem beschreiben.
Im Unterschied dazu bezeichnet w ∈ Rm stets eine innere Kraft, d. h. die in jedem einzelnen
Stab wirkende Stabkraft. Sie ist nach außen hin lediglich über Längenänderung des Stabes meßbar,
vorausgesetzt die Spannung bleibt im linear-elastischen Bereich.
Definition 13. Sei G = (ν, , r) eine Grundstruktur mit der zugehörigen (reduzierten) Geometriematrix C, f ∈ Rn eine äußere und w ∈ Rm eine innere Kraft. Dann „erfüllt G das Kräftegleichgewicht innerer und äußerer Kräfte“, wenn
Cw = f
(3.5)
erfüllt ist.
Diese Definition ist sehr einfach zu verstehen: Alle inneren Kräfte werden mittels C in das globale
Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology
35
Koordinatensystem transformiert. Ihre Summe muß dann der äußeren Kraft entsprechen, wenn das
System in Ruhe sein soll.
Wir wollen nun die Geometrievektoren definieren und wählen uns irgendeine Nummerierung der
freien Knotenkoordinaten. Diese Nummerierung wird im folgenden festgehalten und stets benutzt,
um eine Verbindung zwischen Knoten und Verschiebungsrichtungen herzustellen. Es wird auch klar
werden, daß es unerheblich ist, welche Nummerierung gewählt wird.
3.2 Topologieoptimierung beim Fachwerk mit Steifigkeitsmatrix
c(x) = uT f → min
(3.6)
x
unter: Ku = f
lT · x = V
m∈N
Anzahl finiter Elemente (Anzahl der Stäbe)
n∈N
Anzahl Freiheitsgrade (Knotenzahl ∗ Raumdimension)
x = (x1 , x2 , ..., xn
)T
n
∈ [0; 1]
relative Volumen der einzelnen Stäbe, Designvariablen m3
siehe.Gl. 2.4
c(x) ∈ R
u = u(x) ∈
f∈
Compliance als Zielfunktion
Rm
virtuelle Verschiebungen[m] Siehe Abb. 2.4 b)
Rm
K = K(x) =
Ki ∈ Rm×m
vordefinierte Last[N ] Siehe Abb. 2.4 a)
Pn
i=1 Ki xi
∈
Rm×m
Steifigkeitsmatrix des Stabwerkes siehe. Abs 3.1.1
Elementsteifigkeitsmatrix des Stabes /
Elementes i in globalen Koordinaten Siehe Gl. 3.13
ki ∈
Rm×m
V ∈
R+
Elementsteifigkeitsmatrix des Elementes i
in lokalen Koordinaten Siehe Gl. 3.9
vordefiniertes maximales Volumen m3
Wir bezeichnen den Vektor γ̂ als Geometrievektor in lokalen Koordinaten, da er genau über die
lokale Orientierung des Stabes Auskunft gibt.
Man sieht in Gl. (3.1), daß der Anteil der Verschiebungen, der senkrecht auf γ̂ steht, keine Wirkung
auf die Längenveränderung des Stabes hat. Dies entspricht der Modellforderung, daß lediglich Kräfte
entlang der Stäbe wirken können, und deshalb auch nur Längenänderungen entlang des Stabes
einfließen.
Wir wollen nun das Hookesche Gesetz Gl. (2.1) anwenden. Dazu betrachten wir eine Kraft f ,
die nach Modellvorstellung in den Stabenden angreife, also als Vektor im R4 geschrieben werden
kann. Es sollen sich die Verschiebungen x ∈ R4 ergeben. Der Stab soll außerden insgesamt im
Gleichgewicht sein, d.h. f kann nur in Richtung der Längsachse des Stabes wirken, und mit einer
Stabkraft q ∈ R gilt dann zwangsläufig nach Konstruktion
qγ̂ = f
(3.7)
Setzt man voraus, daß die auftretende Spannung im linear-elastischen Bereich bleibt, dann ist das
Hookesche Gesetz(2.1) anwendbar. Wir können damit aus den Verschiebungen x die angelegte Kraft
36
Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology
f berechnen: Nach dem Hookeschen Gesetz gilt
σ = E,
q
∆l
=E ,
a
l
d.h.
also mit (3.7) und (3.1)
aE
aE T
laE T
f = qγ̂ =
∆lγ̂ =
γ̂ xγ̂ =
γ̂γ̂ x
l
l
l2
(3.8)
Dieser Zusammenhang wird auch Steifigkeitsbeziehung genannt, und eröffnet die wesentliche Verbindung zwischen Verschiebungen der Knoten und äußeren Kräften. Bezeichnet man das Volumen
des Stabes mit t,
t := a · l
und führt man die Abkürzungen
cφ := cos φ,
sφ := sin φ
ein, dann schreibt sich die in Gl.(3.8) in eckigen Klammern stehende Matrix als
tE
k := 2
l

(cφ)2






(cφ) (sφ)
(sφ)2 − (cφ) (sφ)
2
− (cφ) (sφ)
2
− (cφ) (sφ)
− (sφ)2
− (cφ)
(cφ) (sφ)
− (cφ)2 − (cφ) (sφ)
(cφ)
(cφ) (sφ)

− (sφ)2 


 ∈ R4×4
(cφ) (sφ) 

(3.9)
(sφ)2
Sie heißt (globale) Elementsteifigkeitsmatrix des zugehörigen Stabes in lokalen Koordinaten. Global
spielt dabei auf den zweidimensionalen Raum an, in den der Stab gelegt wurde, und lokale Koordinaten drücken aus, daß nur der Einzelstab betrachtet wird und nicht ein Verbund von Stäben.
Dies soll nun getan werden.
Betrachten wir ein ebenes Stabwerks, das aus N Knoten und m Stäben besteht, dann gibt es prinzipiell 2 Richtungen, in die sich jeder Knoten verschieben kann. Ein Verschiebungsvektor x̃, der alle
Verschiebung enthält, ist also ein Vektor in R2·N . Er ergibt sich, indem man alle Verschiebungen in
jedem einzelnen Knoten addiert. Notiert man eine an den Knoten des Stabwerks angreifende Kraft
f˜ voraus, dann kann q leicht mit Hilfe der Geometrievektoren aller Stäbe berechnet werden. Die
Stabkräfte lassen dann – unter Annahme der linearen Elastizität – Aufschluß über die physikalische
Belastung jedes Stabes zu.
Wir betrachten nun die sog. Geometrievektoren in globalen Koordinaten
γ̃i ∈ R2N , i = 1, . . . , m,
die für jeden Stab i = 1, . . . , m aus γ̃i durch Auffüllen von Nullen in den Koordinaten entstehen,
die nicht zu den Endknoten von Stab i gehören. (Globale Koordinaten drückt nun aus, daß alle
Verschiebung von allen Knoten gleichzeitig als Vektor im R2N betrachtet werden). Mit diesen
Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology
37
Geometrievektoren schreibt sich das Kräftegleichgewicht(3.7) als
m
X
qi γ̃i = f˜
(3.10)
i=1
Die Steifigkeitsbeziehung (3.8) wird mit den Volumina ti = ai · li der Stäbe i ∈ {1, . . . , m} in
globalen Koordinaten zu
m
X
ti Ei
i=1
li2
γ̃i γ̃iT x̃ = f˜
(3.11)
Damit ein Stabwerk bezüglich einer äußeren Kraft f˜ im Gleichgewicht ist, muß es gewissen sog.
Auflagerbedingungen genügen, in denen es verankert ist. In unserem Modell drückt sich dies darin
aus, daß man einigen Knoten in einer oder in beiden Koordinatenrichtungen keine Verschiebungen
erlaubt. Man kann jede Auflagerbedingung aber auch als entsprechend entgegengerichtete, äußere
Kraft interpretieren, die beliebig groß werden kann. Die zugehörigen Knotenverschiebungen werden
zu Null. Es ist also nicht notwendig, solche Verschiebungen als Variablen im Modell mitzuführen.
Sie werden deshalb aus den Verschiebungsvektoren x̃, den Geometrievektoren γ̃i und den äußeren
Kräften f˜ gestrichen. Man erhält so schließlich die (reduzierten) Geometrievektoren in globalen
Koordinaten
γ1 , . . . , γ m
(3.12)
und die (reduzierten) Elementsteifigkeitsmatrizen in globalen Koordinaten
m
X
ti Ei
i=1
li2
γi γiT x = f
Dabei bezeichnen f und x die Vektoren, die nach der Streichung der fixierten Knotenkoordinaten
aus f˜ und x̃ hervorgehen.
Es bleibt anzumerken, daß die Knotenverschiebungen x als sehr klein angesehen werden, so daß die
Änderung der Geometrie des Fachwerks (z.B. die Winkel der Stäbe, von denen die Geometrievektoren anhängen) vernachlässigt werden kann.
Definition 14. Sei F = (G,E,t) ein Fachwerk. Dann heißt für i = 1, . . . , m die Matrix
Ki :=
ti Ei
γi γiT ∈ Rn×n
li2
„(reduzierte) Elementsteifigkeitsmatrix des Stabes i (im globalen Koordinatensystem)“.
Die Summe aller Elementsteifigkeitsmatrizen
K :=
m
X
i=1
ti
Ei
γi γiT ∈ Rn×n
li2
heißt „Gesamtsteifigkeitsmatrix“ oder einfach „Steifigkeitsmatrix“.
(3.13)
38
Kapitel 3. Fachwerksoptimierung: Sizing, Geometry, Topology
4 Optimierung mit Matlab
In diesem Kapitel wird gezeigt, wie man eine Konstruktion mit Matlab optimieren kann.
4.1 Programmierung
Listing 4.1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Matlab-Funktion batch bruecke3x3.m
% matlab - nojvm - nodisplay -r " batch_bruecke ; quit "
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definition des Bauraum
nelx = 3; % Anzahl Knoten in x - Richtung
nely = 3; % Anzahl Knoten in y - Richtung
% Definition des Gitters
gx0 = 0;
gx1 = 840;
gy0 = 0;
gy1 = 840;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[ knoten , staebe ]= stae bekn oten aufgi tter ( gx0 , gx1 , gy0 , gy1 , nelx , nely ,2) ;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[ kn ,~] = size ( knoten ) ; % Anzahl Knoten
[ sn ,~] = size ( staebe ) ; % Anzahl Stäbe
fprintf ( ’% d ␣ Knoten ␣ und ␣ % d ␣ Staebe .\ n ’ ,kn , sn ) ;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1 Lastfaelle ; unten mitte nach unten
kraefte = zeros (2* kn ,1) ;
k =([1:( nelx -2) ]* nely +1) ;
kraefte (2* k ,1) = -1;
for i =1: length ( k )
fprintf ( ’ Kraft ␣ im ␣ Knoten ␣ % d ␣ auf ␣ der ␣ Richtung ␣ % d .\ n ’ ,k ( i ) ,2* k ( i ) ) ;
end
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
lager = [1 ,2 ,(( nelx -1) * nely +1) *2]; % ein festlager unten links und ein
% loslager unten rechts
fprintf ( ’ gelagerte ␣ Knoten - Richtungen : ␣ ’) ;
for i =1: length ( lager )
fprintf ( ’% d ␣ ’ , lager ( i ) ) ;
end
fprintf ( ’\ n ’) ;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
smax =10;
maxloop = 100;
name = ’ brueckestop ’;
[s ,w , exitflag , zeit , laengen ] = stop ( knoten , staebe , lager , kraefte , smax , maxloop , name ) ;
V = s ’* laengen
39
40
40
41
Kapitel 4. Optimierung mit Matlab
name = ’ brueckesizing ’;
x = sizing ( knoten , staebe , lager , kraefte ,V , maxloop , name ) ;
4.1.1 Definition des Bauraum (Zeile 5 bis 6)
Der Bauraum in der Topologieoptimierung bedeutet hier, daß die gesamte Größe des Konstruktes
in einer rechteckigen Form gebildet wird. Die Zeilen 4 und 5 bedeuten, daß die Anzahl der Knoten
in x- und y- Richtung gleich 3 ist, also nelx = 3 = nely. Hier als Beispiel haben wir die Koordinaten
in x und y Richtung einen Abstand von 840m × 840m (Siehe Abb. 4.1). Natürlich können wir diese
Werte beliebig auswählen.
Abbildung 4.1: Beispiel Bauraum in Achsenkoordinaten hier 840m × 840m
4.1.2 Definition des Gitters (Zeile 7 bis 15)
Hier wird der Bauraum in einem Koordinatensystem betrachtet, damit wir in dem Matlab-Programm
diese Koordinaten eingeben können. Das Beispiel Abb. 4.2 verdeutlicht, wie das Gitter mit den Stäbe nur zwischen benachbarten Knoten kreuzungsfrei aussieht. Wir haben die Anzahl Knoten in x
und y Richtung. Und die Knoten verbinden sich im Bauraum miteinander ohne dabei die Kreuzung zwischen benachbarten Knoten zu queren. Dadurch entsteht das Gitter in x Richtung mit
x = gx = 0 und in y Richtung y = gy = 0. Die Länge des Gitters in x und y Richtung werden
durch gx1 = 840 und gy1 = 840 dargestellt. In Zeile 12 werden die Knoten und Stäbe auf dem
Gitter aufgebaut. Im Klammer an 7. Stelle steht folgende Bedeutung:
0 für „jeder Knoten mit jedem“, d. h.
hier werden alle Knoten durch die Stäben miteinander verbunden
1 für „nur Nachbarknoten “, d. h.
nur Nachbarknoten werden mit Stäben verbunden.
2 für „nur Nachbarknoten kreuzungsfrei“, d. h.
alle rechteckige Form im Bauraum sind kreuzungsfrei
Kapitel 4. Optimierung mit Matlab
41
Die Funktion stäbeknotenaufgitter liefert die Nummerierung der Knoten in folgender Matrix zurück:
k1,1
k1,2


 k2,1

knoten =  .
 ..

k2,2
..
.



 ∈ Rkn ×2



kkn ,1 kkn ,2
mit
i-ter Zeile:
ki,1 : x - Koordinate des i - ten Knoten
ki,2 : y - Koordinate des i - ten Knoten
Dabei werden die Knotennummerierung wie in Tabelle 4.1 gesetzt.
Knotennummer
1
2
3
4
5
6
7
8
9
x − Koordinate
0
0
0
420
420
420
840
840
840
y − Koordinate
0
420
840
0
420
840
0
420
840
Tabelle 4.1: Knotennummerierung für 3 × 3 Knoten kreuzungsfrei
Für die Stabsnummerierung haben wir gleiches Prinzip. Anstelle der x - und y - Koordinaten werden die Knoten als Anfang und Ende des Stabes genutzt.

s1,1
s1,2


 s2,1

Stäbe =  .
 ..

s2,2
..
.



 ∈ Rkn ×2


skn ,1 skn ,2
mit
i-ter Zeile:
ki,1 : Knotennummer, bei der Stab i anfängt
ki,2 : Knotennummer, bei der Stab i endet
In Tabelle 4.2 findet sich die Zuordnung der Knoten zu den Stäbe.
Die beiden Matrizen knoten und Stäbe sehen hier wie folgt aus:
42
Kapitel 4. Optimierung mit Matlab
Stabnummer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Knoten
1
1
1
2
2
3
3
4
4
5
5
5
5
6
7
8
Knoten
2
4
5
3
5
5
6
5
7
6
7
8
9
9
8
9
Tabelle 4.2: Stabnummerierung für 3 × 3 Knoten kreuzungsfrei

1 2

0

 0


 0

420


Knoten = 
420

420


840

840

0


420

840


0 


420
,

820


0 

420

840 840

1


1


2


2

3


3


4
Stäbe = 

4

5


5


5


5

6


7



4


5

3


5


5


6


5


7

6


7


8


9

9


8

8 9
Zur Veranschaulichung trägt man in 4.2 die Knotennummern und Stabnummern in einem Koordinatensystem ein.
Als Beispiel Tab. 4.2 erkennt man, daß der Stab 16 von Knoten 8 zu Knoten 9 geht. Hierbei hat
der Knoten 8 gemäß Tab. 4.1 die Koordinaten (840,420). Analog kann man die Zuordnung aller
weiteren Stäbe ablesen.
Kapitel 4. Optimierung mit Matlab
knoten 3
knoten 6
7
14
43
knoten 9
y=gy1=840
6
10
4
5
12
knoten 8
knoten 2
1
16
13
knoten 5
11
3
15
8
2
9
y=gy0=0
knoten 1
knoten 7
knoten 4
x=gx0=0
x=gx1=840
Abbildung 4.2: Knoten- und Stabnummerierung im Bauraum mit Kreuzungfrei
4.1.3 Angreifende Kräfte an der Konstruktion(Zeile 20 bis 22)
Die Zeile 21 zeigt, welche Knotennummer von der Kraft belastet wird. Die angreifende Kraft können
wir beliebig an jede Position mit Knoten festlegen. Hier als Beispiel (nelx = nely = 3) in Abb.
4.3 lassen wir in der Mitte des Bauraums nach unten belasten. Im Vergleich zu Abb. 4.2 kann
man feststellen, daß die Kraft sich am Knoten 4 = k = (nelx − 2) · nely + 1 befindet und in die
Knotenrichtungsnummer 8 = 2 · k (Zeile 22) zeigt. Die Zeile 22 ist die Feststellung der Richtung
der Kraft. Laut Freiheitgradnummerierung Abb. 4.4 ist die Kraft in y - Koordinaten nach oben
positiv. Wir haben aber hier die Kraftrichtung nach unten, also negativ.
y=840
y=0
x=0
x=840
F
Abbildung 4.3: Angreifende Kraft im Bauraum mit Kreuzungfrei
4.1.4 Festlegung von Lagern im Bauraum (Zeile 27 bis 32)
Nun führen wir zwei Lager im Bauraum Abb. 4.4 (links) ein. Das Festlager befindet sich unten an
der linken Seite und das Loslager unten an der rechten Seite. Der Festlager kann in der Regel Kraft
in x und y Richtung und das Loslager dagegen nur eine Richtung aufnehmen. Hier befinden sich
am Knoten 1 das Festlager und am Knoten 7 das Loslager. Diese können durch die Freiheitsgradnummerierung Abb. 4.4 (rechts) festgelegt werden. Am Knoten 1 ergibt sich die Kraft in Richtung
44
Kapitel 4. Optimierung mit Matlab
1 und 2 sowie am Knoten 7 in Richtung 14 = ((nelx − 1) · nely + 1)·. Dadurch können wir diese
Festlegung in Matlab (Zeile 27) einführen. Es werden also die gelagerten Indizes im Vektorlager
gespeichert. Damit wird die Funktion r siehe Tabelle. 2.7
Zu:
(
[r(v)]j :=
0, falls j ∈ Lager
1, sonst
y=840
6
3
12
5
4
2
y
y=0
6
18
11
10
3
5
17
9
16
9
15
8
x
x=0
2
Lager2
Lager 1
F
8
14
x=840
Knoten 1
1
4
7
7
13
Abbildung 4.4: Bauraum mit angreifender Kraft(links) und Freiheitsgradnummerierung (recht)
Weiter können wir die in der Konstruktion maximale begrenzte Stabdicke smax (Zeile 35) festlegen.
Die maximal Wiederholung der Durchführung des Programms maxloop (Zeile 36) wird auf 10000
Mal bestimmt. Zeile 37 ist die Eingabe des Namens, indem wird das Ergebnis als pdf, fig, und pgn
Datei ausgegeben.
4.1.4.1 Ausgabe der Lösung ( Zeile 37 bis 41)
Unter der Zeile 38 werden eine Topologieoptimierung im Fachwerk durch Stop-Funktion in Matlab
durchgeführt. Dabei wird das Volumen minimiert. Die maximale Belastung in den einzelnen Stäben
werden mittels Geometriematrix gefasst. Die Zeile 37 gibt die Lösungsdatei als „bruckestop“aus.
Die Zeile 39 gibt das Maximalvolumen V an. Es besteht aus Stabsdicken multipliziert mit Stabslänge. Dieser Wert wird an Sizing-Funktion weiter gegeben. Unter der Sizing-Funktion (Zeile 41)
wird eine Topologieoptimierung im Fachwerk durchführt. Die Compliance wird dabei minimiert.
Die Verschiebungen werden anhand Steiffigkeitsmatrix berechnet. Die Zeile 40 gibt anschließend
die Lösungsdatei als „brueckesizing “aus. Nach der Durchführung des Programm erhält man als
Beispiel die optimierte Lösung Abb. 4.5
Abbildung 4.5: Lösungsbeispiel der Optimierung 3x3 Knoten
5 Vergleich der Methoden
In diesem Kapital werden wir das Ergebnis von verschieden Konstruktionen sowie die unterschiedlichen Methode durchführen und analysieren.
5.1 Vergleich der Vernetzung
Als Beispiel wird hier die Brücke genommen. Sie ist ein Bauwerk zum Überspannen von Hindernissen beziehungsweise zum Führen von Verkehrswegen(wie beispielsweise Straße, Schienen, Wasserstraße) oder baulichen Anlagen übernatürliche (wie beispielsweise Flüsse, Meerengen, Schluchten).
Wir führen die für Brückekonstruktion benötigte Knoten und die Stäben in Matlab ein. Das Ergebnis wird durch untere Abbildung in unterschiedlichen Methode gezeigt.
Wir haben hier stets den quadratischen Bauraum in den Abmessungen wie in Abb.4.1 und wählen
unterschiedliche Knoten. Im Knoten 1 mit den Koordination (0,0) ist ein Festlager. Im Knoten
((nelx − 1) · nely + 1) · 2 mit dem Koordinaten (840,0) ist ein Loslager. Die Summe der Kräfte ist
in allen Fallen gleich. In jedem Fall verteilen sich die gleichzeitig wirkenden Kräfte gleichmäßig auf
die Knoten (xf , 0) mit 0 < xf < 840.
45
46
Kapitel 5. Vergleich der Methoden
5.1.1 jeder Knoten mit jedem
Grundstruktur
Ausgewählte Stäbe
Stabdicken
Gesamtes Stabvolumen
3.02e-12 m2
1.68e+03 m2
1.26e+03 m2
1.12e+03 m2
1.05e+03 m2
Anzahl aller Stäbe
6
28
86
200
418
Knoten
2×2
3×3
4×4
5×5
6×6
Gesamtes Stabvolumen
1.02e+03 m2
9.86e+02 m2
9.71e+02 m2
9.50e+02 m2
9.40e+02 m2
Anzahl aller Stäbe
748
1282
2240
3160
4429
Knoten
7×7
8×8
9×9
10 × 10
11 × 11
Ausgewählte Stäbe
Stabdicken
„Jeder Knoten mit jedem Knoten“ bedeutet, daß alle sich im Bauraum befindende Knoten durch
die Stäbe verbunden werden. Die Stäbe in der Grundstruktur kreuzen sich mit zunehmender Knotenzahl immer mehr miteinander. Mit zunehmender Knotenzahl sind sie zu viele bis unerkennbar.
Bei dem Ergebnis haben wir hier die ausgewählte Stäbe in unterschiedlichem Form. Die von der
Kraft nicht belasteten Stäbe werden beim Rechnen nicht berücksichtigt. Man kann bei der Grundstäbe beispielsweise leicht bemerken, daß der obere Teil der optimierte Struktur nicht ausgenutzt
wird. Wenn man dies berücksichtigt, kann man die potenziellen Knoten geeigneter wählen und
somit eine kleinere Problemgröße erreichen. Die Stabdicke zeigt uns, welcher Stab von der Kraft
am meisten überträgt. Je mehr Knoten in Bauraum sind, desto entsteht die Konstruktion für die
Brücke sinnvoller.
Kapitel 5. Vergleich der Methoden
47
5.1.2 Geometriematrix, nur Nachbarknoten
Grundstruktur
Ausgewählte Stäbe
Stabdicken
Gesamtes Stabvolumen
3.02e-12 m2
1.68e+03 m2
1.26e+03 m2
1.19e+03 m2
1.09e+03 m2
Anzahl aller Stäbe
6
20
42
72
110
Knoten
2×2
3×3
4×4
5×5
6×6
Gesamtes Stabvolumen
1.08e+03 m2
1.06e+03 m2
1.05e+03 m2
1.02e+03 m2
1.01e+03 m2
Anzahl aller Stäbe
156
210
272
342
420
Knoten
7×7
8×8
9×9
10 × 10
11 × 11
Ausgewählte Stäbe
Stabdicken
Unter „nur Nachbarknoten“ versteht man, daß sich Knoten sich nur mit nächsten liegenden Knoten
verbindet. Dadurch entsteht die Anzahl der gesamten Stäbe mit zunehmender Knotenzahl in Grundstruktur wesentlich geringer als bei „jeder Knoten mit jedem“. Deshalb ist der Rechnenaufwand in
diesem Fall geringer. Der Stabaufbau der optimierten Konstruktion ergibt sich in unterschiedlicher
Form.
48
Kapitel 5. Vergleich der Methoden
5.1.3 Geometriematrix, nur Nachbarknoten kreuzungsfrei
Grundstruktur
Ausgewählte Stäbe
Stabdicken
gesamte Stabvolumen
2.00e-12 m2
1.68e+03 m2
1.40e+03 m2
1.30e+03 m2
1.17e+03 m2
Anzahl gesamte Stab
5
16
33
56
85
Knoten
2×2
3×3
4×4
5×5
6×6
Gesamtes Stabvolumen
1.17e+03 m2
1.12e+03 m2
1.08e+03 m2
1.07e+03 m2
1.06e+03 m2
Anzahl aller Stäbe
120
161
208
261
320
Knoten
7×7
8×8
9×9
10 × 10
11 × 11
Ausgewählte Stäbe
Stabdicken
Unter der „Nachbarknoten kreuzungsfrei“ Methode versteht man das gleiche Prinzip wie der Nachbarknoten Methode. Nur hier bildet die Stäbe im jeweiligen Rechteck zwischen des nächsten liegenden Knotens keine Kreuzung. Deshalb sind die Stabanzahl in der Grundstruktur in diesem Fall
noch geringer.
5.1.4 Vergleich der Ergebnisse
Nun werden wir das Ergebnis von diesen 3 Methoden vergleichen. Man kann sehen, daß aus diesen 3 Vernetzungsmethoden sich bei der „jeder Knoten mit jedem“ Methode das beste Ergebnis
ergibt. Mit zunehmender Knotenzahl wird die Konstruktion immer sinnvoller erzeugt. Man kann
außerdem noch sehen, daß mit zunehmender Knotenzahl auf Grund der Optimierung das gesamte
Stabvolumen in der Konstruktion geringer wird.
• Laufzeit/Rechenzeit Auf Grund der höheren Stabanzahl bei der „jeder Knoten mit jedem“
Methode in der Grundstruktur ist der Rechnenaufwand höher als bei der „nur Nachbarknoten“ und „nur Nachbarknoten kreuzungsfrei“ Methode. Das Volumen der Konstruktion
nimmt dagegen bei allen Methode mit zunehmender Knotenzahl ab. Das bedeutet, daß die
Konstruktion mit zunehmender Knotenzahl besser optimiert wird. Im Vergleich zu den „nur
Kapitel 5. Vergleich der Methoden
49
Nachbarknoten“ und „nur Nachbarknoten kreuzungsfrei“ Methode hat die „jeder Knoten mit
jedem“ das Volumen bei gleicher Knotenzahl am geringsten. Deshalb ist die Lösung dieser
Methode am besten optimiert.
• Qualität vom Ergebnis Bei der „jeder Knoten mit jedem“ Methode sieht das Ergebnis am
besten aus. Die Bilder sind bei dieser Methode gleichmäßiger und symmetrischer als bei den
anderen Methoden. Deshalb ist es sinnvoller und geeignet für die weitere Anwendung.
50
Kapitel 5. Vergleich der Methoden
5.2 Vergleich von Stop und Sizing
Wir haben die Konstruktion bisher nur mit Stop berechnet. Nun werden wir das Ergebnis von
Sizing (nichtlinear) einführen und mit Stop (linear) vergleichen. Wie vorher schon erklärt, liefert
die „jeder Knoten mit jedem“ Methode das sinnvollste Ergebnis. Deshalb vergleichen wir Stop und
Sizing nur bei dieser Methode.
Methode
Stop
Rechenzeit
0.67s
0.26s
0.27s
0.34s
1.16s
Rechenzeit
3.52s
44.75s
167.86s
902.35s
Compliance
8.400913e-03
6.301097e-03
5.950695e-03
5.460650e-03
2×2
3×3
4×4
5×5
6×6
0.89s
1.45s
1.66s
151.31s
486.58s
Rechenzeit
7147.25s
7286.83s
25291.60s
48004.95s
114046.40s
Compliance
5.460388e-03
5.300424e-03
5.250326e-03
5.133786e-03
5.133585e-03
Knoten
7×7
8×8
9×9
10 × 10
11 × 11
Sizing
Knoten
Stop
Rechenzeit
Sizing
5.2.1 Vergleich der Ergebnisse
Die Ergebnisse von Stop und Sizing sieht in erstem Blick ähnlich aus. Sie sind aber bei Sizing besser
aus folgendem Grund:
Kapitel 5. Vergleich der Methoden
51
• Rechenzeit Die Rechenzeit der Konstruktion ist bei Sizing aufgrund der Nichtlinearität mit
gleicher Knotenzahl viel höher als bei Stop. Mit zunehmender Knotenzahl ändert sich der Rechenzeitaufwand bei Stop aufgrund der Linearität nur gering, nimmt aber bei Sizing erheblich
zu.
• Qualität Die Qualität der Ergebnisse sind bei Stop relativ schlecht. Sie sind im Vergleich
zu den Ergebnisse von Sizing unsymmetrisch und ungleichmäßig (vgl. 7 × 7 Knoten). Mit
zunehmender Knotenzahl sind die Ergebnisse von Sizing symmetrischer und gleichmäßiger
und auf Grund der Nichtlinearitäten ist die Rechenform robuster.
Literaturverzeichnis
[1] ACHTZIGER, Wolfgang Optimierung von einfach und mehrfach belateten Stabwerken. Universität Bayreuth, 1993 (Bayreuther Mathematische Schriften 46). ISSN 0172-1062.-Doktorarbeit
[2] MARTI,Kurt; GRÖGER;Detlef:Stochastische Strukturoptimierung von Stab- und Balkentragwerken. Berlin, Heidelberg : Springer,2006.-ISBN 3-540-260382-2
[3] BEETON,Barbara: What is TEX
http://wwwtug.org/docs/,html/ptr-faq.html. Versi-
on:Mai2001, Abruf:23.Juli 2008
[4] ROZVANY, G.I.N.(1989), Structrual Design via Optimality Criteria Kluwer, Dordrecht.
[5] KIRSCH, U. (1990), On the Relationship between Optimum Structural Topologies and Geometries, Structural Optimization 2, 39-45.
I
II
Literaturverzeichnis
Abbildungsverzeichnis
2.1
Beispiel eines Fachwerks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2
Spannungs-Dehnungs-Diagramm für idealisiertes Material . . . . . . . . . . . . . . . 13
2.3
Spannungs-Dehunngs-Diagramm für weichen Stahl . . . . . . . . . . . . . . . . . . . 14
2.4
Belastung eines Knotens,gegeben (a) durch angreifende Kraft f oder (b) durch vorgegebene Verschiebung U . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.5
Beispiel für Festlager und Freilager bzgl. x und y Richtung . . . . . . . . . . . . . . . 18
2.6
Grundstruktur einer Bogenbrücke(Seitenteil) . . . . . . . . . . . . . . . . . . . . . . 21
3.1
Beispiel einer Grundstruktur für das Sizing-Problem . . . . . . . . . . . . . . . . . . 23
3.2
Als sizing-Problem optimierte Struktur . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3
Start-Grundstruktur für das Geometry-Problem . . . . . . . . . . . . . . . . . . . . . 24
3.4
Als Geometry-Problem optimierte Grundstruktur . . . . . . . . . . . . . . . . . . . . 25
3.5
Als Geometry-Problem optimiertes Fachwerk . . . . . . . . . . . . . . . . . . . . . . 25
3.6
Grundstruktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.7
Als Topology-Problem optimierte Struktur vgl.Abs 5.1.1 7 × 7 Knoten . . . . . . . . 27
3.8
Platzierung eines Stabes in der Ebene . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.9
Stabwerk bestehend aus 3 Stäben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.10 ohne diagonal Stab im Rahmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.11 mit diagonalem Stab im Rahmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.1
Beispiel Bauraum in Achsenkoordinaten hier 840m × 840m . . . . . . . . . . . . . . 40
4.2
Knoten- und Stabnummerierung im Bauraum mit Kreuzungfrei . . . . . . . . . . . . 43
4.3
Angreifende Kraft im Bauraum mit Kreuzungfrei . . . . . . . . . . . . . . . . . . . . 43
4.4
Bauraum mit angreifender Kraft(links) und Freiheitsgradnummerierung (recht) . . . 44
4.5
Lösungsbeispiel der Optimierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
III
IV
Abbildungsverzeichnis
Tabellenverzeichnis
2.1
Materialeigenschaft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2
Zeichenerklärung für die Darstellung von Stabwerken . . . . . . . . . . . . . . . . . . 21
3.1
Zusammenfassenden Überblick (S Steht für sizing, G für Geometry und T für Topology 26
4.1
Knotennummerierung für 3 × 3 Knoten kreuzungsfrei . . . . . . . . . . . . . . . . . 41
4.2
Stabnummerierung für 3 × 3 Knoten kreuzungsfrei . . . . . . . . . . . . . . . . . . . 42
V
VI
Tabellenverzeichnis
Anhang
sizing
Listing 5.1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Matlab-Funktion sizing.m
function x = sizing ( knoten , staebe , lager , kraefte ,V , maxloop , name )
% function x = sizing ( knoten , staebe , lager , kraefte ,V , maxloop , name )
%
% Autor : Daniel Mohr
% Datum : 2009 -10 -28
% Lizenz : GNU GENERAL PUBLIC LICENSE , Version 3 , 29 June 2007
%
% knoten ist vektor mit
%
knoten (k ,:) sind die knoten
%
knoten (: ,1) sind die x - Koordinaten
%
knoten (: ,2) sind die y - Koordinaten
%
% staebe ist vektor der staebe mit
%
staebe (s ,:) sind die stabnummern
%
staebe (: ,1) sind die ersten knoten
%
stab (: ,2) sind die zweiten knoten
%
% lager
Sind die Nummern der gelagerten Knoten
%
% kraefte sind die Kraefte als Vektor auf den Knotenrichtungen
%
% V ist das Maximalvolumen
%
% maximales Volumen
%
% Es wird eine Topologieoptimierung im Fachwerk
% durchgefuehrt . Dabei wird die Compliance minimiert . Mittels
% S t e if f igkeitsmatrix werden die Verschiebungen berechnet .
%
% Copyright ( C ) 2009 Daniel Mohr
% This program is free software ; you can redistribute it and / or
% modify it under the terms of the GNU General Public License as
% published by the Free Software Foundation ; either version 3 of
% the License , or ( at your option ) any later version .
%
% This program is distributed in the hope that it will be useful ,
% but WITHOUT ANY WARRANTY ; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
% General Public License for more details .
%
% You should have received a copy of the GNU General Public License
VII
VIII
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
Tabellenverzeichnis
% along with this program ; if not , see
% http :// www . gnu . org / licenses /
% INITIALIZE
[ kn , kr ]= size ( knoten ) ;
[ sn , sr ]= size ( staebe ) ;
[ kkn , nl ] = size ( kraefte ) ;
sl = stablaengen ( knoten , staebe ) ;
nel = kn * kr ;
% alle Stäbe bekommen das gleiche Volumen
fprintf ( ’ gleiches ␣ Volumen ␣ als ␣ Startwert ␣ fuer ␣ % d ␣ Staebe .\ n ’ , sn ) ;
volfrac = V / sn ;
x = sparse ( sn ,1) ;
for i =1: sn
x ( i ) = volfrac / sl ( i ) ;
end
c = zf (x , nel , knoten , staebe , kraefte , lager , sn ) ;
ausgabe (0 ,c ,x , sl ,0 ,0 ,0) ;
% alle Stäbe bekommen die gleiche Dicke
% disp ( ’ gleiche Dicke als Startwert ’) ;
% volfrac = V / sum ( sl ) ;
% x = volfrac * ones ( sn ,1) ;
% c = zf (x , nel , knoten , staebe , kraefte , lager , sn ) ;
% ausgabe (0 ,c ,x , sl ,0 ,0 ,0) ;
% Zielfunktion
zfanonym = @ ( x ) zf (x , nel , knoten , staebe , kraefte , lager , sn ) ;
% lineare Nebenbedingung ( Ungleichung ) A x <= b
A = [];
b = [];
% lineare Nebenbedingung ( Gleichung ) Aeq x = beq
% sl ’ * x = V
Aeq = sl ’;
beq = V ;
% Boxbedingung xlb <= x <= xub
% (n -1) * xmin <= nrho_i <= xmax - xmin
xlb = volfrac *1 e -6* ones ( sn ,1) ;
xub = V * ones ( sn ,1) ;
funccount = 0;
loop = 0;
% Optimiere
options = optimset () ;
% options = optimset ( options , ’ Algorithm ’ , ’ active - set ’) ;
options = optimset ( options , ’ Algorithm ’ , ’ interior - point ’) ;
options = optimset ( options , ’ Diagnostics ’ , ’ on ’ , ’ Display ’ , ’ iter ’) ;
options = optimset ( options , ’ GradObj ’ , ’ on ’) ;
options = optimset ( options , ’ MaxIter ’ , maxloop ) ;
Tabellenverzeichnis
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
IX
options = optimset ( options , ’ MaxFunEvals ’ ,( sn * maxloop ) ^2) ;
options = optimset ( options , ’ TolFun ’ ,1e -16) ;
options = optimset ( options , ’ TolCon ’ ,1e -16) ;
options = optimset ( options , ’ TolX ’ ,1e -16) ;
options = optimset ( options , ’ UseParallel ’ , ’ always ’) ;
% options = optimset ( options , ’ ScaleProblem ’ , ’ none ’) ;
% options = optimset ( options , ’ Hessian ’ , ’ bfgs ’) ;
% options = optimset ( options , ’ Hessian ’ ,{ ’ lbfgs ’ ,10}) ;
% options = optimset ( options , ’ Hessian ’ ,{ ’ lbfgs ’ ,100}) ;
% options = optimset ( options , ’ Hessian ’ , ’ fin - diff - grads ’) ;
% options = optimset ( options , ’ SubproblemAlgorithm ’ , ’ cg ’) ;
tic ;
options = optimset ( options , ’ MaxIter ’ , round ( length ( x ) /10) ) ;
options = optimset ( options , ’ Hessian ’ ,{ ’ lbfgs ’ , round ( sqrt ( length ( x ) ) ) }) ;
[x ,z , exitflag , output ] = fmincon ( zfanonym ,x ,A ,b , Aeq , beq , xlb , xub ,[] , options ) ;
options = optimset ( options , ’ MaxIter ’ , maxloop ) ;
options = optimset ( options , ’ Hessian ’ , ’ bfgs ’) ; % default
options = optimset ( options , ’ InitT rust Regi onRad ius ’ , sqrt ( sqrt ( length ( x ) ) ) ) ;
options = optimset ( options , ’ SubproblemAlgorithm ’ , ’ cg ’) ;
[x ,z , exitflag , output ] = fmincon ( zfanonym ,x ,A ,b , Aeq , beq , xlb , xub ,[] , options ) ;
zeit = toc ;
loop = loop + output . iterations ;
change = output . stepsize ;
funccount = funccount + output . funcCount ;
c = zf (x , nel , knoten , staebe , kraefte , lager , sn ) ;
ausgabe ( loop ,c ,x , sl , change , zeit , loop ) ;
if exitflag >0
% Loesung gefunden
fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fprintf ( ’ Loesung ␣ in ␣ % d ␣ Iterationen ␣ mit ␣ % s ␣ gefunden : ␣ exitflag ␣ = ␣ %d , ␣ zeit ␣ = ␣ % d \ n
’ , output . iterations , output . algorithm , exitflag , zeit ) ;
fprintf ( ’ Compliance : ␣ % e \ n ’ ,c ) ;
fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fid = fopen ( sprintf ( ’% s . txt ’ , name ) , ’ at ’) ;
fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # # \ n ’) ;
fprintf ( fid , ’ Loesung ␣ in ␣ % d ␣ Iterationen ␣ mit ␣ % s ␣ gefunden : ␣ exitflag ␣ = ␣ %d , ␣ zeit ␣ = ␣
% d \ n ’ , output . iterations , output . algorithm , exitflag , zeit ) ;
fprintf ( fid , ’ Compliance : ␣ % e \ n ’ ,c ) ;
fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # # \ n ’) ;
fclose ( fid ) ;
else
% keine Loesung gefunden
fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fprintf ( ’ Keine ␣ Loesung ␣ in ␣ % d ␣ Iterationen ␣ mit ␣ % s ␣ gefunden : ␣ exitflag ␣ = ␣ %d , ␣ zeit ␣
= ␣ % d \ n ’ , output . iterations , output . algorithm , exitflag , zeit ) ;
fprintf ( ’ Compliance : ␣ % e \ n ’ ,c ) ;
fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fid = fopen ( sprintf ( ’% s . txt ’ , name ) , ’ at ’) ;
fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # # \ n ’) ;
fprintf ( fid , ’ Keine ␣ Loesung ␣ in ␣ % d ␣ Iterationen ␣ mit ␣ % s ␣ gefunden : ␣ exitflag ␣ = ␣ %d , ␣
zeit ␣ = ␣ % d \ n ’ , output . iterations , output . algorithm , exitflag , zeit ) ;
fprintf ( fid , ’ Compliance : ␣ % e \ n ’ ,c ) ;
X
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
Tabellenverzeichnis
fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fclose ( fid ) ;
end
save ( sprintf ( ’% s . mat ’ , name ) , ’ knoten ’ , ’ staebe ’ , ’ lager ’ , ’ kraefte ’ , ’V ’ , ’ maxloop ’ , ’
name ’ , ’x ’ , ’z ’ , ’ exitflag ’ , ’ output ’ , ’c ’) ;
bilderzeugen ( knoten , staebe ,x , max ( x ) /100 , sprintf ( ’% s ’ , name ) ) ;
bilderzeugen ( knoten , staebe ,x , max ( x ) /100 , sprintf ( ’ ns_ % s ’ , name ) ,1 ,1) ;
bilderzeugen ( knoten , staebe , ones ( size ( x ) ) ,1 , sprintf ( ’ as_ % s ’ , name ) ,1 ,1) ;
end
function [c , rdc ] = zf (x , nel , knoten , staebe , kraefte , lager , sn )
[ kkn , nl ] = size ( kraefte ) ;
% FE - ANALYSIS
[ U ]= FE ( nel , knoten , staebe ,x , kraefte , lager ) ;
% Compliance
c = trace ( kraefte ’ * U ) ;
% c = trace (U ’ * KE ( knoten , staebe , x ) * U ) ;
% c =0;
% Ableitung der Compliance : dc = U ’ * dK * U
dc = zeros ( sn ,1) ;
for s = 1: sn
edof = [2* staebe (s ,1) -1; 2* staebe (s ,1) ; 2* staebe (s ,2) -1; 2* staebe (s ,2) ];
for i = 1: nl % Ableitungen fuer jeden Lastfall
Ue = U ( edof , i ) ;
dc ( s ) = dc ( s ) - Ue ’ * lke ( knoten , staebe (s ,1) , staebe (s ,2) ) * Ue ;
% c = c + x ( s ) * Ue ’* lke ( knoten , staebe (s ,1) , staebe (s ,2) ) * Ue ;
end
end
if nargout > 1
rdc = full ( dc ) ;
end
c = full ( c ) ;
end
function ausgabe ( loop ,c ,x , sl , change , zeit , intervall )
if (( mod ( loop , intervall ) == 0) || ( loop == 1) )
fprintf ( ’ It .: ␣ %4 i ␣ ’ , loop ) ;
fprintf ( ’ Obj . Compliance : ␣ %10.5 f ␣ ’ ,c ) ;
% fprintf ( ’ Vol .: %6.3 f ’, sum ( sum ( x ) ) ) ;
fprintf ( ’ Vol .: ␣ %6.3 f ␣ ’ ,x ’* sl ) ;
fprintf ( ’ ch .: ␣ %6.4 f ␣ ’ , change ) ;
fprintf ( ’ toc : ␣ %4.1 f \ n ’ , zeit ) ;
end
end
% %%%%%%%%% FE - ANALYSIS % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
function [ U ]= FE ( nel , knoten , staebe ,x , kraefte , fixeddofs )
K = KE ( knoten , staebe , x ) ;
alldofs
freedofs
% SOLVING
= [1: nel ];
= setdiff ( alldofs , fixeddofs ) ;
U ( freedofs ,:) = K ( freedofs , freedofs ) \ kraefte ( freedofs ,:) ;
U ( fixeddofs ,:) = 0;
Tabellenverzeichnis
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
% U ( isnan ( U ) ) =0
end
% %%%%%%%%% ELEMENT STIFFNESS MATRIX % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
function K = KE ( knoten , staebe , x )
% x sind die Stabdicken
[ kn , kr ]= size ( knoten ) ;
[ sn , sr ]= size ( staebe ) ;
nel = kn * kr ;
K = sparse ( nel , nel ) ;
% K = zeros ( nel , nel ) ;
for s = 1: sn
edof = [2* staebe (s ,1) -1; 2* staebe (s ,1) ; 2* staebe (s ,2) -1; 2* staebe (s ,2) ];
K ( edof , edof ) = K ( edof , edof ) + x ( s ) * lke ( knoten , staebe (s ,1) , staebe (s ,2) ) ;
end
end
function KE = lke ( knoten ,a , b )
ax = knoten (a ,1) ;
ay = knoten (a ,2) ;
bx = knoten (b ,1) ;
by = knoten (b ,2) ;
dx = ax - bx ;
dy = ay - by ;
if dx ~= 0
if dy ~= 0
phi = atan ( dy / dx ) ;
c = cos ( phi ) ;
s = sin ( phi ) ;
else
phi =0;
c =1;
s =0;
end
else
phi = pi /2;
c =0;
s =1;
end
l = sqrt ( dx ^2+ dy ^2) ;
E = 2 e5 ;
% E l e m e n t s t e i f i g k e i t s m a t r i x für Stabdicken als Designvariablen
KE =( E / l ) * [ c ^2 c * s -c ^2 -c * s
c * s s ^2 -c * s -s ^2
-c ^2 -c * s c ^2 c * s
-c * s -s ^2 c * s s ^2];
end
function laengen = stablaengen ( knoten , staebe )
[ kn , kr ]= size ( knoten ) ;
[ sn , sr ]= size ( staebe ) ;
laengen = zeros ( sn ,1) ;
XI
XII
245
246
247
248
249
250
251
252
253
254
255
256
for s = 1: sn
a = staebe (s ,1) ;
b = staebe (s ,2) ;
ax = knoten (a ,1) ;
ay = knoten (a ,2) ;
bx = knoten (b ,1) ;
by = knoten (b ,2) ;
dx = ax - bx ;
dy = ay - by ;
laengen ( s ) = sqrt ( dx ^2+ dy ^2) ;
end
end
Tabellenverzeichnis
Tabellenverzeichnis
XIII
stop
Listing 5.2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Matlab-Funktion stop.m
function [s ,w , exitflag , zeit , laengen ]= stop ( knoten , staebe , lager , kraefte , smax , maxloop
, name )
% function [s ,w , exitflag , zeit , laengen ]= stop ( knoten , staebe , lager , kraefte , smax ,
maxloop , name )
%
% Autor : Daniel Mohr
% Datum : 2010 -04 -19 ( letzte Aenderung )
% Lizenz : GNU GENERAL PUBLIC LICENSE , Version 3 , 29 June 2007
%
% knoten
ist Vektor mit
%
knoten (k ,:) sind die knoten
%
knoten (: ,1) sind die x - Koordinaten
%
knoten (: ,2) sind die y - Koordinaten
%
1 <= k <= kn ; es gibt also kn Knoten
% staebe
ist Vektor der staebe mit
%
staebe (s ,:) sind die stabnummern
%
staebe (: ,1) sind die ersten knoten
%
staebe (: ,2) sind die zweiten knoten
%
1 <= s <= sn ; es gibt also sn Staebe
% lager
Sind die Nummern der gelagerten Knoten
% kraefte sind die Kraefte
%
kraefte (: , k ) sind die Kraefte des k - ten Lastfalles
%
1 <= k <= nl ; es gibt also nl Lastfaelle
% smax
maximale Stabdicke
% maxloop maximale Anzahl an Iterationen , 10000 ist durchaus sinnvoll
% name
Dateinamenanfang
%
% s
Stabdicken
% w
Belastungen dieser Staebe in allen Lastfaellen
%
% Es wird eine Topologieoptimierung im Fachwerk
% durchgefuehrt . Dabei wird das Volumen minimiert . Mittels
% Geometriematrix wird die maximale Belastung in den einzelnen
% Staeben gefasst .
%
% Copyright ( C ) 2009 Daniel Mohr
% This program is free software ; you can redistribute it and / or
% modify it under the terms of the GNU General Public License as
% published by the Free Software Foundation ; either version 3 of
% the License , or ( at your option ) any later version .
%
% This program is distributed in the hope that it will be useful ,
% but WITHOUT ANY WARRANTY ; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
% General Public License for more details .
%
% You should have received a copy of the GNU General Public License
% along with this program ; if not , see
XIV
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
Tabellenverzeichnis
% http :// www . gnu . org / licenses /
fprintf ( ’ stop ␣ gestartet \ n ’) ;
sigma = 1;
sigmamin = - sigma ;
sigmamax = + sigma ;
[ kn , kr ] = size ( knoten ) ;
[ sn , sr ] = size ( staebe ) ;
[ kkn , nl ] = size ( kraefte ) ;
laengen = stablaengen ( knoten , staebe ) ;
fprintf ( ’ stablaengen ␣ fertig \ n ’) ;
C = geometriematrix ( knoten , staebe ) ;
fprintf ( ’ geometriematrix ␣ fertig \ n ’) ;
freedofs = setdiff ([1:2* kn ] , lager ) ;
C = C ( freedofs ,:) ;
[ nC , mC ] = size ( C ) ;
% Startwerte
w = ones ( nl * sn ,1) ;
s = ones ( sn ,1) ;
[ nw , mw ] = size ( w ) ;
[ ns , ms ] = size ( s ) ;
% Zielfunktion : c ^ T x
z = [ sparse ( nw ,1) ; laengen ];
% Nebenbedingung : Aeq x = beq
fprintf ( ’ Nebenbedingung : ␣ Aeq ␣ x ␣ = ␣ beq \ n ’) ;
Aeq = sparse (0 ,0) ;
beq = sparse (0 ,0) ;
Ah0 = sparse ( nC , ns ) ;
for k = 1: nl % fuer alle Lastfaelle
Ah1 = [ sparse ( nC ,( k -1) * mC ) ,C , sparse ( nC ,( nl - k ) * mC ) ];
Aeq = [ Aeq ;[ Ah1 , Ah0 ]];
beq = [ beq ; kraefte ( freedofs , k ) ];
end
Ah0 = [];
Ah1 = [];
[ nAeqi , nAeqj ] = size ( Aeq ) ;
% Nebenbedingung : A x <= b
fprintf ( ’ Nebenbedingung : ␣ A ␣ x ␣ <= ␣ b \ n ’) ;
A = sparse (0 ,0) ;
b = sparse (0 ,0) ;
% sigmamin s_i <= w_i <= sigmamax s_i
% Ah0 = eye ( sn ) ;
Ah0 = sparse ([1: sn ] ,[1: sn ] , ones ( sn ,1) ,sn , sn , sn ) ;
for k = 1: nl % fuer alle Lastfaelle
Ah1 = [ sparse ( sn ,( k -1) * sn ) ,Ah0 , sparse ( sn ,( nl - k ) * sn ) ];
% sigmamin s_i <= w_i
A = [ A ;[ - Ah1 , sigmamin * Ah0 ]];
b = [ b ; sparse ( sn ,1) ];
% w_i <= sigmamax s_i
Tabellenverzeichnis
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
XV
A = [ A ;[ Ah1 , - sigmamax * Ah0 ]];
b = [ b ; sparse ( sn ,1) ];
end
Ah0 = [];
Ah1 = [];
fprintf ( ’ fertig ␣ mit ␣ Nebenbedingung : ␣ A ␣ x ␣ <= ␣ b \ n ’) ;
% Grenzen
% sigmamin smax <= w_i <= sigmamax smax
lb = sigmamin * smax * ones ( length ( w ) ,1) ;
ub = sigmamax * smax * ones ( length ( w ) ,1) ;
% 0 <= s_i <= smax
lb =[ lb ; sparse ( length ( s ) ,1) ];
ub =[ ub ; smax * ones ( length ( s ) ,1) ];
% Informationen ausgeben
[ nAi , nAj ] = size ( A ) ;
fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fprintf ( ’% d ␣ Knoten ␣ und ␣ % d ␣ Staebe .\ n ’ ,kn , sn ) ;
fprintf ( ’% d ␣ Lastfaelle .\ n ’ , nl ) ;
fprintf ( ’% d ␣ dofs ␣ -␣ % d ␣ Lager ␣ = ␣ % d ␣ Freiheitsgrade ␣ und ␣ % d ␣ Staebe .\ n ’ ,2* kn , length (
lager ) ,nC , mC ) ;
fprintf ( ’% d ␣ Unbekannte ␣ fuer ␣ Kraefte ␣ w .\ n ’ , length ( w ) ) ;
fprintf ( ’% d ␣ Unbekannte ␣ fuer ␣ Stabdicken ␣ s .\ n ’ , length ( s ) ) ;
fprintf ( ’␣ ergibt ␣ % d ␣ Unbekannte .\ n ’ , length ( w ) + length ( s ) ) ;
fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fprintf ( ’% d ␣ Ungleichungen ␣ fuer ␣ % d ␣ Unbekannte ␣ mit ␣ % d ␣ rechter ␣ Seite .\ n ’ ,nAi , nAj ,
length ( b ) ) ;
fprintf ( ’% d ␣ Gleichungen ␣ fuer ␣ % d ␣ Unbekannte ␣ mit ␣ % d ␣ rechter ␣ Seite .\ n ’ , nAeqi , nAeqj ,
length ( beq ) ) ;
fprintf ( ’% d ␣ untere ␣ Grenzen ␣ und ␣ % d ␣ obere ␣ Grenzen .\ n ’ , length ( lb ) , length ( ub ) ) ;
fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fid = fopen ( sprintf ( ’% s . txt ’ , name ) , ’ at ’) ;
fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fprintf ( fid , ’% d ␣ Knoten ␣ und ␣ % d ␣ Staebe .\ n ’ ,kn , sn ) ;
fprintf ( fid , ’% d ␣ Lastfaelle .\ n ’ , nl ) ;
fprintf ( fid , ’% d ␣ dofs ␣ -␣ % d ␣ Lager ␣ = ␣ % d ␣ Freiheitsgrade ␣ und ␣ % d ␣ Staebe .\ n ’ ,2* kn , length (
lager ) ,nC , mC ) ;
fprintf ( fid , ’% d ␣ Unbekannte ␣ fuer ␣ Kraefte ␣ w .\ n ’ , length ( w ) ) ;
fprintf ( fid , ’% d ␣ Unbekannte ␣ fuer ␣ Stabdicken ␣ s .\ n ’ , length ( s ) ) ;
fprintf ( fid , ’␣ ergibt ␣ % d ␣ Unbekannte .\ n ’ , length ( w ) + length ( s ) ) ;
fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fprintf ( fid , ’% d ␣ Ungleichungen ␣ fuer ␣ % d ␣ Unbekannte .\ n ’ ,nAi , nAj ) ;
fprintf ( fid , ’% d ␣ Gleichungen ␣ fuer ␣ % d ␣ Unbekannte .\ n ’ , nAeqi , nAeqj ) ;
fprintf ( fid , ’% d ␣ untere ␣ Grenzen ␣ und ␣ % d ␣ obere ␣ Grenzen .\ n ’ , length ( lb ) , length ( ub ) ) ;
fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fclose ( fid ) ;
% optimiere
options = optimset () ;
options = optimset ( options , ’ Display ’ , ’ off ’) ;
options = optimset ( options , ’ LargeScale ’ , ’ on ’ , ’ Simplex ’ , ’ off ’) ;
options = optimset ( options , ’ MaxIter ’ , maxloop ) ;
% options = optimset ( options , ’ TolFun ’ ,1e -16) ; % zu klein , funktioniert nicht
options = optimset ( options , ’ TolFun ’ ,1e -14) ;
XVI
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
Tabellenverzeichnis
options = optimset ( options , ’ Diagnostics ’ , ’ on ’ , ’ Display ’ , ’ iter ’) ;
tic ;
[x , fval , exitflag , output , lambda ] = linprog (z ,A ,b , Aeq , beq , lb , ub ,[] , options ) ;
% [x , fval , exitflag , output , lambda ] = linprog (z ,A ,b , Aeq , beq , lb , ub ) ;
zeit = toc ;
w = x (1: nw ) ;
s = x ( nw +1: nw + ns ) ;
if exitflag == 1
% Loesung gefunden
fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fprintf ( ’ Loesung ␣ in ␣ % d ␣ Iterationen ␣ mit ␣ % s ␣ gefunden : ␣ exitflag ␣ = ␣ %d , ␣ zeit ␣ = ␣ % d \ n
’ , output . iterations , output . algorithm , exitflag , zeit ) ;
%
fprintf ( ’ Volumen : % e \n ’ , sum ( s ) ) ;
fprintf ( ’ Volumen : ␣ % e \ n ’ ,s ’* laengen ) ;
fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fid = fopen ( sprintf ( ’% s . txt ’ , name ) , ’ at ’) ;
fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fprintf ( fid , ’ Loesung ␣ in ␣ % d ␣ Iterationen ␣ mit ␣ % s ␣ gefunden : ␣ exitflag ␣ = ␣ %d , ␣ zeit ␣ = ␣
% d \ n ’ , output . iterations , output . algorithm , exitflag , zeit ) ;
fprintf ( fid , ’ Volumen : ␣ % e \ n ’ ,s ’* laengen ) ;
fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fclose ( fid ) ;
else
% keine Loesung gefunden
fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fprintf ( ’ Keine ␣ Loesung ␣ in ␣ % d ␣ Iterationen ␣ mit ␣ % s ␣ gefunden : ␣ exitflag ␣ = ␣ %d , ␣ zeit ␣
= ␣ % d \ n ’ , output . iterations , output . algorithm , exitflag , zeit ) ;
fprintf ( ’ Volumen : ␣ % e \ n ’ ,s ’* laengen ) ;
fprintf ( ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fid = fopen ( sprintf ( ’% s . txt ’ , name ) , ’ at ’) ;
fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fprintf ( fid , ’ Keine ␣ Loesung ␣ in ␣ % d ␣ Iterationen ␣ mit ␣ % s ␣ gefunden : ␣ exitflag ␣ = ␣ %d , ␣
zeit ␣ = ␣ % d \ n ’ , output . iterations , output . algorithm , exitflag , zeit ) ;
fprintf ( fid , ’ Volumen : ␣ % e \ n ’ ,s ’* laengen ) ;
fprintf ( fid , ’ # # ## # # # ## # # # ## # # # ## # # # #\ n ’) ;
fclose ( fid ) ;
end
save ( sprintf ( ’% s . mat ’ , name ) , ’ knoten ’ , ’ staebe ’ , ’ lager ’ , ’ kraefte ’ , ’ smax ’ , ’ maxloop ’ , ’
name ’ , ’x ’ , ’s ’ , ’w ’ , ’ fval ’ , ’ exitflag ’ , ’ output ’ , ’ lambda ’) ;
bilderzeugen ( knoten , staebe ,s , max ( s ) /100 , sprintf ( ’% s ’ , name ) ) ;
bilderzeugen ( knoten , staebe ,s , max ( s ) /100 , sprintf ( ’ ns_ % s ’ , name ) ,1 ,1) ;
bilderzeugen ( knoten , staebe , ones ( size ( s ) ) ,1 , sprintf ( ’ as_ % s ’ , name ) ,1 ,1) ;
end
% %% % % % % % % % % % % % %%% %% %% %%
function laengen = stablaengen ( knoten , staebe )
[ kn , kr ]= size ( knoten ) ;
[ sn , sr ]= size ( staebe ) ;
laengen = zeros ( sn ,1) ;
for s = 1: sn
a = staebe (s ,1) ;
b = staebe (s ,2) ;
ax = knoten (a ,1) ;
Tabellenverzeichnis
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
ay = knoten (a ,2) ;
bx = knoten (b ,1) ;
by = knoten (b ,2) ;
dx = ax - bx ;
dy = ay - by ;
laengen ( s ) = sqrt ( dx ^2+ dy ^2) ;
end
end
% % % % % % % % %% %% %% %% %%% %% %%
function C = geometriematrix ( knoten , staebe )
[ kn , kr ]= size ( knoten ) ;
[ sn , sr ]= size ( staebe ) ;
C = sparse (2* kn , sn ) ;
for s = 1: sn
a = staebe (s ,1) ;
b = staebe (s ,2) ;
ax = knoten (a ,1) ;
ay = knoten (a ,2) ;
bx = knoten (b ,1) ;
by = knoten (b ,2) ;
dx = ax - bx ;
dy = ay - by ;
if dx ~= 0
if dy ~= 0
phi = atan ( dy / dx ) ;
wc = cos ( phi ) ;
ws = sin ( phi ) ;
else
phi =0;
wc =1;
ws =0;
end
else
phi = pi /2;
wc =0;
ws =1;
end
C (2* a -1 , s ) = C (2* a -1 , s ) - wc ;
C (2* a , s ) = C (2* a , s ) - ws ;
C (2* b -1 , s ) = C (2* b -1 , s ) + wc ;
C (2* b , s ) = C (2* b , s ) + ws ;
end
end
XVII
XVIII
Tabellenverzeichnis
stäbeknotenaufgitter
Listing 5.3:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Matlab-Funktion staebeknotenaufgitter.m
function [ knoten , staebe ]= sta ebek note naufg itte r ( gx0 , gx1 , gy0 , gy1 , nelx , nely , art )
% function [ knoten , staebe ]= stae bekn oten aufgi tter ( gx0 , gx1 , gy0 , gy1 , nelx , nely , art )
%
% Es werden Knoten und Staebe erstellt .
%
% Autor : Daniel Mohr
% Datum : 2009 -11 -17 ( letzte Aenderung )
% Lizenz : GNU GENERAL PUBLIC LICENSE , Version 3 , 29 June 2007
%
% gx0
Gitterkoordinate x_min
% gx1
Gitterkoordinate x_max
% gy0
Gitterkoordinate y_min
% gy1
Gitterkoordinate y_max
% nelx Anzahl Knoten in x - Richtung
% nely Anzahl Knoten in y - Richtung
% art
beschreibt die Art der Verknüpfung
%
0 : Es werden alle sinnvollen Staebe zwischen allen Knoten
%
erstellt . ( default )
%
also [ viele ] Staebe
%
1 : Es werden Staebe nur zwischen benachbarten Knoten
%
erstellt .
%
also 4*( nelx -1) *( nely -1) +( nelx -1) +( nely -1) Staebe
%
2 : Es werden Staebe nur zwischen benachbarten Knoten
%
kreuzungsfrei erstellt .
%
also 3*( nelx -1) *( nely -1) +( nelx -1) +( nely -1) Staebe
%
% knoten ist vektor mit
%
knoten (k ,:) sind die knoten
%
knoten (: ,1) sind die x - Koordinaten
%
knoten (: ,2) sind die y - Koordinaten
%
% staebe ist vektor der staebe mit
%
staebe (s ,:) sind die stabnummern
%
staebe (: ,1) sind die ersten knoten
%
staebe (: ,2) sind die zweiten knoten
%
% Copyright ( C ) 2009 Daniel Mohr
% This program is free software ; you can redistribute it and / or
% modify it under the terms of the GNU General Public License as
% published by the Free Software Foundation ; either version 3 of
% the License , or ( at your option ) any later version .
%
% This program is distributed in the hope that it will be useful ,
% but WITHOUT ANY WARRANTY ; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
% General Public License for more details .
%
% You should have received a copy of the GNU General Public License
Tabellenverzeichnis
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
XIX
% along with this program ; if not , see
% http :// www . gnu . org / licenses /
if nargin < 7
art = 0;
end
knoten = zeros ( nelx * nely ,2) ;
for elx = 1: nelx
for ely = 1: nely
k = ely + nely *( elx -1) ; % Knotennummer
knoten (k ,1) = ( elx -1) *( gx1 - gx0 ) /( nelx -1) ; % x - Koordinate
knoten (k ,2) = ( ely -1) *( gy1 - gy0 ) /( nely -1) ; % y - Koordinate
end
end
staebe = zeros (( nelx * nely ) ^2 ,2) ;
sn = 1;
art
if art == 0
% art == 0 : Es werden alle sinnvollen Staebe zwischen allen Knoten
%
erstellt .
for elx = 1: nelx
for ely = 1: nely
k1 = ely + nely *( elx -1) ; % Knotennummer
for i = 0: max ( nelx - elx , elx -1) % verbinde mit allen weiteren Knoten
for j = 0: max ( nely - ely , ely -1)
[ rx , ry ] = kuerze (i , j ) ;
if ( rx == i ) && ( ry == j )
if (1 <= elx + rx ) && ( elx + rx <= nelx )
if (1 <= ely + ry ) && ( ely + ry <= nely )
k2 = ( ely + ry ) + nely *(( elx + rx ) -1) ; % Knotennummer
if ( k1 < k2 ) && (( sn == 1) || (( sn > 1) && ((
staebe ( sn -1 ,1) ~= k1 ) || ( staebe ( sn -1 ,2) ~= k2 )
)))
staebe ( sn ,1) = k1 ;
staebe ( sn ,2) = k2 ;
sn = sn + 1;
end
end
if (1 <= ely - ry ) && ( ely - ry <= nely )
k2 = ( ely - ry ) + nely *(( elx + rx ) -1) ; % Knotennummer
if ( k1 < k2 ) && (( sn == 1) || (( sn > 1) && ((
staebe ( sn -1 ,1) ~= k1 ) || ( staebe ( sn -1 ,2) ~= k2 )
)))
staebe ( sn ,1) = k1 ;
staebe ( sn ,2) = k2 ;
sn = sn + 1;
end
end
end
end
XX
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
Tabellenverzeichnis
end % for j
end % for i
end % for ely
end % for elx
elseif art == 1
% art == 1 : Es werden Staebe nur zwischen benachbarten Knoten
%
erstellt .
for elx = 1: nelx
for ely = 1: nely
k1 = ely + nely *( elx -1) ; % Knotennummer
for i = 0:1 % verbinde mit allen weiteren Knoten
for j = 0:1
[ rx , ry ] = kuerze (i , j ) ;
if (1 <= elx + rx ) && ( elx + rx <= nelx )
if (1 <= ely + ry ) && ( ely + ry <= nely )
k2 = ( ely + ry ) + nely *(( elx + rx ) -1) ; % Knotennummer
if ( k1 < k2 ) && (( sn == 1) || (( sn > 1) && (( staebe ( sn
-1 ,1) ~= k1 ) || ( staebe ( sn -1 ,2) ~= k2 ) ) ) )
staebe ( sn ,1) = k1 ;
staebe ( sn ,2) = k2 ;
sn = sn + 1;
end
end
if (1 <= ely - ry ) && ( ely - ry <= nely )
k2 = ( ely - ry ) + nely *(( elx + rx ) -1) ; % Knotennummer
if ( k1 < k2 ) && (( sn == 1) || (( sn > 1) && (( staebe ( sn
-1 ,1) ~= k1 ) || ( staebe ( sn -1 ,2) ~= k2 ) ) ) )
staebe ( sn ,1) = k1 ;
staebe ( sn ,2) = k2 ;
sn = sn + 1;
end
end
end
end % for j
end % for i
end % for ely
end % for elx
else
% art == 2 : Es werden Staebe nur zwischen benachbarten
%
kreuzungsfrei Knoten erstellt .
for elx = 1: nelx
for ely = 1: nely
k1 = ely + nely *( elx -1) ; % Knotennummer
if ( mod ( elx ,2) == mod (1+ nely - ely ,2) )
ii = [0:1];
jj = [ -1:1];
k = 0;
else
ii = [0:1];
jj = [0:1];
k = 1;
end
Tabellenverzeichnis
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
XXI
for i = ii % verbinde mit allen weiteren Knoten
for j = jj
if ( k == 0) || ( i ~= j )
rx = i ;
ry = j ;
if (1 <= elx + rx ) && ( elx + rx <= nelx ) && (1 <= ely + ry ) && (
ely + ry <= nely )
k2 = ( ely + ry ) + nely *(( elx + rx ) -1) ; % Knotennummer
if ( k1 < k2 ) && (( sn == 1) || (( sn > 1) && (( staebe ( sn
-1 ,1) ~= k1 ) || ( staebe ( sn -1 ,2) ~= k2 ) ) ) )
staebe ( sn ,1) = k1 ;
staebe ( sn ,2) = k2 ;
sn = sn + 1;
end
end
end
end % for j
end % for i
end % for ely
end % for elx
end
staebe = staebe (1: sn -1 ,:) ;
size ( staebe )
staebe = unique ( staebe , ’ rows ’) ;
size ( staebe )
end
function [z , n ]= kuerze (z , n )
% function [z , n ]= kuerze (z , n )
%
% Die zahlen z und n werden durch den ggT geteilt .
%
% Autor : Daniel Mohr
% Datum : 2009 -10 -08 ( letzte Aenderung )
if (n <0) && (z <0)
z=-z;
n=-n;
end
if z == 0
n = 1;
elseif n == 0
z = 1;
elseif ( z ~= 1) && ( n ~= 1)
% ggt = gcd (z , n ) ;
ggt = ggT (z , n ) ;
z = z / ggt ;
n = n / ggt ;
end
end
function ggt = ggT (z , n )
% function ggt = ggT (z , n )
XXII
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
Tabellenverzeichnis
%
% Der groesste gemeinsame Teiler ggT von z und n wird mittels Euklid ’ schen
Algorithmus bestimmt .
%
% Autor : Daniel Mohr
% Datum : 2009 -10 -08 ( letzte Aenderung )
%
% Die Funktion gcd von MatLab ist langsamer und maechtiger .
z = abs ( z ) ;
n = abs ( n ) ;
while ( n ~= 0)
tmp = n ;
n = z - floor ( z / n ) * n ;
z = tmp ;
end
ggt = z ;
end
Tabellenverzeichnis
bilderzeugen
Listing 5.4:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Matlab-Funktion bilderzeugen.m
function bilderzeugen ( knoten , stab ,s , smin , name , mindicke , maxdicke )
% function bilderzeugen ( knoten , stab ,s , smin , name )
%
% Autor : Daniel Mohr
% Datum : 2009 -11 -22 ( letzte Aenderung )
% Lizenz : GNU GENERAL PUBLIC LICENSE , Version 3 , 29 June 2007
%
% knoten ist vektor mit
%
knoten (k ,:) sind die knoten
%
knoten (: ,1) sind die x - Koordinaten
%
knoten (: ,2) sind die y - Koordinaten
%
% stab ist vektor der staebe mit
%
stab (s ,:) sind die stabnummern
%
stab (: ,1) sind die erste staebe
%
stab (: ,2) sind die zweiten staebe
%
% s
sind die Stabdicken
% smin
Staebe , die kleiner als smin sind , werden nicht gezeichnet
% name
ist der Name der Datei in die geschrieben wird
% mindicke ist die gezeichnete Mindestdicke , default 1
% maxdicke ist die gezeichnete Maximaldicke , default 10
%
% Es wird das Fachwerk als fig - Grafik erstellt und mittels fig2dev
% als pdf ung png ausgegeben .
%
% bzgl . fig - Format vgl .: http :// www . xfig . org / userman / fig - format . html
%
% Copyright ( C ) 2009 Daniel Mohr
% This program is free software ; you can redistribute it and / or
% modify it under the terms of the GNU General Public License as
% published by the Free Software Foundation ; either version 3 of
% the License , or ( at your option ) any later version .
%
% This program is distributed in the hope that it will be useful ,
% but WITHOUT ANY WARRANTY ; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
% General Public License for more details .
%
% You should have received a copy of the GNU General Public License
% along with this program ; if not , see
% http :// www . gnu . org / licenses /
if nargin < 6
mindicke = 1;
if nargin < 7
maxdicke = 10;
end
XXIII
XXIV
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Tabellenverzeichnis
end
[ kn , kr ]= size ( knoten ) ;
[ sn , sr ]= size ( stab ) ;
minimalwert = min ( s ) ;
maximalwert = max ( s ) ;
% s ( find (s < maximalwert /100) ) =0;
s ( find (s < smin ) ) =0;
% x =10*( x - minimalwert ) /( maximalwert - minimalwert ) +1;
s = skaliere ( mindicke , maxdicke , s ) ;
minimalwert = min ( s ) ;
maximalwert = max ( s ) ;
% x =10* x ;
% x = ones ( size ( x ) ) ;
xmin = min ( knoten (: ,1) ) ;
ymin = min ( knoten (: ,2) ) ;
knoten (: ,1) = knoten (: ,1) - xmin + 10;
knoten (: ,2) = knoten (: ,2) - ymin + 10;
xmin =10;
ymin =10;
xmax = max ( knoten (: ,1) ) +10;
ymax = max ( knoten (: ,2) ) +10;
figymax =1200;
faktor = figymax / max ( xmax , ymax ) ;
fid2 = fopen ( ’ fig2devausfuehren ’ , ’ wt ’) ;
fprintf ( fid2 , ’ #!/ bin / bash \ n ’) ;
fid = fopen ( sprintf ( ’% s . fig ’ , name ) , ’ wt ’) ;
fprintf ( fid , ’# FIG ␣ 3.2\ n ’) ;
fprintf ( fid , ’ Portrait \ n ’) ; % orientation
fprintf ( fid , ’ Center \ n ’) ;
% justification
fprintf ( fid , ’ Metric \ n ’) ;
% units
fprintf ( fid , ’ A4 \ n ’) ;
% papersize
fprintf ( fid , ’ 1.0\ n ’) ;
% magnification
fprintf ( fid , ’ Single \ n ’) ;
% multiple - page
fprintf ( fid , ’ 0\ n ’) ;
% transparent color
fprintf ( fid , ’ 1200 ␣ 1\ n #\ n ’) ;
% resolution coord_system
fprintf ( fid , ’# ␣ Rahmen \ n ’) ;
fprintf ( fid , ’2 ␣ 1 ␣ 0 ␣ 1 ␣ 7 ␣ 0 ␣ 995 ␣ 0 ␣ -1 ␣ 0.000 ␣ 1 ␣ 1 ␣ 0 ␣ 0 ␣ 0 ␣ 5\ n ’) ;
fprintf ( fid , ’\ t \ t % d ␣ % d \ n ’ , faktor *0 , figymax - faktor *0) ;
fprintf ( fid , ’\ t \ t % d ␣ % d \ n ’ , faktor * max ( xmax , ymax ) , figymax - faktor *0) ;
fprintf ( fid , ’\ t \ t % d ␣ % d \ n ’ , faktor * max ( xmax , ymax ) , figymax - faktor * max ( xmax , ymax ) ) ;
fprintf ( fid , ’\ t \ t % d ␣ % d \ n ’ , faktor *0 , figymax - faktor * max ( xmax , ymax ) ) ;
fprintf ( fid , ’\ t \ t % d ␣ % d \ n ’ , faktor *0 , figymax - faktor *0) ;
anzahlstaebe = 0;
for j = 1: sn
if ( s ( j ) >= smin ) && ( round ( s ( j ) ) >= 0.001)
Tabellenverzeichnis
anzahlstaebe = anzahlstaebe + 1;
fprintf ( ’ Stab ␣ % d ␣ (% d ) : ␣ % e \ n ’ ,j , anzahlstaebe , s ( j ) ) ;
fprintf ( fid , ’# ␣ Stab ␣ % d ␣ (% d ) \ n ’ ,j , anzahlstaebe ) ;
fprintf ( fid , ’2 ␣ 1 ␣ 0 ␣ % d ␣ 0 ␣ 0 ␣ 995 ␣ 0 ␣ -1 ␣ 0.000 ␣ 1 ␣ 1 ␣ 0 ␣ 0 ␣ 0 ␣ 2\ n ’ , round ( s ( j ) ) ) ;
fprintf ( fid , ’\ t \ t % d ␣ % d \ n ’ , round ( faktor * knoten ( stab (j ,1) ,1) ) , round ( figymax faktor * knoten ( stab (j ,1) ,2) ) ) ;
fprintf ( fid , ’\ t \ t % d ␣ % d \ n ’ , round ( faktor * knoten ( stab (j ,2) ,1) ) , round ( figymax faktor * knoten ( stab (j ,2) ,2) ) ) ;
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
XXV
end
end
fprintf ( ’\ nStabdicken : ␣ % e ␣ bzw . ␣ % e ␣ bis ␣ % e \ n ’ , min ( s ) , min ( s ( find (s >= smin ) ) ) , max ( s ) ) ;
fprintf ( ’\ nsmin : ␣ % e \ n \ n ’ , smin ) ;
fprintf ( ’ fig2dev ␣ -L ␣ pdf ␣ % s . fig ␣ % s . pdf \ n ’ , name , name ) ;
fprintf ( ’ fig2dev ␣ -Z ␣ 10 ␣ -L ␣ png ␣ % s . fig ␣ % s . png \ n ’ , name , name ) ;
if strcmp ( computer ( ’ arch ’) , ’ glnx86 ’) || strcmp ( computer ( ’ arch ’) , ’ glnxa64 ’) ||
strcmp ( computer ( ’ arch ’) , ’ maci ’) || strcmp ( computer ( ’ arch ’) , ’ maci64 ’) || strcmp (
computer ( ’ arch ’) , ’ sol64 ’)
system ( sprintf ( ’ fig2dev ␣ -L ␣ pdf ␣ % s . fig ␣ % s . pdf \ n ’ , name , name ) ) ;
system ( sprintf ( ’ fig2dev ␣ -Z ␣ 10 ␣ -L ␣ png ␣ % s . fig ␣ % s . png \ n ’ , name , name ) ) ;
end
function x = skaliere (a ,b , x )
xgn = find (x >0) ;
xmin = min ( x ( xgn ) ) ;
if length ( xmin ) >0
xmax = max ( x ) ;
% xmin = min ( xmax /10 , xmin ) ;
if xmax ~= xmin
m = (b - a ) /( xmax - xmin ) ;
t = a - m * xmin ;
x ( xgn ) = m * x ( xgn ) + t ;
end
end
Herunterladen