Gelöste Aufgaben/UEBP

Aus numpedia
Zur Navigation springen Zur Suche springen


Aufgabenstellung

Diese Problemstellung liefert einen Näherungsansatz für eine Standardlösung zum Euler-Bernoulli-Balken.

Der Euler-Bernoulli-Balken AB wird durch ein Moment M zwischen den beiden gelenkigen Lagern belastet. 


Lageplan

Gesucht ist eine Lösung für die Biegelinie mit dem Ansatz von Ritz und zwei Trial-Funktionen.

Im Vergleich zu UEBO, das die gleiche Aufgabenstellung hat - arbeiten wir hier mit Ansatzfunktionen in zwei Sektionen wie bei der FEM. Nur das Gleichgewichts-Prinzip bliebt das Gleicht: das Prinzip vom Minimum der Potentiellen Energie.

Lösung mit Maxima

Beim Verfahren von Ritz arbeiten wir mit

Statt mit

  • Ansatzfunktionen über die gesamte Länge des Balkens arbeiten wir
  • hier mit zwei Finiten Elementen (Sektionen), für die wir separat ansetzen.

Header

Wir berechnen die Potentielle Energie U des Systems in Abhängigkeit von den generalisierten Koordinaten Wi und erhalten aus 

die Gleichung für den gesuchten Koeffizienten Wi der Trial-Funktionen.


/*******************************************************/
/* MAXIMA script                                       */
/* version: wxMaxima 15.08.2                           */
/* author: Andreas Baumgart                            */
/* last updated: 2019-10-19                            */
/* ref: TMC, Labor 3                                   */
/* description: Ritz / FEM approach to EBB, load-case 5*/
/*                                                     */
/*******************************************************/

/* declare variables and functions */
declare("Π", alphabetic); /* strain energy */
declare("ℓ", alphabetic); 
assume(ℓ>0);
dimless:[x=xi*ℓ,
         a=alpha*ℓ];



Declarations

Um die Lösung dimensionslos zu machen, nutzen wir wieder die analytische Lösung des Problems  und

  • : die maximale Auslenkung des Balkens für a=ℓ.

Dimensionslose Orts-Koordinaten sind

.

/*********************************************************/
/*analytic solution vgl. Euler-Bernoulli-Blaken/Standard-Lösungen#case5*/
analytic: w(xi) = M*ℓ^2/(6*EI)*(xi^3+xi*(2-6*alpha+3*alpha^2)
/*                                   foeppel-function         */
                       - 3*(if xi<alpha then 0 else xi-alpha)^2);
W[max] : M*ℓ^2/(9*sqrt(3)*EI);




Formfunctions

Dass wir in UEBO die Trial-Funktions ϕ über die gesamte Stablänge angesetzt haben, führt bei den berechneten Näherungen für die Momente M(x) und letztlich auch für die Verschiebungen w(x) zu massiven Fehlern. Einen Sprung in der Momenten-Kennlinie mit einem Polynom zu approximieren, geht halt nicht gut.

Ein Schritt hin zur Methode der Finiten Elemente ist bei diesem "modifizierten Verfahren von Rayleigh-Ritz" der Ansatz der Trial-Functions in zwei Sektionen - also wie bei analytischen Lösung auch.

Die Sektions- (Element-) Längen sind dabei

  • für Sektion I:   und
  • für Sektion II: .
Unabhängige Koordinaten der Finiten Elemente

Und wir arbeiten mit je einer Ortskoordinate ξi je Sektion, also

mit

Für die Trial-Functions wählen wir sektionsweise Polynome zweiten Grades

,

deren Koeffizienten cij wir nun an die geometrischen Randbedingungen anpassen müssen:

Zusätzlich ersetzen wir zwei cij durch die Verschiebung und Verdrehung im Momenten-Einleitungspunkt

,

so dass die Trial-Functions die Form

annehmen bzw.

Im Plot sehen die vier Funktionen (zwei je Sektion,  zwei Sektionen) so aus:

Trial-Functions - wie bei der Methode der Finiten Elemente

/*********************************************************/
/* declare trial-function(s) */
ell : [alpha*ℓ,(1-alpha)*ℓ];
phi : makelist(sum(c[i,j]*xi^j,j,0,2),i,1,2);

/*********************************************************/
/* boundary-conditions for geometric boundary conditions */
GBC: [subst([xi = 0 ],      phi[1]           ) = 0,
      subst([xi = 1 ],      phi[1]           ) = subst([xi = 0 ],      phi[2]           ),
      subst([xi = 1 ],      phi[1]           ) = W,
      subst([xi = 1 ], diff(phi[1],xi)/ell[1]) = Phi,
      subst([xi = 1 ], diff(phi[1],xi)/ell[1]) = subst([xi = 0 ], diff(phi[2],xi)/ell[2]),
      subst([xi = 1 ],      phi[2]           ) = 0];

sol[1] : solve(GBC,[c[1,0],c[2,0],c[1,1],c[2,1],c[1,2],c[2,2]])[1];
phi: expand(ratsimp(subst(sol[1],phi)));

phi : ratsimp(makelist(makelist(coeff(phi[i],[W,Phi][j]),j,1,2),i,1,2));

/*********************************************************/
toPlot : [[parametric,          alpha *t, phi[1][1]  , [t,0,1]],
          [parametric,          alpha *t, phi[1][2]/ℓ, [t,0,1]],
          [parametric, alpha+(1-alpha)*t, phi[2][1]  , [t,0,1]],
          [parametric, alpha+(1-alpha)*t, phi[2][2]/ℓ, [t,0,1]]];
toPlot : subst([xi=t, alpha=6/10], toPlot);

preamble: "set yrange [] reverse";
plot2d(toPlot, [y,-0.4,1],
       [legend, "ϕ11   ","ϕ12/ℓ1","ϕ21   ","ϕ22/ℓ2"],
       [gnuplot_preamble, preamble],
       [title, "trial-functions für α=6/10"],
       [xlabel, "x/ℓ →"],
       [ylabel, "<- ϕ"] );

ansatz: makelist(w[i](xi) = sum(phi[i][j]*[W,Phi][j],j,1,2),i,1,2);




Potential Energy

Für die Gleichgewichtsbedingungen setzten wir Π (aus Abschnitt Euler-Bernoulli-Balken) und A in U ein und schreiben die skalare Gleichung allgemein in Matrizenform an. Dabei müssen wir

berücksichtigen und erhalten mit der Arbeitsfunktion des Moments

das Potential in Matrix-Schreibweise:

.

wobei

.

/*********************************************************/
/* define potential energy of system */
PMPE : [U = Π - A,
        Π = sum(1/2*EI/ell[i]^3*'integrate('diff(w[i](xi),xi,2)^2,xi,0,1),i,1,2),
        A = M*Phi];

PMPE: subst(ansatz, subst(PMPE[3],subst(PMPE[2], PMPE[1])));
PMPE : expand(ev(PMPE,nouns));

/* unknowns */
Q : [W,Phi];




Equilibrium Conditions

Diese Gleichung erfüllt die Gleichgewichtsbedingungen

,

wenn

.

Hier kann man schon am Gleichungssystem ablesen, was für α=½ passiert: dann werden die Nebendiagonal-Elemente mit Ihren (2 α-1)-Koeffizienten zu Null, dann ist

  • und
  • .

/* equilibrium condition */
eom : makelist(expand(diff(subst(PMPE,U),Q[i])),i,1,2);

A :   funmake('matrix, makelist(makelist(coeff(eom[i],Q[j]),j,1,2),i,1,2));
b : - funmake('matrix, makelist([subst(makelist(Q[j]=0,j,1,2),eom[i])],i,1,2));

print(A,"∙",transpose(Q),"=",b)$




Solving

Auflösen der Gleichungen nach den unbekannten Koordinaten W und Φ liefert

.

Damit ist die gesuchte Näherungs-Lösung

.

/*********************************************************/
/* solve */
sol[2] : ratsimp(solve(eom,Q))[1];
/* approximated solution */
ritz : ratsimp(subst(sol[2],ansatz));




Post-Processing

Verläufe von w(x), ϕ(x)

Die gesuchten Koordinaten  W und Φ tragen wir über α auf:

Wir lesen ab:

  • für α=½: die Lösung wird - wie erwartet - nur durch ϕ2 beschreiben - also W = 0.
  • für α= 0: die Lösung wird - wie erwartet - nur durch ϕ2 beschreiben - also W = 0.

Im Plot der normierten Biegelinie des Balkens im Vergleich von Ritz-Näherung zu analytischer Lösung - hier nur für a = ℓ/2 - zeigt sich, dass die Lösung von deutlich besserer Qualität ist:

Vergleich analytische / numerische Lösung für w(x)

Während in UEBO die Näherungslösung gerade mal 1/4 der analytischen Lösung erreichte, haben wir hier fast die gleichen Auslenkungen. Und das, obwohl die Modelle hier und in UEBO jeweils nur zwei Unbekannte haben.


/*********************************************************/
/* post-processing */

/* plot "weights" W, Φ over a */
plot2d([subst(sol[2],W)/(M*ℓ^2/(6*EI)),subst(sol[2],Phi)/(M*ℓ/(6*EI))],[alpha,0,1],
  [y,-0.5,1.6],
  [legend, "W", "Φ"],
  [xlabel, "α →"],
  [ylabel, "W/(M*ℓ^2/(6*EI)),Φ/(M*ℓ/(6*EI)) →"] );

/* plot y-axis upside-down */
preamble: "set yrange [] reverse";

/* plot displacement w(x) for α = 1/2 */
toPlot : subst([xi=t, alpha=1/2],[[parametric,          alpha *t, ratsimp(subst( ritz,w[1](xi))/W[max]),[t,0,1]],
                                  [parametric, alpha+(1-alpha)*t, ratsimp(subst( ritz,w[2](xi))/W[max]),[t,0,1]],
                                  [parametric,                 t, ratsimp(subst(analytic,w(xi))/W[max]),[t,0,1]]]);

plot2d(toPlot,
  [legend, "section  I", "section  II", "analytic"],
  [color, green, blue, red],
  [style, [lines,3], [lines,3], [lines,1]],
  [gnuplot_preamble, preamble],
  [xlabel, "x/ℓ →"],
  [ylabel, "w(x)/W →"] );




Post-Processing - Nachtrag

Wir schauen uns auch hier wie in UEBO den Vergleich von Näherungslösung - hier nur für α=½ - und der analytischen Lösung des Biegemomenten-Verlaufs an:

Vergleich analytische / numerische Lösung für das Schnittmoment M(x)

Durch das Ansetzen mit zwei separaten Ansatzfunktionen - je eine je Sektion - können wir nun den Sprung im Verlauf der Biegemomente abbilden. Und das macht die Lösung so viel genauer!


/* plot moments My(x) for α = 1/2 */
toPlot : subst([xi=t, alpha=1/2],[[parametric,          alpha *t, EI*diff(ratsimp(subst( ritz,w[1](xi))/M),xi,2)/ell[1]^2,[t,0,1]],
                                  [parametric, alpha+(1-alpha)*t, EI*diff(ratsimp(subst( ritz,w[2](xi))/M),xi,2)/ell[1]^2,[t,0,1]],
                                  [parametric,                 t, EI*M*ℓ^2/(6*EI)*ratsimp((6*xi-3*(if xi<alpha then 0 else 2))/ℓ^2/M),[t,0,1]]]);

plot2d(toPlot,
  [legend, "section  I", "section  II", "analytic"],
  [color, green, blue, red],
  [style, [lines,3], [lines,3], [lines,1]],
  [gnuplot_preamble, preamble],
  [xlabel, "x/ℓ →"],
  [ylabel, "M(x)/M →"] );