Gelöste Aufgaben/FEAE: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
KKeine Bearbeitungszusammenfassung |
||
(12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Category:Gelöste_Aufgaben]] | [[Category:Gelöste_Aufgaben]] | ||
[[Category:Analytische Lösung]] | |||
[[Category:Anfangswertproblem]] | [[Category:Anfangswertproblem]] | ||
[[Category:Maxima]] | [[Category:Maxima]] | ||
Zeile 6: | Zeile 7: | ||
[[Category:Dynamik]] | [[Category:Dynamik]] | ||
[[Category:Prinzip der virtuellen Arbeit]] | [[Category:Prinzip der virtuellen Arbeit]] | ||
==Aufgabenstellung== | |||
Wir schauen uns die Lösungsanteile für die Bewegungsgleichung des Zwei-Masse-Schwinger an: welche Rolle spielen die homogene und partikulare Lösung? | |||
<onlyinclude> | |||
[[Datei:FEAE-01.png|left|mini|80px|Lageplan]] | |||
Gesucht ist Gesamtlösung des Systems im Zeitbereich beim Loslassen der beiden Massen aus der Referenz-Konfiguration, bei der beide Federn entspannt sind. Wir stellen die Bewegungsgleichung mit dem [[Werkzeuge/Gleichgewichtsbedingungen/Arbeitsprinzipe der Analytischen Mechanik/Prinzip der virtuellen Verrückungen|Prinzip der virtuellen Verrückungen]] auf. | |||
</onlyinclude> | |||
Wir arbeiten mit den System-Parametern | |||
<math>\begin{array}{ccc}k_1&=&\frac{3}{2} k_0\\k_2&=&k_0\\m_1&=&m_0\\m_2&=&m_0\\\end{array}</math> | |||
== Lösung mit Maxima == | |||
<!-------------------------------------------------------------------------------->{{MyCodeBlock|title=Header | |||
|text= | |||
Der Lösungsweg zu dieser Aufgabe wird bereits in [[Anfangswertprobleme/Methoden zur Lösung von Anfangswertproblemen/Integration der Differentialbeziehung (IVP)|Integration der Differentialbeziehung (IVP)]] gezeigt, hier verfolgende wir einen etwas allgemeineren Lösungspfad. | |||
Dabei arbeiten wir u.a. mit quadratischen Gleichungen. Für deren Lösung müssen wir [[Sources/Lexikon/Maxima|Maxima]] wissen lassen, welche Parameter positiv sind, also | |||
::<math>k_0 > 0,\;\;\;m_0>0,\;\;\;T>0;</math>[[Datei:FEAW-02.png|mini|Koordinaten der Bewegung.|alternativtext=|185x185px]]Die Lage-Koordinaten des Systems fassen wir in | |||
::<math>\underline{Q} = \left(\begin{array}{l}w_1(t)\\w_2(t)\end{array}\right)</math> | |||
zusammen. | |||
Für die [[Werkzeuge/Beschreibung physikalischer Systeme/Dimensionen und Einheiten|dimensionslose Schreibweise]] brauchen wir später eine Bezugszeit ''t<sub>Bez</sub>''. | |||
Dazu nehmen wir eine "Anleihe" bei einem ähnlichen System: | |||
Für dieses System "kennen" wir die Eigenkreisfrequenz | |||
::<math>\displaystyle \omega_0 = \sqrt{\displaystyle\frac{k_0}{m_0}} \text{ und } \omega_0 = \frac{2\pi}{T}</math>. | |||
Aus diesem Modell "leihen" wir uns die Bezugszeit zu | |||
::<math>\displaystyle T = 2\pi \sqrt{\displaystyle\frac{m_0}{k_0}}</math>. | |||
und wählen | |||
::<math>t_{Bez} := T</math>[[Datei:FEAE-03.png|mini|Hier kennen wir ω<sub>0</sub>.|alternativtext=|links|90x90px]] | |||
|code= | |||
<syntaxhighlight lang="lisp" line start=1> | |||
/*******************************************************/ | |||
/* MAXIMA script */ | |||
/* version: wxMaxima 16.04.2 */ | |||
/* author: Andreas Baumgart */ | |||
/* last updated: 2018-01-07 */ | |||
/* ref: FEM, PVMPE using two coordinates */ | |||
/* description: solve by principle virt. Work */ | |||
/*******************************************************/ | |||
/* declare variational variables - see 6.3 Identifiers */ | |||
declare("δW", alphabetic); | |||
declare("δA", alphabetic); | |||
declare("δΠ", alphabetic); | |||
declare("δw", alphabetic); | |||
declare("δQ", alphabetic); | |||
/* assumptions */ | |||
assume(k[0]>0,m[0]>0,T>0); | |||
/* abbreviations */ | |||
abbrev : [omega[0,0]=2*%pi/T, omega[0,0]^2= k[0]/m[0]]; | |||
abbrev : append(abbrev, solve(abbrev,[omega[0,0],T])[2]); | |||
/* system parameters and dimensionless time tau */ | |||
params: [m[1]=m[0],m[2]=m[0],k[1]=3/2*k[0],k[2]=k[0], | |||
t = T*tau, w[s] = m[0]*g/k[0]]; | |||
/* coordinates */ | |||
Q[t]: [ w[1](t), w[2](t)]; | |||
δQ[t]: [δw[1] ,δw[2] ]; | |||
</syntaxhighlight> | |||
}} | |||
<!-------------------------------------------------------------------------------->{{MyCodeBlock|title=Equilibrium Conditions | |||
|text= | |||
Die Gleichgewichtsbedingung mit dem Prinzip der virtuellen Verrückungen lautet | |||
::<math>\begin{array}{lcl}\delta W &=& \underbrace{-m_1\cdot\ddot{w}_1\cdot\delta{w}_1-m_2\cdot\ddot{w}_2\cdot\delta{w}_2 + m_1\cdot g \cdot \delta w_1 + m_2\cdot g \cdot \delta w_2}_{\displaystyle := \delta W^a}\\&& - \underbrace{k_1\cdot{w}_1\cdot\delta{w}_1+k_2\cdot\left({w}_2-{w}_1\right)\cdot\left(\delta{w}_2-\delta{w}_1\right)}_{\displaystyle := \delta \Pi}\\&\stackrel{!}{=}0\end{array}</math>. | |||
Aufgelöst nach den Koeffizienten der virtuellen Verrückungen folgt die gewöhnliche, lineare Differentialgleichung: | |||
::<math>\left(\begin{array}{cc} m_0&0\\0&m_0\end{array}\right)\cdot\left(\begin{array}{c}\ddot{w}_1\\ \ddot{w}_2\end{array}\right) + \left(\begin{array}{cc} \frac{5}{2}k_0&-k_0\\-k_0&k_0\end{array}\right)\cdot\left(\begin{array}{c}w_1\\ w_2\end{array}\right) = \left(\begin{array}{c}m_0\cdot g\\m_0\cdot g\end{array}\right)</math>. | |||
In dieser Beziehung stehen jetzt nur noch ''m<sub>0</sub>'' und ''k<sub>0</sub>'' - die Indizes "0" können wir also ab hier weglassen. In Matrix-Schreibweise lautet die Bewegungsgleichung jetzt: | |||
::<math>\underline{\underline{M}}\cdot\underline{\ddot{Q}} + \underline{\underline{K}}\cdot\underline{Q} = \underline{G}</math>. | |||
|code= | |||
<syntaxhighlight lang="lisp" line start=1> | |||
/* virtual of system (equilibrium condition) */ | |||
PvV : [δW = δW^a - δΠ, | |||
δW^a = - sum(m[i]* diff(w[i](t),t,2)*δw[i],i,1,2) + sum(m[i]*g*δw[i],i,1,2), | |||
δΠ = sum(k[i]*(w[i](t)-w[i-1](t))*(δw[i]-δw[i-1]),i,1,2)]; | |||
/* equlilbrium condition */ | |||
eom: subst(PvV[3],subst(PvV[2],subst(PvV[1],δW=0))); | |||
eom: expand(subst([w[0](t)=0,δw[0]=0],eom)); | |||
M : -funmake('matrix,makelist(makelist(coeff(coeff(lhs(eom),δQ[t][i]),diff(Q[t][j],t,2)),i,1,2),j,1,2)); | |||
K : -funmake('matrix,makelist(makelist(coeff(coeff(lhs(eom),δQ[t][i]), Q[t][j] ),i,1,2),j,1,2)); | |||
G : funmake('matrix,makelist(coeff( | |||
subst(makelist(diff(Q[t][i],t,2)=0,i,1,2), | |||
subst(makelist( Q[t][i]=0 ,i,1,2),[lhs(eom)])),δQ[t][j]), j,1,2)); | |||
/* control print-out */ | |||
print(M,"∙",transpose(diff(Q[t],t,2)),"+",K,"∙",transpose(Q[t]),"=",G)$ | |||
</syntaxhighlight> | |||
}} | |||
<!-------------------------------------------------------------------------------->{{MyCodeBlock|title=Solving | |||
|text= | |||
Die Lösung des Anfangswertproblems setzt sich aus zwei Teilen zusammen: | |||
* der partikularen Lösung, die die Rechte Seite "''G''" erfüllt und | |||
* der homogenen Lösung, die die Rechte Seite "''0''" erfüllt. | |||
Die Gesamtlösung ''Q<sub>t</sub>'' setzt sich nun - bei diesem linearen System - additiv aus partikularer ''Q<sub>p</sub>'' und ''Q<sub>h</sub>'' homogener Lösung zusammen: | |||
::<math>\underline{Q}_t(t) = \underline{Q}_p(t) + \underline{Q}_h(t)</math> | |||
|code= | |||
<syntaxhighlight lang="lisp" line start=1> | |||
/**************** total solution */ | |||
Q[t] : Q[p] + Q[h] | |||
</syntaxhighlight> | |||
}} | |||
<!-------------------------------------------------------------------------------->{{MyCodeBlock|title=Right-Hand-Side Approach | |||
|text= | |||
Die rechte Seite der Bewegungsgleichung ''G'' ist nicht zeitabhängig - sie ist statisch. Also ist auch die Lösung ''Q<sub>p</sub>'' - die partikulare Lösung - statisch, wir suchen nach der Lösung des Gleichungssystems | |||
::<math>\underline{\underline{K}}\cdot\underline{Q}_p = \underline{G}</math> | |||
und die ist | |||
::<math>\underline{Q}_p = \begin{pmatrix}\displaystyle \frac{4\;{{m}}\;g}{3\;{{k}}}\\\displaystyle \frac{7\;{{m}}\;g}{3\;{{k}}}\end{pmatrix}</math> | |||
Wir führen die Abkürzung | |||
::<math>\displaystyle w_s = \frac{{{m}}g}{{{k}}}</math> | |||
ein, also ist | |||
::<math>\underline{Q}_p = w_s\cdot\begin{pmatrix}\displaystyle \frac{4}{3}\\\displaystyle \frac{7}{3}\end{pmatrix}</math>. | |||
|code= | |||
<syntaxhighlight lang="lisp" line start=1> | |||
/**************** particular solution */ | |||
Q[p] : ratsimp(subst(params,linsolve_by_lu(K,G)[1])); | |||
</syntaxhighlight> | |||
}} | |||
<!-------------------------------------------------------------------------------->{{MyCodeBlock|title=Homogeneous Solution | |||
|text= | |||
Für die Lösung der homogenen Bewegungsgleichung | |||
::<math>\underline{\underline{M}}\cdot\underline{\ddot{Q}} + \underline{\underline{K}}\cdot\underline{Q} = \underline{0}</math> | |||
setzen wir (vgl. [[Sources/Lexikon/Modalanalyse|Modalanalyse]]) an | |||
== | ::<math>\displaystyle \underline{Q}_h = \underline{\hat{Q}}_h\cdot e^{\lambda\cdot t}</math> | ||
und erhalten das [[Werkzeuge/Lösungsbausteine der Mathematik/Eigenwertprobleme|Eigenwertproblem]] | |||
::<math>\underbrace{\left(\lambda^2 \underline{\underline{M}} + \underline{\underline{K}}\right)}_{\displaystyle \underline{\underline{D}}(\lambda)}\cdot\underline{\hat{Q}}_h = \underline{0}</math> | |||
mit | |||
<table> | |||
<tr><td>den Eigenwerten</td><td><math>\lambda</math> und</td></tr> | |||
<tr><td>den Eigenvektoren</td><td><math>\displaystyle \underline{\hat{Q}}_{h}</math></td></tr> | |||
</table> | |||
Die Berechnung der Eigenwerte ''λ'' wird einfacher mit | |||
::<math>\lambda^2 = -\Lambda</math> | |||
und wir transformieren parallel die Bewegungsgleichungen auf die dimensionslose Zeit | |||
::<math>\displaystyle \tau := \frac{t}{t_{Bez}}</math> mit <math>t_{Bez} = T.</math>, | |||
also | |||
::<math>\displaystyle \underline{\ddot{Q}} = \frac{d^2\underline{Q}}{d\tau^2}\cdot\underbrace{\frac{d^2\tau}{dt^2}}_{\displaystyle \frac{1}{T^2}}</math>. | |||
Wir finden zwei Eigenwerte aus der Bedingung det(''D'')=0: | |||
::<math>\begin{array}{lr}\Lambda_1 = &2 \cdot \pi^2\\\Lambda_2 = &12 \cdot \pi^2\\\end{array}</math> | |||
und | |||
::<math>\begin{array}{lr}\lambda_1 = &j \cdot \sqrt{2} \cdot \pi\\\lambda_2 = &j \cdot 2\sqrt(3) \cdot \pi\\\end{array} \text{ mit } j := \sqrt{-1}</math>. | |||
Für die Matrix | |||
::<math>\displaystyle \underline{\underline{D}}(\lambda_i) = \lambda^2\cdot \frac{1}{T^2}\cdot \underline{\underline{M}} + \underline{\underline{K}}</math> | |||
stellen wir fest: | |||
Die Matrix hat | |||
* einen Rang (rank) von 1 - es gibt eine linear abhängige Zeile im Gleichungssystem und - entsprechend - | |||
* einen Rangabfall (nullity) von 1. | |||
Die Eigenvektoren spannen nun den Nullraum (nullspace) der Matrix auf. Normmert auf die Länge 1 sind das | |||
<ul> | |||
<li> für ''λ<sub>1</sub>'': <br/> | |||
<math>\displaystyle \underline{\hat{Q}}_{h,1} = \frac{1}{\sqrt{5}} \cdot \left(\begin{array}{c}1\\2 \end{array}\right)</math> und</li> | |||
<li>für ''λ<sub>2</sub>'': <br/> | |||
<math>\displaystyle \underline{\hat{Q}}_{h,2} = \frac{1}{\sqrt{5}} \cdot \left(\begin{array}{c}2\\-1 \end{array}\right)</math>.</li> | |||
</ul> | |||
Die homogene Lösung der Bewegungsgleichung lautet damit | |||
::<math>\displaystyle \underline{{Q}}_{h}(t) = c_1\cdot \frac{1}{\sqrt{5}} \cdot \left(\begin{array}{r}1\\2\end{array}\right) \cdot e^{\displaystyle j\cdot\sqrt{2}\pi \cdot \tau} + c_2\cdot \frac{1}{\sqrt{5}} \cdot \left(\begin{array}{r}2\\-1 \end{array}\right) \cdot e^{\displaystyle j\cdot 2\sqrt{3}\pi \cdot \tau}</math> | |||
mit den Integrationskonstanten ''c<sub>1</sub>'' und ''c<sub>2</sub>''. Durch die komplexen Eigenwerte sind die beiden Integrationskonstanten nun auch komplexwertig, also | |||
::<math>\begin{array}{l}c_1 = c_{R,1} + j\cdot c_{I,1}\\c_2 = c_{R,2} + j\cdot c_{I,2}\end{array}</math>. | |||
Diese vier reell-wertigen Integrationskonstanten bekommen wir aus vier Anfangsbedingungen für die beiden Massen, hier | |||
::<math>\begin{array}{l}w_1(0) = 0\\w_2(0) = 0\\\dot{w}_1(0) = 0\\\dot{w}_2(0) = 0\end{array}</math>. | |||
Wir finden | |||
::<math>\displaystyle {{c}_{R,1}}=-\frac{6\;{{m}}\;g}{\sqrt{5}\;{{k}}},{{c}_{I,1}}=0,{{c}_{R,2}}=-\frac{{{m}}\;g}{3\;\sqrt{5}\;{{k}}},{{c}_{I,2}}=0</math>. | |||
und damit | |||
::<math>\underline{Q}_{h}(t) = 15\cdot \begin{pmatrix}-2\cos{\left( 2\sqrt{3}{\pi} \cdot \tau\right) }-18\cos{\left( \sqrt{2}{\pi} \cdot \tau\right) }\\ \cos{\left( 2\sqrt{3}{\pi} \cdot \tau\right) }-36\cos{\left( \sqrt{2}{\pi} \cdot \tau\right) }\end{pmatrix}</math>. | |||
|code= | |||
<syntaxhighlight lang="lisp" line start=1> | |||
/* direct approach */ | |||
load(eigen); eigensystem: uniteigenvectors(subst(params, invert(M).K)); | |||
/* -> not employed */ | |||
/**************** homogeneous solution */ | |||
/* solve eigenvalue problem */ | |||
Q[E] : matrix([q[1,i]],[q[2,i]]); | |||
ansatz: Q[h] = Q[E]*%e^(%lambda[i]*tau); | |||
D : -Lambda*(1/T)^2*M + K; | |||
D : subst(params, D); | |||
charPoly : determinant(D); | |||
/* eigenvalues */ | |||
eigval : solve(subst(params,charPoly)=0,Lambda); | |||
eigval : subst(abbrev, eigval); | |||
/* save for later ....*/ | |||
eigvalList : makelist(subst(eigval[j],[%lambda[j]=%i*sqrt(Lambda)]),j,1,2); | |||
/* eigenvectors */ | |||
prop: [rnk = rank(subst(eigval[1],subst(params,D))), nly = nullity(subst(eigval[1],D))]; | |||
eigvec : makelist(apply (addcol, args (nullspace( | |||
subst(abbrev,subst(eigval[i],D/k[0]))))),i,1,2); | |||
/* norm eigenvectors (to be of length "1" */ | |||
eigvec : makelist(eigvec[i]/sqrt(eigvec[i].eigvec[i]),i,1,2); | |||
/* adapt to initial values w[1](0)=0, w[2](0)=0 */ | |||
Q[h] : sum(subst(eigval[j],subst([%lambda[j]=%i*sqrt(Lambda),i=j], | |||
(c[R,j]+%i*c[I,j])*eigvec[j]*%e^(%lambda[j]*tau))),j,1,2); | |||
/* update Q[t]*/ | |||
Q[t] : ''(Q[t]); | |||
/* adapt to initial values */ | |||
[[ | intcons : [c[R,1],c[I,1],c[R,2],c[I,2]]; | ||
intcond : append(makelist(subst([tau=0], Q[t] )[i][1]=0,i,1,2), | |||
makelist(subst([tau=0],diff(Q[t],tau))[i][1]=0,i,1,2)); | |||
/* integration constants: */ | |||
sol[1] : ratsimp(solve(realpart(intcond),intcons)[1]); | |||
Q[t] : realpart(ratsimp(subst(params,subst(sol[1],Q[t]/w[s])))) | |||
</syntaxhighlight> | |||
}} | |||
<!-------------------------------------------------------------------------------->{{MyCodeBlock|title=Post-Processing | |||
|text= | |||
Die Lösung für | |||
* ''w<sub>1</sub>'' (blau) und | |||
* ''w<sub>2</sub>'' (rot) | |||
im Zeitbereich, angepasst an die Anfangsbedingungen, sieht nun so aus:[[Datei:FEAE-11.png|mini|Ergebnis-Plots für ''w<sub>1</sub>(t), w<sub>2</sub>(t).''|alternativtext=|ohne]]Interessant ist die separate Auftragung der Lösungsanteile nach partikularer Lösung (Index ''"p"'') und den beiden homogenen Lösungsanteilen (Index ''"h1", "h2"''). Man erkennt, wie die Summe jeweils der blauen und der roten Anteile die Gesamtlösung ergibt.[[Datei:FEAW-12.png|mini|Ergebnis-Plot mit den Lösungsanteilen.|alternativtext=|ohne]] | |||
| | |||
|code= | |code= | ||
<syntaxhighlight lang="lisp" line start=1> | <syntaxhighlight lang="lisp" line start=1> | ||
1 | |||
/* plot results */ | |||
preamble: "set yrange [] reverse"; | |||
plot2d([Q[t][1][1],Q[t][2][1]],[tau,0,4], [legend, "w[1]", "w[2]"], | |||
[xlabel, "τ/1 →"], [ylabel, "← w/(m*g/k)"], | |||
[gnuplot_preamble, preamble]); | |||
/* deconstruct solution into modes */ | |||
timeFcts : makelist(subst(eigvalList[i],%e^(%lambda[i]*tau)),i,1,2) | |||
Q[l] : subst(params,append([Q[p]/w[s]], | |||
realpart(makelist(coeff(subst(sol[1],Q[h]),timeFcts[i])/w[s]*timeFcts[i],i,1,2)))); | |||
plot2d([Q[l][1][1][1],Q[l][1][2][1], | |||
Q[l][2][1][1],Q[l][2][2][1], | |||
Q[l][3][1][1],Q[l][3][2][1]], | |||
[tau,0,4], | |||
[legend, "w[p,1]", "w[p,2]", "w[h1,1]", "w[h1,2]", "w[h2,1]", "w[h2,2]"], | |||
[color, blue, red, blue, red, blue, red], | |||
[style, [lines,3], [lines,3], [lines,1], [lines,1], [lines,1], [lines,1]], | |||
[xlabel, "τ/1 →"], [ylabel, "← w/(m*g/k)"], | |||
[gnuplot_preamble, preamble]); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
}} | }} | ||
Aktuelle Version vom 15. November 2023, 08:19 Uhr
Aufgabenstellung
Wir schauen uns die Lösungsanteile für die Bewegungsgleichung des Zwei-Masse-Schwinger an: welche Rolle spielen die homogene und partikulare Lösung?
Gesucht ist Gesamtlösung des Systems im Zeitbereich beim Loslassen der beiden Massen aus der Referenz-Konfiguration, bei der beide Federn entspannt sind. Wir stellen die Bewegungsgleichung mit dem Prinzip der virtuellen Verrückungen auf.
Wir arbeiten mit den System-Parametern
Lösung mit Maxima
Header
Der Lösungsweg zu dieser Aufgabe wird bereits in Integration der Differentialbeziehung (IVP) gezeigt, hier verfolgende wir einen etwas allgemeineren Lösungspfad.
Dabei arbeiten wir u.a. mit quadratischen Gleichungen. Für deren Lösung müssen wir Maxima wissen lassen, welche Parameter positiv sind, also
- Die Lage-Koordinaten des Systems fassen wir in
zusammen.
Für die dimensionslose Schreibweise brauchen wir später eine Bezugszeit tBez.
Dazu nehmen wir eine "Anleihe" bei einem ähnlichen System:
Für dieses System "kennen" wir die Eigenkreisfrequenz
- .
Aus diesem Modell "leihen" wir uns die Bezugszeit zu
- .
und wählen
/*******************************************************/
/* MAXIMA script */
/* version: wxMaxima 16.04.2 */
/* author: Andreas Baumgart */
/* last updated: 2018-01-07 */
/* ref: FEM, PVMPE using two coordinates */
/* description: solve by principle virt. Work */
/*******************************************************/
/* declare variational variables - see 6.3 Identifiers */
declare("δW", alphabetic);
declare("δA", alphabetic);
declare("δΠ", alphabetic);
declare("δw", alphabetic);
declare("δQ", alphabetic);
/* assumptions */
assume(k[0]>0,m[0]>0,T>0);
/* abbreviations */
abbrev : [omega[0,0]=2*%pi/T, omega[0,0]^2= k[0]/m[0]];
abbrev : append(abbrev, solve(abbrev,[omega[0,0],T])[2]);
/* system parameters and dimensionless time tau */
params: [m[1]=m[0],m[2]=m[0],k[1]=3/2*k[0],k[2]=k[0],
t = T*tau, w[s] = m[0]*g/k[0]];
/* coordinates */
Q[t]: [ w[1](t), w[2](t)];
δQ[t]: [δw[1] ,δw[2] ];
Equilibrium Conditions
Die Gleichgewichtsbedingung mit dem Prinzip der virtuellen Verrückungen lautet
- .
Aufgelöst nach den Koeffizienten der virtuellen Verrückungen folgt die gewöhnliche, lineare Differentialgleichung:
- .
In dieser Beziehung stehen jetzt nur noch m0 und k0 - die Indizes "0" können wir also ab hier weglassen. In Matrix-Schreibweise lautet die Bewegungsgleichung jetzt:
- .
/* virtual of system (equilibrium condition) */
PvV : [δW = δW^a - δΠ,
δW^a = - sum(m[i]* diff(w[i](t),t,2)*δw[i],i,1,2) + sum(m[i]*g*δw[i],i,1,2),
δΠ = sum(k[i]*(w[i](t)-w[i-1](t))*(δw[i]-δw[i-1]),i,1,2)];
/* equlilbrium condition */
eom: subst(PvV[3],subst(PvV[2],subst(PvV[1],δW=0)));
eom: expand(subst([w[0](t)=0,δw[0]=0],eom));
M : -funmake('matrix,makelist(makelist(coeff(coeff(lhs(eom),δQ[t][i]),diff(Q[t][j],t,2)),i,1,2),j,1,2));
K : -funmake('matrix,makelist(makelist(coeff(coeff(lhs(eom),δQ[t][i]), Q[t][j] ),i,1,2),j,1,2));
G : funmake('matrix,makelist(coeff(
subst(makelist(diff(Q[t][i],t,2)=0,i,1,2),
subst(makelist( Q[t][i]=0 ,i,1,2),[lhs(eom)])),δQ[t][j]), j,1,2));
/* control print-out */
print(M,"∙",transpose(diff(Q[t],t,2)),"+",K,"∙",transpose(Q[t]),"=",G)$
Solving
Die Lösung des Anfangswertproblems setzt sich aus zwei Teilen zusammen:
- der partikularen Lösung, die die Rechte Seite "G" erfüllt und
- der homogenen Lösung, die die Rechte Seite "0" erfüllt.
Die Gesamtlösung Qt setzt sich nun - bei diesem linearen System - additiv aus partikularer Qp und Qh homogener Lösung zusammen:
/**************** total solution */
Q[t] : Q[p] + Q[h]
Right-Hand-Side Approach
Die rechte Seite der Bewegungsgleichung G ist nicht zeitabhängig - sie ist statisch. Also ist auch die Lösung Qp - die partikulare Lösung - statisch, wir suchen nach der Lösung des Gleichungssystems
und die ist
Wir führen die Abkürzung
ein, also ist
- .
/**************** particular solution */
Q[p] : ratsimp(subst(params,linsolve_by_lu(K,G)[1]));
Homogeneous Solution
Für die Lösung der homogenen Bewegungsgleichung
setzen wir (vgl. Modalanalyse) an
und erhalten das Eigenwertproblem
mit
den Eigenwerten | und |
den Eigenvektoren |
Die Berechnung der Eigenwerte λ wird einfacher mit
und wir transformieren parallel die Bewegungsgleichungen auf die dimensionslose Zeit
- mit ,
also
- .
Wir finden zwei Eigenwerte aus der Bedingung det(D)=0:
und
- .
Für die Matrix
stellen wir fest:
Die Matrix hat
- einen Rang (rank) von 1 - es gibt eine linear abhängige Zeile im Gleichungssystem und - entsprechend -
- einen Rangabfall (nullity) von 1.
Die Eigenvektoren spannen nun den Nullraum (nullspace) der Matrix auf. Normmert auf die Länge 1 sind das
- für λ1:
und - für λ2:
.
Die homogene Lösung der Bewegungsgleichung lautet damit
mit den Integrationskonstanten c1 und c2. Durch die komplexen Eigenwerte sind die beiden Integrationskonstanten nun auch komplexwertig, also
- .
Diese vier reell-wertigen Integrationskonstanten bekommen wir aus vier Anfangsbedingungen für die beiden Massen, hier
- .
Wir finden
- .
und damit
- .
/* direct approach */
load(eigen); eigensystem: uniteigenvectors(subst(params, invert(M).K));
/* -> not employed */
/**************** homogeneous solution */
/* solve eigenvalue problem */
Q[E] : matrix([q[1,i]],[q[2,i]]);
ansatz: Q[h] = Q[E]*%e^(%lambda[i]*tau);
D : -Lambda*(1/T)^2*M + K;
D : subst(params, D);
charPoly : determinant(D);
/* eigenvalues */
eigval : solve(subst(params,charPoly)=0,Lambda);
eigval : subst(abbrev, eigval);
/* save for later ....*/
eigvalList : makelist(subst(eigval[j],[%lambda[j]=%i*sqrt(Lambda)]),j,1,2);
/* eigenvectors */
prop: [rnk = rank(subst(eigval[1],subst(params,D))), nly = nullity(subst(eigval[1],D))];
eigvec : makelist(apply (addcol, args (nullspace(
subst(abbrev,subst(eigval[i],D/k[0]))))),i,1,2);
/* norm eigenvectors (to be of length "1" */
eigvec : makelist(eigvec[i]/sqrt(eigvec[i].eigvec[i]),i,1,2);
/* adapt to initial values w[1](0)=0, w[2](0)=0 */
Q[h] : sum(subst(eigval[j],subst([%lambda[j]=%i*sqrt(Lambda),i=j],
(c[R,j]+%i*c[I,j])*eigvec[j]*%e^(%lambda[j]*tau))),j,1,2);
/* update Q[t]*/
Q[t] : ''(Q[t]);
/* adapt to initial values */
intcons : [c[R,1],c[I,1],c[R,2],c[I,2]];
intcond : append(makelist(subst([tau=0], Q[t] )[i][1]=0,i,1,2),
makelist(subst([tau=0],diff(Q[t],tau))[i][1]=0,i,1,2));
/* integration constants: */
sol[1] : ratsimp(solve(realpart(intcond),intcons)[1]);
Q[t] : realpart(ratsimp(subst(params,subst(sol[1],Q[t]/w[s]))))
Post-Processing
Die Lösung für
- w1 (blau) und
- w2 (rot)
im Zeitbereich, angepasst an die Anfangsbedingungen, sieht nun so aus:
Interessant ist die separate Auftragung der Lösungsanteile nach partikularer Lösung (Index "p") und den beiden homogenen Lösungsanteilen (Index "h1", "h2"). Man erkennt, wie die Summe jeweils der blauen und der roten Anteile die Gesamtlösung ergibt.
/* plot results */
preamble: "set yrange [] reverse";
plot2d([Q[t][1][1],Q[t][2][1]],[tau,0,4], [legend, "w[1]", "w[2]"],
[xlabel, "τ/1 →"], [ylabel, "← w/(m*g/k)"],
[gnuplot_preamble, preamble]);
/* deconstruct solution into modes */
timeFcts : makelist(subst(eigvalList[i],%e^(%lambda[i]*tau)),i,1,2)
Q[l] : subst(params,append([Q[p]/w[s]],
realpart(makelist(coeff(subst(sol[1],Q[h]),timeFcts[i])/w[s]*timeFcts[i],i,1,2))));
plot2d([Q[l][1][1][1],Q[l][1][2][1],
Q[l][2][1][1],Q[l][2][2][1],
Q[l][3][1][1],Q[l][3][2][1]],
[tau,0,4],
[legend, "w[p,1]", "w[p,2]", "w[h1,1]", "w[h1,2]", "w[h2,1]", "w[h2,2]"],
[color, blue, red, blue, red, blue, red],
[style, [lines,3], [lines,3], [lines,1], [lines,1], [lines,1], [lines,1]],
[xlabel, "τ/1 →"], [ylabel, "← w/(m*g/k)"],
[gnuplot_preamble, preamble]);
Links
- ...
Literature
- ...