Gelöste Aufgaben/LM01

Aus numpedia
Version vom 1. April 2021, 07:26 Uhr von Mechaniker (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen


Aufgabenstellung

Wie Minimum-Prinzipe "funktionieren" und wie die Mathematik dazu aussieht, untersuchen wir hier an einem klassischen Beispiel.

Lageplan

Gesucht ist die Lage der Knoten von vier starren Kettengliedern (Länge ℓ, Masse m) im Erdschwerefeld.


Lösung mit Maxima

Die Aufgabe ist ein einfaches Beispiel für Lösungsansätze mit "Lagrange-Multiplikatoren".

Header

Wir arbeiten mit dem Prinzip vom Minimum der Potentiellen Energie - also dem Potential der Gewichtskraft der Kettenglieder. Besonders charmant - im Vergleich zu Ansätzen mit dem Kräfte-Gleichgewicht ist hier das "Wegfallen" der Schnittkräfte - die brauchen wir hier nicht explizit angeben.


/*******************************************************/
/* MAXIMA script                                       */
/* version: wxMaxima 18.10.1                           */
/* author: Andreas Baumgart                            */
/* last updated: 2019-01-31                            */
/* ref: form of hanging chain                    */
/* description: finds the form of a hanging chain      */
/*              employing Lagrange Multiplyers         */
/*https://de.wikipedia.org/wiki/Lagrange-Multiplikator */
/*******************************************************/




Declarations

Koordinaten

Jeder Verbindungspunkt eines Kettengliedes hat zwei Koordinaten Uj, Vj.

Die Arbeitsfunktion der Gewichtskraft ist

.

Im Gleichgewicht  hat diese Arbeitsfunktion ein Minimum, allerdings müssen dabei für die starren Kettenglieder die Bedingungen

erfüllt sein!


/* declare variational variables - see 6.3 Identifiers */
declare("Λ", alphabetic);
declare("λ", alphabetic);
declare("γ", alphabetic);
declare("ℓ", alphabetic);

/* declarations */
params: [γ = m*g*ℓ];

/* number of chain elements */
N : 4;




Equilibrium Conditions

Die Lagrange-Funktion für die Kette lautet also

mit den Lagrangeschen Multiplikatoren λi.

Hier ist N =4, die Randbedingungen für die Verschiebungen lauten also

und wir wählen hier

.

Mit der Abkürzung

und

ist dann

.

Die Gleichgewichtsbedingungen unter Nebenbedingungen lauten dann

.

/* equilibrium condition */
LagrangeFkt : Λ = sum(γ*(U[n-1]+U[n])/2,n,1,N)
                 +sum(λ[n]*((U[n]-U[n-1])^2+(V[n]-V[n-1])^2 - 1^2),n,1,N);

/* boundary conditions */
BCs : [U[0]=0, V[0]=0, U[N]=0, V[N]=N-1]$
/* unknowns (nodal coordiantes and Lagrange-multiplyers )*/
Q : flatten(append(makelist([U[n],V[n],λ[n]],n,1,N-1),[λ[N]]))$

LagrangeFkt : expand(subst(BCs,LagrangeFkt))$

equ : makelist(diff(subst(LagrangeFkt,Λ),Q[i]),i,1,3*(N+1)-4-1)$
equ : subst([γ = 1],equ);




Solving

Die Gleichungen, die wir nun lösen müssen sind:

.

Und die sind nichtlinear! Dafür brauchen wir eine Lösungsroutine - wir verwenden das Newton–Verfahren.

Wir finden:

.
Lösungen nichtlinearer Gleichungen:
... sind eine Wissenschaft für sich. Selbst für scheinbar triviale Probleme wie dieses laufen wir für N>4 schon in große numerische Probleme hinein. Der Trick ist häufig, als Startpunkt der Iteration Werte vorzugeben, die einigermaßen in der Nähe der erwarteten Lösung liegen. Sonst verabschiedet sich der Newton-Algorithmus oft mit einem "convergance error". Oder wir finden Lösungen, die zwar Gleichgewichtsbedingungen sind aber offensichtlich instabil sind.

/* solve nonlinear equations */
/* make shure, the Jabian ist not zero for the choice of "start" */
/* iteration starts with ..... */
start : makelist(1+i/length(Q),i,1,length(Q))$
load ("mnewton")$
/* iteration controls */
newtonmaxiter: 300;
newtonepsilon: 0.0001;
/* solve */
sol: mnewton(equ,Q,start)[1];




Post-Processing

Lösungskonstellation

Hier erhalten wir jedoch eine Lösung - und so sieht sie aus;


/* post-processing */
/* plot solutions */
preamble: "set yrange [] reverse";

plot2d (subst(sol,subst(BCs,[discrete, makelist(V[i],i,0,N),makelist(U[i],i,0,N)])),
  [gnuplot_preamble, preamble], same_xy,
  [style, [lines,3]],
  [xlabel, "y/ℓ →"],
  [ylabel, "x/ℓ ←"] )$





Links

  • ...

Literature

  • ...