Gelöste Aufgaben/T313
Aufgabenstellung
Stäbe waren früher das zentrale Bauteil in Leichtbau-Konstruktionen. In dieser Aufgabe geht es um die Komposition der Gesamt-Steifigkeitsmatrix für ein Stabwerk. Das Stabwerk besteht aus 5 Stäben gleicher Dehnsteifigkeit EA und wird durch die Kräfte F, 2F belastet.
Gesucht sind Stabkräfte und Verschiebung der Knotenpunkte des Systems mit dem Prinzip der vertuellen Verrückungen.
Lösung mit Maxima
Dazu verwenden wir die Element-Steifigkeitsmatrix aus den Ergebnissen von Aufgabe T312.
In der Gleichgewichtsbedinung beim Prinzip der virtuellen Verrückungen
teilen wir
in die virtuelle Formänderungsenergie δΠi je Stab auf.
Header
Für die Aufgabe nutzen wir die Ergebnisse aus T312. Dort haben wir die Anteile der viruellen Formänderungsenergievon
allgemein aufgeschrieben.
Den Stäben und Knoten geben wir Nummern - so können wir sie leichter ansprechen.
/*******************************************************/
/* MAXIMA script */
/* version: wxMaxima 15.08.2 */
/* author: Andreas Baumgart */
/* last updated: */
/* ref: % */
/* description: Berechnung der Knoten-Verscheibungen */
/* eines elastischen Stabwerks */
/* - gehört zu Aufgabe T312 */
/*******************************************************/
Parameter
Aus dem Lageplan lesen wir paarweise die x/y-Koordinaten der Knotenpunkte I, II, III, IV ab:
- .
Für die Stäbe erfassen wir die Nummern Ihrer Start- und End-Knotenpunkte:
- .
/* parameters */
assume(a>0);
/* nodal coordinates */
N : [[ 0, 0 ],
[2*a, a ],
[2*a, 0 ],
[4*a, 0 ]];
/* rod-connectivity */
R : [[1,2],
[1,3],
[2,3],
[2,4],
[3,4]];
dims: [length(N),length(R)];
Element Stiffness Matrix
Aus diesen Parametern können wir alle Elemente der Element-Steifigkeitsmatrix KE
- (vgl. T312)
je Stab berechnen.
/* compute elements of Element-Stiffness Matrix */
/* Δx / Δy */
d : makelist(N[R[i][2]]-N[R[i][1]],i,1,length(R));
/* reference-lengths */
l : makelist(sqrt(d[i].d[i]),i,1,length(d));
/* normalized Δx / Δy ( xi )*/
e : makelist((N[R[i][2]]-N[R[i][1]])/l[i],
i,1,length(R));
/* Element-Stiffness Matrix from T123 */
K[E] : k[i]*matrix(
[ xi[x]^2,xi[x]*xi[y],-xi[x]^2,-xi[x]*xi[y]],
[ xi[x]*xi[y],xi[y]^2,-xi[x]*xi[y],-xi[y]^2],
[-xi[x]^2,-xi[x]*xi[y], xi[x]^2,xi[x]*xi[y]],
[-xi[x]*xi[y],-xi[y]^2,xi[x]*xi[y],xi[y]^2]);
Compose total Stiffness Matrix
Die skalaren Gleichgewichtsbeziehungen können wir auch als
schreiben. Die Gesamt-Steifigkeitsmatrix K aus dem Gesamt-Gleichungssystem
komponieren wir gleich aus den jeweiligen Element-Steifigkeitsmatrizen je Stab. "Komponieren", weil wir dabei nichts mehr berechnen müssen, sondern die Elemente der Element-Steifigkeitsmatrix nur passend in die Gesamt-Steifigkeitsmatrix einsortieren müssen.
Es sind
die Koordinaten der Verschiebungen der Knoten in x- und y-Richtung und ihre Variationen (ohne Berücksichtigung der Lager-Bindungen) sowie
die Last-Spaltenmatrix mit den Kräften F, 2F auf das Stabwerk, die aus
kommt.
Beim Komponieren der Gesamt-Steifigkeitsmatrix gehen wir so vor:
Die virtuellen Formänderungs-Energien des Stabwerks setzen sich additiv aus den (hier fünf) virtuellen Formänderungsenergien je Stab zusammen:
Jedes Matrix-Element der Element-Steifigkeitsmatrix für den Stab i gehört nun zu genau einer Kombination aus Verschiebung und virtueller Verschiebung. So taucht in Liste der Summanden für Stab 1 (Knoten I und II)auch der Term
auf.
Diesen müssen wir jetzt zur Gesamt-Steifigkeitsmatrix hinzuaddieren - so wie unten beschreiben.
Die Gesamt-Steifigkeitsmatrix erhalten wir schließlich zu
Diese Zuordnung - oder Komposition - macht man in komplexeren Programmen - wie FEM-Software - mit Inzidenztabellen.
Lösen müssen wir nun das lineare Gleichungssystem aus
Würden wir versuchen, diese Gleichungssystem direkt zu lösen, würden wir allerdings scheitern, denn:
- die Determinante von ist Null,
d.h. Zeilen oder Spalten der Matrix sind voneinander linear abhängig.
/* compose total stiffness matrix */
K[0]: zeromatrix(2*dims[1],2*dims[1]);
for rod:1 thru dims[2] do
(K[rod] : subst([k[i]=EA/l[rod],
xi[x] = e[rod][1],
xi[y] = e[rod][2]],K[E]),
iL: [2*R[rod][1]-1,2*R[rod][1],2*R[rod][2]-1,2*R[rod][2]],
for rowi: 1 thru 4 do
for coli: 1 thru 4 do
(K[0][iL[rowi]][iL[coli]]:
K[0][iL[rowi]][iL[coli]]+K[rod][rowi][coli]),
print(r))$
/* coordiates and right-hand-side K*Q=P */
Q: transpose(matrix(flatten(makelist([u[i],v[i]],i,1,4))));
P: transpose(matrix([0,0,1,0,0,-2,0,0]))*(EA/a);
Boundary Conditions
Das Problem: die Randbedingungen haben wir noch nicht eingearbeitet! Und die erhalten wir durch Streichen der betroffenen Zeilen und Spalten im Gleichungssystem.
Übrig bleibt
/* boundary conditions … */
nulls : [1,2,7,8];
nullNodes: makelist(Q[i][1]=0,i,nulls);
/* remove respective rows and columns*/
for iN:length(nulls) thru 1 step -1 do
(K[0]:submatrix(nulls[iN],K[0],nulls[iN]),
Q : submatrix(nulls[iN],Q),
P : submatrix(nulls[iN],P))$
Solving
Diese Gleichungssystem hat eine Lösung:
- .
/* solve for nodal displacements */
sol[1]: ratsimp(linsolve_by_lu(K[0],P))[1];
sol[2]: makelist(Q[i][1]=sol[1][i][1],i,1,length(Q));
Post-Processing
In einer Nachlaufrechnung können wir nun auch noch die Stabkräfte bestimmen:
..
/* post-process: rod normal forces */
post[1]: makelist( (d[rod][1]*(u[R[rod][2]]-u[R[rod][1]])+
d[rod][2]*(v[R[rod][2]]-v[R[rod][1]]))/l[rod],
rod,1,length(R));
post[1]: subst(sol[2],subst(nullNodes,F/(EA/a)*post[1]));
Links
- ...
Literature
- ...