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)
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.
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.
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.
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
sympypakket inPythongebruikt:
Als voorbeeld bepalen we de een simpele statisch onbepaalde constructie:
Voorbeeld
Gegeven een constructie zoals hieronder weergegeven:
Fig. 54 Constructie, \(EI = 5000 \ \rm{kNm^2}\)#
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:
Fig. 55 Vrijlichaamdiagram element AC#
Voor BC leidt dit tot:
Fig. 56 Vrijlichaamdiagram element BC#
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:
wat leidt tot de vergelijkingen:
Vanwege de oplegging bij A kan een randvoorwaarde worden geformuleerd als:
Omdat A ook een onbelast uiteinde is, kan een andere randvoorwaarde worden geformuleerd als:
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:
wat leidt tot de vergelijkingen:
Vanwege de inklemming bij B kunnen twee randvoorwaarden direct worden geformuleerd:
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:
Ten slotte moet er ook consistentie zijn met de snedekrachten, zoals getoond in het vrijlichaamdiagram:
Fig. 57 Vrijlichaamdiagram knoop C#
Verticaal evenwicht geeft:
Momentevenwicht geeft:
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
sympypakket inPythongebruikt:
Voorbeeld
Er zijn 8 randvoorwaarden geformuleerd met 8 integratieconstanten. Deze kunnen nu worden opgelost.
Het invullen van de randvoorwaarden geeft:
Het oplossen hiervan geeft:
Nu is de volledige krachtenverdeling en verplaatsingen van de constructie opgelost. Bijvoorbeeld de momentenverdeling in BC die kan worden uitgezet als:
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.
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#
Opgaves 2.48 en 2.50 in hoofdstuk 2.9 van het boek Mechanica: spanningen, vervormingen en verplaatsingen (Hartsuijker and Welleman, 2016), antwoorden zijn beschikbaar op deze website.
Opgaves 8.7, 8.10, 8.11 in hoofdstuk 8.6 van het boek Mechanica: spanningen, vervormingen en verplaatsingen (Hartsuijker and Welleman, 2016), antwoorden zijn beschikbaar op deze website.