Gelöste Aufgaben/MaMa: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 139: | Zeile 139: | ||
=== Konsolidierung der Gleichungen === | === Konsolidierung der Gleichungen === | ||
Jetzt kommt Maxima ins Spiel. | Jetzt kommt Maxima ins Spiel. | ||
<!--------------------------------------------------------------------------------> | <!--------------------------------------------------------------------------------> | ||
{{MyCodeBlock|title=Title | {{MyCodeBlock|title=Title | ||
|text= | |text= | ||
Im Quellcode für Maxima werden die Elemente aus dem Lösungsprozess oben direkt umgesetzt. So finden sich in <pre>fcts</pre> die Funktionen für | |||
<math>w, \varphi, M, Q</math>. | |||
Diese Funktionen können wir mit Maxima direkt ansprechen und erhalten die 8 Gleichungen | |||
<math> | |||
\begin{array}{lccl} | |||
1)&C_{I,0}/EI&=&0\\ | |||
2)&C_{I,1}/EI&=&0\\ | |||
3)&4 C_{I,3} a^3/(3 EI)+2 C_{I,2} a^2/EI+2 C{I,1} a/EI + C_{I,0}/EI&=&0\\ | |||
4)&2 C_{1,3} a^2/EI+2 C_{I,2} a/EI+C_{1,1}/EI &=& C_{II,1}/EI\\ | |||
5)& -2 C_{I,3} a - C_{I,2} &=& -C_{II,2}\\ | |||
6)& C_{II,0}/EI&=&0\\ | |||
7)&-q_{0} a^2/2 - C_{II,3} a - C_{II,2}&=&0\\ | |||
8)&- q_{0} a-C_{II,3} &=& 0 | |||
\end{array} | |||
</math> | |||
Diese Gleichungen kann man einzeln mit passenden Faktoren durchmultiplizieren und man erhält das lineare Gleichungssystem | |||
Zeile 262: | Zeile 280: | ||
{{MyCodeBlock|title=Maxima-Quellcode | {{MyCodeBlock|title=Maxima-Quellcode | ||
|text= | |text= | ||
Text | |||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> |
Version vom 14. Oktober 2024, 13:33 Uhr
Aufgabenstellung
Ein Stab der Länge und Biegesteifigkeit ist links fest eingespannt und wird bei 2/3 seiner Länger durch ein gelenkiges Lager gestützt. Zwischen dem freien rechten Rand und dem gelenkigen Lager wirkt eine konstante Streckenlast .
Gesucht ist die analytische Lösung für den Euler-Bernoulli-Balken und die Verläufe der Schnittgrößen. Im Vordergrund der Ausarbeitung steht das Zusammenspiel von Maxima (Computeralgebra) und Matlab (Numerik) zum Aufstellen, Verwalten und Lösen des linearen Gleichungssystems.
Die Aufgabe ist einfach genug, um sie analytisch mit Maxima allein zu lösen. Hier geht es aber darum, die "Zusammenarbeit" zwischen den beiden Software-Paketen exemplarisch vorzustellen. Dieses Zusammenspiel wird dann interessant, wenn die Anzahl der Gleichungen groß wird - typischer weise > 50. Dann ist eine algebraische Lösung oft nicht mehr möglich. Maxima eignet sich dann hervorragend für das Aufstellen und Verwalten der Gleichungen. Die konsolidierten Gleichungen werden dann zur numerischen Lösung an Matlab übergeben. Wie das geht, zeigen wir im Folgenden.
Lösung mit Maxima und Matlab
Im folgenden finden Sie die Skripte für Maxima und Matlab, mit denen diese Aufgabe bearbeitet wurde.
Declarations
Wir zeichnen zunächst die Berieche, Knoten und Koordinaten aus:
Für Bereich führen wir die unabhängige Koordinate ein, für Bereich die Koordinate . Die zwei Bereich haben die Längen
- und
- .
Um die gesuchte Lösung dimensionslos ansetzten zu können, wählen wir eine Vergleichslösung. Hier bietet sich der Kragbalken unter Streckenlast an. Diese liefert für die maximale Auslenkung von und die maximlae Kippung der Querschnitte von
- und
Außerdem wählen wir
- und
Boundary Value Problem
Das Randwertproblem wird im Feld von der Euler-Bernoulli-Differentialgleichung des Balkens beschreiben und an den Rändern durch kinematische oder Kraft-Randbedingungen.
Differentialgleichung des Euler-Bernoulli-Balkens
Die Gleichgewichtsbedingung am Balken führt auf die Differentialgleichung
Deren allgemeine Lösung (also ohne Anpassung an Rand- und Übergangsbedingungen) ist
... für die Auslenkung des Querschnitts: |
---|
mit den 4 Integrationskonstanten - und damit unseren Unbekannten je Abschnitt -
- .
Aus Gleichgewichts- und Kinematik-Beziehungen kommen dann die weiteren Gleichungen
... für den Kippwinkel des Querschnitts: | |
---|---|
... für das Biegemoment: | und |
... für die Querkraft: | und |
In unserer Aufgabe haben wir zwei Bereiche - in B müssen wir diese allgemeinen Lösungen aneinander anstückeln. Um sie zu unterscheiden, hängen wir für jede Lösung den Index des Bereichs an, also
Bereich I |
Bereich II |
---|---|
|
|
Und das gilt in gleicher Weise für die Gleichungen von .
Rand- und Übergangsbedingungen
Die Rand- und Übergangsbedingungen im Stab finden wir entweder aus kinematischen Überlegungen oder aus Gleichgewichtsbeziehungen mit den Schnittkräften des Balkens.
Kinematische Rand- und Übergangsbedingungen
Für die Kinematik des Systems schauen wir uns die angenommene Verformung des Systems an:
Aus dem Bild entnehmen wir, dass
- ... in A:
- ... in B:
- und
gilt.
Kraft- und Momenten Rand- und Übergangsbedingungen
Für die Übergangsbedingungen in B brauchen wir ein Freikörperbild:
Die Gleichgewichtsbeziehungen erhalten wir dann zu
- ... in B:
- und
- ... in C:
Dies sind insgesamt 8 Rand- bzw. Übergangsbedingungen für die 8 Integrationskonstanten
- .
Konsolidierung der Gleichungen
Jetzt kommt Maxima ins Spiel.
Title
Im Quellcode für Maxima werden die Elemente aus dem Lösungsprozess oben direkt umgesetzt. So finden sich in
fcts
die Funktionen für
.
Diese Funktionen können wir mit Maxima direkt ansprechen und erhalten die 8 Gleichungen
Diese Gleichungen kann man einzeln mit passenden Faktoren durchmultiplizieren und man erhält das lineare Gleichungssystem
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* Modul Numerische Methoden der Mechanik */
/* Script zum Unterricht */
/* Löst: Gross e.a., Technische Mechanik, Bd 2, A 3.16 */
/* Autor: Andreas Baumgart */
/* Last Updated: 2024-11-13 */
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* parameters */
params: [ℓ[1]=2*a, ℓ[2]=a, q[1,0]=0];
/* reference-values */
refs: [w[ref]=q[2,0]*a^4/8/EI,
φ[ref]=q[2,0]*a^3/6/EI,
M[ref]=q[2,0]*a^2/2,
Q[ref]=q[2,0]*a];
/*****************************************/
/* the differential equation for the EBB */
ebb: [EI*diff(w[i](x),x,4)=0, w[i](x) = 1/EI*(q[i,0]*x^4/24+sum(1/j!*C[i,j]*x^j,j,0,3))];
/* ... and its solution */
fcts: [w[i](x) = diff(subst(ebb,w[i](x)),x,0),
φ[i](x) = diff(subst(ebb,w[i](x)),x,1),
M[i](x) =-EI*diff(subst(ebb,w[i](x)),x,2),
Q[i](x) =-EI*diff(subst(ebb,w[i](x)),x,3)];
/* boundary conditions */
bvp: [subst([i=1,x= 0 ], subst(fcts,w[i](x))) = 0,
subst([i=1,x= 0 ], subst(fcts,φ[i](x))) = 0,
subst([i=1,x=ℓ[1]], subst(fcts,w[i](x))) = 0,
subst([i=1,x=ℓ[1]], subst(fcts,φ[i](x))) = subst([i=2,x= 0 ], subst(fcts,φ[i](x))),
subst([i=1,x=ℓ[1]], subst(fcts,M[i](x))) = subst([i=2,x= 0 ], subst(fcts,M[i](x))),
subst([i=2,x= 0 ], subst(fcts,w[i](x))) = 0,
subst([i=2,x=ℓ[2]], subst(fcts,M[i](x))) = 0,
subst([i=2,x=ℓ[2]], subst(fcts,Q[i](x))) = 0];
X: flatten(makelist(makelist(C[i,j],j,0,3),i,1,2));
/* scale equations - so they look nicer ... */
scale: [EI,EI,EI,EI,1,EI,1,1];
for i:1 thru length(bvp) do
bvp[i]: subst(params,bvp[i])*scale[i];
/* preprocess */
bvp: expand(subst(refs,subst(params,bvp)));
ACM: augcoefmatrix(bvp,X);
A: submatrix(ACM,9);
b:-col(ACM,9);
print(A,"*",transpose(X),"=",b)$
/* you'll need to transfere these coefficients to Matlab: */
for row:1 thru 8 do
for col:1 thru 8 do
if notequal(subst(a=1,A[row][col]), 0) then
print("A(",row,",",col,") = ", A[row][col])$
/* Output for Matlab .....
A( 1 , 1 ) = 1;
A( 2 , 2 ) = 1;
A( 3 , 1 ) = 1;
A( 3 , 2 ) = 2*obj.a;
A( 3 , 3 ) = 2*obj.a^2;
A( 3 , 4 ) = (4*obj.a^3)/3;
A( 4 , 2 ) = 1;
A( 4 , 3 ) = 2*obj.a;
A( 4 , 4 ) = 2*obj.a^2;
A( 4 , 6 ) = -1;
A( 5 , 3 ) = -1;
A( 5 , 4 ) = -(2*obj.a);
A( 5 , 7 ) = 1;
A( 6 , 5 ) = 1;
A( 7 , 7 ) = -1;
A( 7 , 8 ) = -obj.a;
A( 8 , 8 ) = -1;
*/
/* solve */
/* we could also solve in Maxima : */
sol: solve(subst(refs,subst(params,bvp)),X)[1];
/* postprocess - an example: */
toPlot: expand(subst([x=ξ*a],subst(refs,subst(params,subst(sol,makelist(subst([i=j],subst(fcts, w[i](x)/w[ref])),j,1,2))))));
/* plot dimensionless displacements of beams in secsions I und II */
print("reference displacement w[ref] = ", subst(refs,w[ref]))$
plot2d([[parametric,ξ,toPlot[1],[ξ,0,2]],[parametric,2+ξ,toPlot[2],[ξ,0,1]]],[xlabel,"x/a->"],[ylabel,"w/w[ref]->"], [legend, "w_1", "w_2"]);
/* these are the functions needed in postprocessing in Matlab : */
for k:1 thru 4 do
(print(" for ", lhs(fcts[k])/lhs(refs[k]),":"),
print(expand(subst([x=ξ*a],subst(params,makelist(subst([i=j],subst(refs,subst(fcts, lhs(fcts[k])/lhs(refs[k])))),j,1,2))))))$
/* note that x=xi*a has been introduced as the dimensionless coordinate */
Solving
Post-Processing
Maxima-Quellcode
Text
code
Links
- ...
Literature
- ...