2.1.B
Berechnen Sie:
die Stabkräfte \(S_1, S_2\),
jeweils in \(\mathrm{kN}\) (Kilonewton) und gerundet auf Rundestellenwert \(0{,}01\),die (genäherten) Stabverlängerungen \(\Delta l_1\) und \(\Delta l_2\),
jeweils in \(\mathrm{mm}\) (Millimeter),die Verschiebung des oberen Gelenks nach rechts sowie nach oben,
jeweils in \(\mathrm{mm}\) (Millimeter) und gerundet auf Rundestellenwert \(0{,}0001.\)
Und zwar für die Größen:
\[\begin{split}E &= 200 \, \mathrm{GPa} \\ A &= 10 \, \mathrm{cm}^2 \\ a &= 1 \, \mathrm{m} \\ F &= 1000 \, \mathrm{N}\end{split}\]
Hinter jeder nummerierten Gleichung in Klammern: Gleichungsnummer und darin enthaltene neue Unbekannte. Source Code eines Programms dazu: Programm ausführen? Dazu: Copy: Source Code in die Zwischenablage kopieren. Paste: Source Code ins Eingabefeld hinter Play: Knopf Ausgangspunkt sind 14 Gleichungen mit 14 Unbekannten. Man kann schrittweise vorgehen, und eine nach der anderen Unbekannten eliminieren und damit die Anzahl der Unbekannten reduzieren. Zuerst die Gleichungen zu den Zwängen verwenden, um die 4 Unbekannten \(u_{1x}, u_{1y}, u_{2x}, u_{2y}\) aus den Gleichungen (13) und (14) zu eliminieren. Damit entfallen die Gleichungen (1) bis (4). Und aus (13) und (14) wird: Es verbleiben: 10 Gleichungen mit 10 Unbekannten. \(\Delta l_1\) aus (13a) sowie \(\Delta l_2\) aus (14a) einsetzen in (11) und (12), um die 2 Unbekannten \(\Delta l_1, \Delta l_2\) zu eliminieren. Damit entfallen die Gleichungen (13a) und (14a). Und aus (11) und (12) wird: mit der Abkürzung \(k=\tfrac{EA}{a}.\) Es verbleiben: Die 8 Gleichungen (5-10) sowie (11a, 12a) mit 8 Unbekannten. \(S_1\) aus (11a) sowie \(S_2\) aus (12a) einsetzen in die 6 Gleichungen (5) bis (10), um die 2 Unbekannten \(S_1, S_2\) zu eliminieren. Damit entfallen die Gleichungen (11a) und (12a). Und aus den Gleichungen (5) bis (10) wird: Es verbleiben: Diese 6 Gleichungen (5a-10a) mit den 6 Unbekannten \(R_{1x}, R_{1y}, R_{2x}, R_{2y}, u_{3x}, u_{3y}.\) Wegen (5a) gilt: Es verbleiben: Die 5 Gleichungen (6a-10a) mit den 5 Unbekannten \(R_{1y}, R_{2x}, R_{2y}, u_{3x}, u_{3y}.\) Wegen (6a) gilt \(k u_{3y}= - R_{1y}.\) Letzteres verwenden, um \(k u_{3y}\) aus den Gleichungen (7a) bis (10a) zu eliminieren. Damit entfällt (6a). Und es bleibt: Es verbleiben: Diese 4 Gleichungen mit den 4 Unbekannten \(R_{1y}, R_{2x}, R_{2y}, u_{3x}.\) Aus der Addition (8b) + (10b) erkennt man, dass \(R_{2y}= - R_{1y}.\) Dieses \(R_{2y}\) einsetzen in (8b), um \(R_{2y}\) zu eliminieren. Damit entfällt (10b). Und es bleibt: Und das sind 3 Gleichungen für \(R_{1y}, R_{2x}, u_{3x}.\) Dieselben Gleichungen lassen sich aus wie folgt schreiben: Wegen (7b) und (8c) gilt \(\tfrac 1 2 R_{2x}=- R_{1y}.\) Und (8c) und (9c) lassen sich kürzer schreiben: Das sind immer noch 3 Gleichungen für \(R_{1y}, R_{2x}, u_{3x}.\) Aber jetzt lässt sich \(R_{1y}\) berechnen aus (8c) - (9c). Und es ergibt sich: Jetzt wird rückwärts eingesetzt: \(R_{1y} = \tfrac 1 2 F\) einsetzen in (9c) liefert: \(R_{1y} = \tfrac 1 2 F\) einsetzen in (7c) liefert: Schritt 5 von oben führte auf \(R_{2y}= - R_{1y}\). Und mit dem jetzt berechneten \(R_{1y}= \tfrac 1 2 F\) gilt: \(R_{1y} = \tfrac 1 2 F\) einsetzen in (6c) liefert: \(u_{3y}\) einsetzen in (13a) liefert: \(u_{3y}\) sowie das berechnete \(u_{3x}\) einsetzen in (14a) liefert: \(u_{3y}\) einsetzen in (11a) liefert: \(u_{3x}\) und \(u_{3y}\) einsetzen in (12a) liefert:Vollständige Lösung mit 2·k + 2·s + r = 14 Gleichungen und Unbekannten auf einer Seite
SymPy
from sympy.physics.units import kg, m, s
from sympy import pi, S, pprint, symbols, cos, sin, Matrix, Eq, solve, sqrt, exp
# Units:
N = kg*m/s**2
k, M, G = 10**3, 10**6, 10**9
kN = k*N
Pa = N/m**2
MPa, GPa = M*Pa, G*Pa
deg = pi/180
half = S(1)/2
# Rounding:
def iso_round(x, pv):
try:
x = float(x)
tmp = round(x, pv)
except TypeError:
x = x.evalf()
from functools import partial
func = partial(round, ndigits = pv)
tmp = x.applyfunc(func)
return tmp
# Printing:
def printout_sol(sol, unit=1, unit_str=None, prec="nil", sub_list=[]):
for s in sol:
if unit_str:
print("\n"+str(s) + " / " + unit_str + ":")
else:
print("\n"+str(s) + ":")
x = sol[s]
x = x.subs(sub_list)
x /= unit
try:
x = x.applyfunc(simplify)
except:
x = x.simplify()
if prec != "nil":
x = iso_round(x, prec)
pprint(x)
return
# Given Symbols:
a, EA, F = symbols("a, EA, F")
# Unknowns:
S1,S2,dl1,dl2 = symbols("S1,S2,dl1,dl2")
u1x,u1y,u2x,u2y,u3x,u3y = symbols("u1x,u1y,u2x,u2y,u3x,u3y")
R1x,R1y,R2x,R2y = symbols("R1x,R1y,R2x,R2y")
# Displacements:
u1 = Matrix([u1x, u1y])
u2 = Matrix([u2x, u2y])
u3 = Matrix([u3x, u3y])
# External Forces:
R1 = Matrix([R1x, R1y])
R2 = Matrix([R2x, R2y])
F3 = Matrix([F, 0])
# Unit Vectors:
e1 = Matrix([0, 1])
w5 = sqrt(5)
e2 = Matrix([2 / w5, 1 / w5])
Zero = Matrix([0, 0])
# Equations
eq_1_2 = Eq(u1, Zero)
eq_3_4 = Eq(u2, Zero)
eq_5_6 = Eq(R1 + S1*e1, Zero)
eq_7_8 = Eq(R2 + S2*e2, Zero)
eq_9_10 = Eq(F3 - S1*e1 - S2*e2, Zero)
eq_11 = Eq(S1, EA * dl1/a )
eq_12 = Eq(S2, EA * dl2 / (w5*a) )
eq_13 = Eq(dl1, e1.dot(u3 - u1))
eq_14 = Eq(dl2, e2.dot(u3 - u2))
# Linear System:
eqns = [eq_1_2,eq_3_4,eq_5_6,eq_7_8,eq_9_10,eq_11,eq_12,eq_13,eq_14]
unks = [S1,S2, dl1,dl2, u1x,u1y,u2x,u2y,u3x,u3y, R1x,R1y,R2x,R2y]
sol = solve(eqns, unks)
printout_sol(sol, unit=F, unit_str="F", prec="nil", sub_list=[])
[ ]: einfügen.▶ drücken.Von-Hand-Lösung des Linearen Gleichungssystems
Hinter jeder nummerierten Gleichung in Klammern: Gleichungsnummer und darin enthaltene neue Unbekannte. Source Code eines Programms dazu: Programm ausführen? Dazu: Copy: Source Code in die Zwischenablage kopieren. Paste: Source Code ins Eingabefeld hinter Play: Knopf Unvollständige Lösung mit 2·k + 2·s - r = 6 Gleichungen und Unbekannten auf einer Seite
SymPy
from sympy.physics.units import kg, m, s
from sympy import pi, S, pprint, symbols, cos, sin, Matrix, Eq, solve, sqrt, exp
# Units:
N = kg*m/s**2
k, M, G = 10**3, 10**6, 10**9
kN = k*N
Pa = N/m**2
MPa, GPa = M*Pa, G*Pa
deg = pi/180
half = S(1)/2
cm = m/100
mm = m/1000
# Rounding:
def iso_round(x, pv):
try:
x = float(x)
tmp = round(x, pv)
except TypeError:
x = x.evalf()
from functools import partial
func = partial(round, ndigits = pv)
tmp = x.applyfunc(func)
return tmp
# Printing:
def printout(x, unit=1, prec="nil", sub_list=[]):
x = x.subs(sub_list)
x /= unit
try:
x = x.applyfunc(simplify)
except:
tmp = x.simplify()
if tmp != None:
x = tmp
if prec != "nil":
x = iso_round(x, prec)
pprint(x)
return
# ---
EA, a, F = symbols("EA, a, F")
sub_list = [
( EA, 200*GPa * 10*cm**2 ),
( a, 1 *m ),
( F, 1000 *N ),
]
l1, l2 = a, sqrt(5)*a
u3x,u3y,dl1,dl2,S1,S2 = symbols("u3x,u3y,dl1,dl2,S1,S2")
unks = [u3x,u3y,dl1,dl2,S1,S2]
w5 = sqrt(5)
c1, s1 = 0, 1
c2, s2 = 2/w5, 1/w5
u3 = Matrix([u3x, u3y])
e1 = Matrix([c1, s1])
e2 = Matrix([c2, s2])
# Equations:
eq1 = Eq(S2*c2, F)
eq2 = Eq(S2*s2 + S1, 0)
eq3 = Eq(dl1, e1.dot(u3))
eq4 = Eq(dl2, e2.dot(u3))
eq5 = Eq(dl1, S1/EA*l1)
eq6 = Eq(dl2, S2/EA*l2)
# Linear system:
eqns = [eq1,eq2,eq3,eq4,eq5,eq6]
sol = solve(eqns, unks)
pprint(sol)
S1, S2 = sol[S1],sol[S2]
dl1, dl2 = sol[dl1], sol[dl2]
u3x, u3y = sol[u3x], sol[u3y]
pprint("\n(S1, S2) / kN:")
for S in [S1, S2]:
printout(S, unit=kN, prec=2, sub_list=sub_list)
pprint("\n(dl₁, dl₂) / mm:")
for dl in [dl1, dl2]:
printout(dl, unit=mm, prec=7, sub_list=sub_list)
pprint("\n(u3x, u3y) / mm:")
for u in [u3x, u3y]:
printout(u, unit=mm, prec=4, sub_list=sub_list)
print("\nChecking u3x:")
print("\n(S1, S2):")
S2 = F / c2
S1 = - S2*s2
pprint(S1)
pprint(S2)
print("\nW:")
W = half/EA*(S1*S1*l1 + S2*S2*l2)
pprint(W)
print("\nu3x / mm:")
u3x = symbols("u3x")
eq = Eq(half*F*u3x, W)
sol = solve(eq, u3x)
u3x = sol[0]
printout(u3x, unit=mm, prec=4, sub_list=sub_list)
[ ]: einfügen.▶ drücken.