Gelöste Aufgaben/FEC1/FEC1 - Teil III: Simulieren: Unterschied zwischen den Versionen

Aus numpedia
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 50: Zeile 50:
Für dieses Standard-Problem können wir in [[Werkzeuge/Software/Maxima|Maxima]] eine Adaption der [https://de.wikipedia.org/wiki/LAPACK Lapack-Routinen] nutzen.
Für dieses Standard-Problem können wir in [[Werkzeuge/Software/Maxima|Maxima]] eine Adaption der [https://de.wikipedia.org/wiki/LAPACK Lapack-Routinen] nutzen.
|code=
|code=
</syntaxhighlight lang="lisp" line start=1>
<syntaxhighlight lang="lisp" line start=1>
/*******************************************************/
/*******************************************************/
/******************* PART III **************************/
/******************* PART III **************************/
Zeile 89: Zeile 89:
</syntaxhighlight>
</syntaxhighlight>
}}
}}


==Lösung berechnen und ausdeuten==
==Lösung berechnen und ausdeuten==

Version vom 8. März 2021, 14:37 Uhr

⬅ Zurück zu Teil II

Computerprogramm schreiben

Um unsere Bewegungsgleichungen

zu lösen, war der Computer und Maxima bis hierher eine gute Hilfe - wir hätten aber auch alle Gleichungen per Hand aufstellen können. Ab hier geht das nicht mehr. Für die Lösung der Bewegungsgleichungen brauchen wir Computer. Für einfache Probleme wie dieses reichen Interpreter-Programme wie Matlab©, wenn's komplizierter wird, müssten wir auf Kompiler wie C++ umsteigen. Für alle etablierten Programme gibt es Numerik-Bibliotheken, um die Probleme zu lösen, die wir jetzt angehen.

Bei allen Lösungsansätzen steht in der Bewegungsgleichung noch ein Parameter: die Dimensionslose Drehzahl η mit

Partikulare Lösung für konstante Koeffizienten

Für die Bewegungsgleichung oben gibt es keine geschlossene partikulare Lösung - die periodischen Koeffizienten machen das unmöglich. Anschaulich berücksichtigen diese Koeffizienten die Drehwinkel-veränderliche Steifigkeit der Lager beim Drehen. 

Wir könnten von Δk = 0 ausgehen und die Lösung von

berechnen. Aber hier steht nichts, was wir nicht mit einer Handrechnung auch hinbekommen würden: die Auslenkung des Systems wächst quadratisch mit der Drehzahl η(Ω) - also der Zentrifugalkraft.

tmp

Homogene Lösung für konstante Koeffizienten

Auch für die homogene, lineare Differentialgleichung (für P=0) gibt es keine geschlossene analytische Lösung. Wir schauen und also auch hier erst einmal nach einer Lösung der homogenen Differentialgleichung mit konstanten Koeffizienten

um und führen wir eine Modalanalyse durch. Damit wir mit Standard-Lösungsroutinen arbeiten können, transformieren wir die Bewegungsgleichung in eine Differentialgleichung erster Ordnung, hier

.

Dabei ist P = dQ/dτ, also die Geschwindigkeit von Auslenkung und Kippung. Wir haben also nun eine neue Schreibweise für die homogene Differentialgleichung als

mit

.

Für dieses Standard-Problem können wir in Maxima eine Adaption der Lapack-Routinen nutzen.


/*******************************************************/
/******************* PART III **************************/
/*******************************************************/
/* rewrite as first-order differential equations       */
/* X' = H(τ)*X + R, X = (P,Q)^T, R = (0,P)^T           */

/* inverse of  M */
I: dgesv (mats[1], diagmatrix (8, 1))$
/* System Matrix */
H  : zeromatrix(2*8,2*8)$
/* G*M^(-1) */
GI : expand(mats[2].I)$

/* populate system matrix */
for row:1 thru 8 do
   for col:1 thru 8 do
      (H[  row,8+col] : + I     [row,col],
       H[8+row,  col] : -mats[3][row,col],
       H[8+row,8+col] : -GI     [row,col])$

/*******************************************************/
/* solve eigenvalue Problem                            */

evals: []$
for Eta:0 thru 30 step 0.1 do
    (/*print("eta = ", Eta),*/
     evals: append(evals, [append([Eta], dgeev (subst([eta = Eta],H))[1])]))$

etas : flatten(makelist(makelist(evals[i][1],j,1,length(evals[i])-1),i,1,length(evals)))$
reals: flatten(makelist(makelist(realpart(evals[i][j]),j,2,length(evals[i])),i,1,length(evals)))$
imags: flatten(makelist(makelist(imagpart(evals[i][j]),j,2,length(evals[i])),i,1,length(evals)))$
plot2d([[discrete, etas, reals],[discrete, etas, imags]], [y,-100,100], 
        [style,points,points], [point_type,bullet,plus],
        [color,red, blue], [legend, "real part", "imag part"],
        [xlabel, "η->"], [ylabel, "ω, γ ->"],
        [gnuplot_term, "png size 2000,2000 font 'Helvetica,30'"], [gnuplot_out_file, "C:\\Users\\abs384\\OneDrive\\X\\tmp\\plots\\eigenvalues.png"] )$




Lösung berechnen und ausdeuten

Rechenergebnisse mit beobachtetem Verhalten des Systems vergleichen