Gelöste Aufgaben/MaMa
Aufgabenstellung
Ein Stab der Länge Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 3a} und Biegesteifigkeit Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle EI} 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 Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle q_0} .
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 praktikabel. 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 hier.
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 Bereiche, Knoten und Koordinaten aus:
Für Bereich Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle I} (zwischen Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle A} und Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle B} ) führen wir die unabhängige Koordinate Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle x_I} ein, für Bereich Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle II} (zwischen Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle B} und Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle C} ) die Koordinate Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle x_{II}} .
Die zwei Bereiche haben die Längen
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \ell_I} und
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \ell_{II}} .
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 Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle w(x)} und die maximlae Kippung der Querschnitte von Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \phi(x)}
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle w_{ref} = \frac{q_{0} a^4}{8 EI}} und
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \varphi_{ref} = \frac{q_0 a^3}{6 EI}}
Unsere Lösung für Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle w(x)} teilen wir dann durch Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle w_{ref}} - und erhalten eine Aussage darüber, wie groß die Auslenkung unseres Systems im Vergleich zur Referenz-Auslenkung ist. Und dieses Verhältnis ist eine Zahl - ohne Parameter - so dass wir sie einfach interpretieren können.
Zusätzlich wählen wir
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle M_{ref} = \frac{q_{0} a^2}{2}} und
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle Q_{ref} = q_0 a}
für die Ergebnisse von Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle Q(x)} und Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle M(x)} .
Boundary Value Problem
Das Randwertproblem wird im Feld von der Euler-Bernoulli-Differentialgleichung des Balkens und an den Rändern durch kinematische oder Kraft-Randbedingungen beschrieben.
Differentialgleichung des Euler-Bernoulli-Balkens
Die Gleichgewichtsbedingung am Balken führt auf die Differentialgleichung
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle EI w^{IV}=q_0}
Deren allgemeine Lösung (also ohne Anpassung an Rand- und Übergangsbedingungen) ist
... für die Auslenkung des Querschnitts: | Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle EI w(x)=\frac{1}{24} q_0 x^4 + \frac{1}{ 6} C_3 x^3 + \frac{1}{ 2} C_2 x^2 + C_1 x + C_0 } |
mit den 4 Integrationskonstanten - und damit unseren Unbekannten je Abschnitt -
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle C_0, C_1, C_2 \text{ und } C_3 } .
Aus Gleichgewichts- und Kinematik-Beziehungen kommen dann die weiteren Gleichungen
... für den Kippwinkel des Querschnitts: | Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle EI \varphi(x) = EI \frac{dw}{dx} =+\frac{1}{ 6} q_0 x^3 +\frac{1}{ 2} C_3 x^2 + C_2 x + C_1} |
... für das Biegemoment: | Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle M(x) =- EI \frac{d^2w}{dx^2} =-\frac{1}{ 2} q_0 x^2 - C_3 x - C_2 } und |
... für die Querkraft: | Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle Q(x) =\frac{dM}{dx} =- q_0 x - C_3 } . |
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 Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 0<x_I<\ell_I} |
Bereich II Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle 0<x_{II}<\ell_{II}} |
---|---|
|
|
Und das gilt in gleicher Weise für die Gleichungen von Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \varphi, M, Q} .
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:
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle w_I(0) = 0}
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \varphi_I(0) = 0}
- ... in B:
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle w_I(\ell_I) = 0}
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle w_{II}(0) = 0} und
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \varphi_I(\ell_I) = \varphi_{II}(0) = \Phi_B}
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:
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle M_I(\ell_I) = M_{II}(\ell_{II})} und
- ... in C (freier Rand):
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle Q_{II}(\ell_II) = 0}
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle M_{II}(\ell_II) = 0}
Dies sind insgesamt 5+3=8 Rand- bzw. Übergangsbedingungen für die 8 Integrationskonstanten
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle C_{I,0}, C_{I,1}, C_{I,2}, C_{I,3}, C_{II,0}, C_{II,1}, C_{II,2} \text{ und } C_{II,3} } .
Konsolidierung der Gleichungen
Jetzt kommt Maxima ins Spiel.
Maxima-Quellcode
Im Quellcode für Maxima werden die Elemente aus dem Lösungsprozess oben direkt umgesetzt. So finden sich in "fcts" die Funktionen für Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle w, \varphi, M, Q} .
Diese Funktionen können wir mit Maxima direkt in den Randbedingungen ansprechen und erhalten die Gleichungen
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \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} }
Diese Gleichungen kann man einzeln mit passenden Faktoren - z.B. Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle EI} - durchmultiplizieren und man erhält das einfacher aussehende lineare Gleichungssystem
- Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \begin{pmatrix}1 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0\\ 1 & 2 a & 2 {{a}^{2}} & \frac{4 {{a}^{3}}}{3} & 0 & 0 & 0 & 0\\ 0 & 1 & 2 a & 2 {{a}^{2}} & 0 & -1 & 0 & 0\\ 0 & 0 & -1 & -\left( 2 a\right) & 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & -1 & -a\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & -1\end{pmatrix} \cdot \begin{pmatrix}{C_{I,0}}\\ {C_{I,1}}\\ {C_{I,2}}\\ {C_{I,3}}\\ {C_{II,0}}\\ {C_{II,1}}\\ {C_{II,2}}\\ {C_{II,3}} \end{pmatrix} = \begin{pmatrix}0\\ 0\\ 0\\ 0\\ 0\\ 0\\ \frac{{q_{0}} {{a}^{2}}}{2}\\ {q_{0}} a \end{pmatrix} }
Maxima hilft auch dabei, die von Null verschiedenen Elemente herauszusortieren und für Matlab zu formatieren für Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \underline{\underline{A}}} :
A( 1 , 1 ) = 1; A( 2 , 2 ) = 1; A( 3 , 1 ) = 1; A( 3 , 2 ) = 2*a; A( 3 , 3 ) = 2*a^2; A( 3 , 4 ) = (4*a^3)/3; A( 4 , 2 ) = 1; A( 4 , 3 ) = 2*a; A( 4 , 4 ) = 2*a^2; A( 4 , 6 ) = -1; A( 5 , 3 ) = -1; A( 5 , 4 ) = -(2*a); A( 5 , 7 ) = 1; A( 6 , 5 ) = 1; A( 7 , 7 ) = -1; A( 7 , 8 ) = -a; A( 8 , 8 ) = -1;
und Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle \underline{b}} :
b(7,1) = q0*a^2/2; b(8,1) = q0*a;
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/* 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(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 */
Matlab©-Quellcode
Genau so wird der Code dann in Matlab eingefügt - hier mit der Änderung, dass Fehler beim Parsen (SVG (MathML kann über ein Browser-Plugin aktiviert werden): Ungültige Antwort („Math extension cannot connect to Restbase.“) von Server „https://wikimedia.org/api/rest_v1/“:): {\displaystyle a} und Properties der EBB-Class sind und entsprechend innerhalb der Klasse als obj.a bzw obj.q angesprochen werden müssen, also
:
:
function A = sysmat(obj)
%populate
% system matrix A
% create matrix
A = zeros(8,8);
% populate matrix (only non-zero elements)
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;
end
function b = rhs(obj)
%populate
% right-hand side
% cretae matrix
b = zeros(8,1);
% populate matrix
b(7,1) = obj.q*obj.a^2/2;
b(8,1) = obj.q*obj.a;
end
:
:
Die Datei-Struktur links zeigt das Skript MaMa.m sowie Classes und Functions in den jeweiligen Ordnern. Die Excel-Datei enthält alle System-Parameter.
Den komplette Quellcode zu diesem Programm können Sie über dieses ZIP-File rechts herunterladen.
download compressed archive →
Solving
Die Gleichungen lösen wir in Maxima mit dem Befehl
solve(bvp,X)[1]
lösen - das Ergebnis ist dann
Das gleiche passiert in der Matlab-Funktion linsolve in der solveAB.m:
function x = solveAb(sys) % solve % linear system of equations A*x = b A = sys.sysmat(); b = sys.rhs(); x = linsolve(A,b); end
Wir erhalten die Lösung
X = 1.0e+03 * 0 0 -0.5000 0.7500 0 0.5000 1.0000 -2.0000
Post-Processing
Mit der algebraischen Lösung tragen wir auf und finden
Die gleiche Lösung- und zusätzliche Graphen - kommen aus der numerischen Lösung mit Matlab:
Die Lösungen stimmen - natürlich - überein. In Fällen, bei denen das lineare Gleichungssystem so wenige Unbekannte wie hier hat, würde man also die Lösung direkt in Maxima ermitteln. Wenn es komplizierter wird, muss man oft in die Numerik gehen, um in endlicher Zeit eine Lösung zu bekommen.