import matplotlib
if not hasattr(matplotlib.RcParams, "_get"):
    matplotlib.RcParams._get = dict.get

Instructie#

In constructiemechanica 2 heb je geleerd hoe je met differentiaalvergelijkingen voor statisch bepaalde constructies de krachtsverdeling en vervormingen kan vinden. Precies dezelfde aanpak werkt ook voor statisch onbepaalde constructie, met als enige verschil dat we de inwendige krachten niet kunnen vinden zonder ook de vergelijkingen en randvoorwaarden voor verplaatsingen op te stellen. Dat doen we volgens de volgende stappen:

Algoritme (Differentiaalvergelijkingen toepassen)

  1. Eerst definiëren we de segmenten zonder discontinuïteiten. Daarna kan elk segment afzonderlijk worden getekend, waarbij de belastingen, coördinatenstelsels, afmetingen en snedekrachten aan de randen van elk segment worden aangegeven.

  2. Nu kunnen we voor elk element de belastingsvergelijking opstellen en volgens de relaties van de differentiaalvergelijkingen alle krachtsgrootheden en verplaatsingen opstellen. Daarbij kunnen we direct ook de randvoorwaarden opstellen.

  3. Er zijn nog meer vergelijkingen nodig om alle onbekende integratieconstantes op te lossen, deze kunnen we vinden door de overgangen tussen de verschillende elementen te analyseren waarbij zowel verplaatsingen als krachten in overeenstemming moeten zijn.

  4. Er zijn nu evenveel vergelijkingen als onbekenden opgesteld. Deze kunnen nu worden opgelost en ingevuld in de opgestelde vergelijkingen voor het gewenste resultaat. Omdat het aantal onbekenden bij statisch onbepaalde constructies als snel uit de hand loopt wordt wordt aangeraden om je rekenmachine of een symbolische wiskundetool te gebruiken om dit op te lossen. Om het stelsel vergelijkingen op te lossen met behulp van numerieke hulpmiddelen, kun je de vergelijkingen opschrijven als een matrixformulering \(Ax=b\) die eenvoudig kan worden opgelost door bijvoorbeeld je grafische rekenmachine of in python. Als alternatief kan een symbolische programmeertaal worden gebruikt om de vergelijkingen exact op te lossen. Als voorbeeld wordt het sympy pakket in Python gebruikt:

Als voorbeeld bepalen we de een simpele statisch onbepaalde constructie:

Voorbeeld

Gegeven een constructie zoals hieronder weergegeven:

../_images/structure.svg

Fig. 54 Constructie, \(EI = 5000 \ \rm{kNm^2}\)#

  1. Eerst definiëren we de segmenten zonder discontinuïteiten. Daarna kan elk segment afzonderlijk worden getekend, waarbij de belastingen, coördinatenstelsels, afmetingen en snedekrachten aan de randen van elk segment worden aangegeven.

Voorbeeld

In dit voorbeeld moeten we element AB in twee delen opsplitsen omdat de verdeelde belasting een discontinuïteit veroorzaakt.

Voor AC leidt dit tot:

../_images/FBD_AC.svg

Fig. 55 Vrijlichaamdiagram element AC#

Voor BC leidt dit tot:

../_images/FBD_BC.svg

Fig. 56 Vrijlichaamdiagram element BC#

  1. Nu kunnen we voor elk element de belastingsvergelijking opstellen en volgens de relaties van de differentiaalvergelijkingen alle krachtsgrootheden en verplaatsingen opstellen. Daarbij kunnen we direct ook de randvoorwaarden opstellen.

Voorbeeld

In dit voorbeeld is er enkel invloed door buiging, dus hebben we aan deze differentiaalvergelijking genoeg: \( -EI \cfrac{{d}^4w}{{d}x^4} = -q_z\). De differentiaalvergelijkingen voor rek \( EA \cfrac{{d}^2u}{{d}x^2} = -q_x\) en torsie \( GI \cfrac{{d}^2\varphi_x}{{d}x^2} = -q_T\) hebben we in dit geval niet nodig.

Element AC

Omdat dit element onbelast is, geeft de belastingsvergelijking voor dit element:

\[q_{z,{\rm{AC}}}=0\]

wat leidt tot de vergelijkingen:

\[ V_{\rm{AC}} \left(x\right) = C_1\]
\[ M_{\rm{AC}} \left(x\right) = C_1 \cdot x + C_2 \]
\[ \kappa_{\rm{AC}} \left(x\right) = \cfrac{C_1 \cdot x + C_2}{5000}\]
\[ \varphi_{\rm{AC}} \left(x\right) = \cfrac{\cfrac{1}{2}\cdot C_1 \cdot x^2 + C_2 \cdot x}{5000} + C_3\]
\[ w_{\rm{AC}} \left(x\right) = \cfrac{-\cfrac{1}{6}\cdot C_1 \cdot x^3 - \cfrac{1}{2} C_2 \cdot x^2}{5000} - C_3 \cdot x + C_4\]

Vanwege de oplegging bij A kan een randvoorwaarde worden geformuleerd als:

(1)#\[w_{\rm{AC}} \left(0\right) = 0\]

Omdat A ook een onbelast uiteinde is, kan een andere randvoorwaarde worden geformuleerd als:

(2)#\[M_{\rm{AC}} \left(0\right) = 0\]

Als dit uiteinde belast werd kon met een krachten- of momentenevenwicht ook een relatie gevonden worden.

Element BC

Omdat dit element belast is, geeft de belastingsvergelijking voor dit element:

\[q_{z,\rm{BC}}=10\]

wat leidt tot de vergelijkingen:

\[ V_{\rm{BC}} \left(x\right) = -10 \cdot x + C_5\]
\[ M_{\rm{BC}} \left(x\right) = -5 \cdot x^2 + C_5 \cdot x + C_6 \]
\[ \kappa_{\rm{BC}} \left(x\right) = \cfrac{-5 \cdot x^2 + C_5 \cdot x + C_6}{5000}\]
\[ \varphi_{\rm{BC}} \left(x\right) = \cfrac{-\cfrac{5}{3} \cdot x^3 + \cfrac{1}{2}\cdot C_5 \cdot x^2 + C_6 \cdot x}{5000} + C_7\]
\[ w_{\rm{BC}} \left(x\right) = \cfrac{\cfrac{5}{12} \cdot x^4 -\cfrac{1}{6}\cdot C_5 \cdot x^3 - \cfrac{1}{2} C_6 \cdot x^2}{5000} - C_7 \cdot x + C_8\]

Vanwege de inklemming bij B kunnen twee randvoorwaarden direct worden geformuleerd:

(3)#\[\varphi_{\rm{BC}} \left(4\right) = 0\]
(4)#\[w_{\rm{BC}} \left(4\right) = 0\]
  1. Er zijn nog meer vergelijkingen nodig om alle onbekende integratieconstantes op te lossen, deze kunnen we vinden door de overgangen tussen de verschillende elementen te analyseren waarbij zowel verplaatsingen als krachten in overeenstemming moeten zijn.

Voorbeeld

Bij C kan een randvoorwaarde worden geïdentificeerd uit de consistentie van verplaatsingen: zowel de neerwaartse als rotatieverplaatsing moeten hetzelfde zijn als de neerwaartse en rotatieverplaatsing aan de linkerkant van element BE:

(5)#\[w_{\rm{AC}} \left(4\right) = w_{\rm{BC}} \left(0\right)\]
(6)#\[\varphi_{\rm{AC}} \left(4\right) = \varphi_{\rm{BC}} \left(0 \right)\]

Ten slotte moet er ook consistentie zijn met de snedekrachten, zoals getoond in het vrijlichaamdiagram:

../_images/FBD_C.svg

Fig. 57 Vrijlichaamdiagram knoop C#

Verticaal evenwicht geeft:

(7)#\[\sum {{{\left. {{F_{\rm{v}}}} \right|}^{\rm{C}}} = 0} \to -{V_{\rm{AC}}}\left(4\right) + V_{\rm{BC}}\left(0\right) = 0\]

Momentevenwicht geeft:

(8)#\[\sum {{{\left. {{T}} \right|}_{\rm{C}}^{\rm{C}}} = 0} \to -{M_{{\rm{AC}}}}\left(4\right) + M_{\rm{BC}}\left(0\right) = 0\]
  1. Er zijn nu evenveel vergelijkingen als onbekenden opgesteld. Deze kunnen nu worden opgelost en ingevuld in de opgestelde vergelijkingen voor het gewenste resultaat. Omdat het aantal onbekenden bij statisch onbepaalde constructies als snel uit de hand loopt wordt wordt aangeraden om je rekenmachine of een symbolische wiskundetool te gebruiken om dit op te lossen. Om het stelsel vergelijkingen op te lossen met behulp van numerieke hulpmiddelen, kun je de vergelijkingen opschrijven als een matrixformulering \(Ax=b\) die eenvoudig kan worden opgelost door bijvoorbeeld je grafische rekenmachine of in python. Als alternatief kan een symbolische programmeertaal worden gebruikt om de vergelijkingen exact op te lossen. Als voorbeeld wordt het sympy pakket in Python gebruikt:

Voorbeeld

Er zijn 8 randvoorwaarden geformuleerd met 8 integratieconstanten. Deze kunnen nu worden opgelost.

Het invullen van de randvoorwaarden geeft:

\[\begin{split} \begin{align} C_{4} = 0 \\ C_{2} = 0 \\ - \cfrac{4 C_{5}}{1875} - \cfrac{C_{6}}{625} - 4 C_{7} + C_{8} + \cfrac{8}{375} = 0 \\ \cfrac{C_{5}}{625} + \cfrac{C_{6}}{1250} + C_{7} - \cfrac{8}{375} = 0 \\ - \cfrac{4 C_{1}}{1875} - \cfrac{C_{2}}{625} - 4 C_{3} + C_{4} - C_{8} = 0 \\ \cfrac{C_{1}}{625} + \cfrac{C_{2}}{1250} + C_{3} - C_{7} = 0 \\ 4 C_{1} + C_{2} - C_{6} = 0 \\ C_{1} - C_{5} = 0 \\ \end{align} \end{split}\]

Het oplossen hiervan geeft:

\[\begin{split} \begin{align} C_{1} = \cfrac{35}{8} = 4.375 \\ C_{2} = 0 \\ C_{3} = - \cfrac{1}{150} \approx -0.006667 \\ C_{4} = 0 \\ C_{5} = \cfrac{35}{8} = 4.375\\ C_{6} = \cfrac{35}{2} = 17.5 \\ C_{7} = \cfrac{1}{3000} \approx 0.0003333\\ C_{8} = \cfrac{13}{750} \approx 0.01733 \end{align} \end{split}\]

Nu is de volledige krachtenverdeling en verplaatsingen van de constructie opgelost. Bijvoorbeeld de momentenverdeling in BC die kan worden uitgezet als:

../_images/Momentenlijn.svg

Fig. 58 Momentenlijn BC#

De krachtsverdeling en verplaatsingen kunnen no ook

Oplossen met digitale hulpmiddelen Om het stelsel vergelijkingen op te lossen met behulp van numerieke hulpmiddelen, kun je de vergelijkingen opschrijven als een matrixformulering \(Ax=b\) die eenvoudig kan worden opgelost door bijvoorbeeld je grafische rekenmachine of in python.

\[\begin{split}\left[\begin{array}{cccccccc}0 & 0 & 0 & 1 & 0 & 0 & 0 & 0\\0 & 1 & 0 & 0 & 0 & 0 & 0 & 0\\0 & 0 & 0 & 0 & - \frac{4}{1875} & - \frac{1}{625} & -4 & 1\\0 & 0 & 0 & 0 & \frac{1}{625} & \frac{1}{1250} & 1 & 0\\- \frac{4}{1875} & - \frac{1}{625} & -4 & 1 & 0 & 0 & 0 & -1\\\frac{1}{625} & \frac{1}{1250} & 1 & 0 & 0 & 0 & -1 & 0\\4 & 1 & 0 & 0 & 0 & -1 & 0 & 0\\1 & 0 & 0 & 0 & -1 & 0 & 0 & 0\end{array}\right] \left[ \begin{array}{cccccccc} C_1\\C_2\\C_3\\C_4\\C_5\\C_6\\C_7\\C_8 \end{array} \right] = \left[\begin{matrix}0\\0\\- \frac{8}{375}\\\frac{8}{375}\\0\\0\\0\\0\end{matrix}\right]\end{split}\]

Hier is uitgelegd hoe je dit op een grafische rekenmachine kan oplossen.

Als alternatief kan een symbolische programmeertaal worden gebruikt om de vergelijkingen exact op te lossen. Als voorbeeld wordt het sympy pakket in Python gebruikt.

Beide opties zijn hieronder getoond

import numpy as np

A = np.array([
    [0, 0, 0, 1, 0, 0, 0, 0],
    [0, 1, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, -4/1875, -1/625, -4, 1],
    [0, 0, 0, 0, 1/625, 1/1250, 1, 0],
    [-4/1875, -1/625, -4, 1, 0, 0, 0, -1],
    [1/625, 1/1250, 1, 0, 0, 0, -1, 0],
    [4, 1, 0, 0, 0, -1, 0, 0],
    [1, 0, 0, 0, -1, 0, 0, 0]
])

b = np.array([
    0,
    0,
    -8/375,
    8/375,
    0,
    0,
    0,
    0
])
np.linalg.solve(A,b)
array([[ 4.37500000e+00],
       [ 0.00000000e+00],
       [-6.66666667e-03],
       [ 0.00000000e+00],
       [ 4.37500000e+00],
       [ 1.75000000e+01],
       [ 3.33333333e-04],
       [ 1.73333333e-02]])
import sympy as sym
sym.init_printing()

x = sym.symbols('x')

q = 10 
EI = 5000 
EA = 20000 
F = 150

q_AC = 0
q_BC = q

C_1, C_2, C_3, C_4 = sym.symbols('C_1 C_2 C_3 C_4')
C_5, C_6, C_7, C_8 = sym.symbols('C_5 C_6 C_7 C_8')

V_AC = -sym.integrate(q_AC, x) + C_1
M_AC = sym.integrate(V_AC, x) + C_2
kappa_AC = M_AC/EI
phi_AC = sym.integrate(kappa_AC, x) + C_3
w_AC = -sym.integrate(phi_AC, x) + C_4

V_BC = -sym.integrate(q_BC, x) + C_5
M_BC = sym.integrate(V_BC, x) + C_6
kappa_BC = M_BC/EI
phi_BC = sym.integrate(kappa_BC, x) + C_7
w_BC = -sym.integrate(phi_BC, x) + C_8

eq1 = sym.Eq(w_AC.subs(x,0),0)
eq2 = sym.Eq(M_AC.subs(x,0),0)
eq3 = sym.Eq(w_BC.subs(x,4),0)
eq4 = sym.Eq(phi_BC.subs(x,4),0)
eq5 = sym.Eq(w_AC.subs(x,4)-w_BC.subs(x,0),0)
eq6 = sym.Eq(phi_AC.subs(x,4)-phi_BC.subs(x,0),0)
eq7 = sym.Eq(M_AC.subs(x,4) - M_BC.subs(x,0),0)
eq8 = sym.Eq(V_AC.subs(x,4) - V_BC.subs(x,0),0)

sol = sym.solve([eq1,eq2,eq3,eq4,eq5,eq6,eq7,eq8],(C_1,C_2,C_3,C_4,C_5,C_6,C_7,C_8))
for k, v in sol.items():
    print(f"{k} = {v}{v.evalf()}")
C_1 = 35/8 ≈ 4.37500000000000
C_2 = 0 ≈ 0
C_3 = -1/150 ≈ -0.00666666666666667
C_4 = 0 ≈ 0
C_5 = 35/8 ≈ 4.37500000000000
C_6 = 35/2 ≈ 17.5000000000000
C_7 = 1/3000 ≈ 0.000333333333333333
C_8 = 13/750 ≈ 0.0173333333333333

Meer voorbeelden#

Het voorbeeld in hoofdstuk 2.7.3 van het boek Mechanica, spanningen, vervormingen en verplaatsingen (Hartsuijker and Welleman, 2016) richt zich op extensie. Voorbeeld 3b in hoofdstuk 8.2 is een buigingsprobleem.

Instructies in collegevorm#

Dit onderwerp is in les 3 gepresenteerd in collegevorm van 0:40:00 tot 0:48:30

Opgaves#