3.3.W
Gegeben
Die Starrkörper 1 und 2 sind drehbar gelagert.
Die Feder verbindet die Starrkörper.
Die Koordinaten \(\varphi\) und \(\psi\) beschreiben eine beliebige Lage der Starrkörper.
Tatsächliche Federverlängerung \(\Delta \ell\):
Für die Lage, die zu \(\varphi=0^\circ\) und \(\psi=0^\circ\) gehört, ist die tatsächliche Federverlängerung:
\[\Delta \ell = 0\]Für die Lage, die zu \(\varphi=30^\circ\) und \(\psi=40^\circ\) gehört (siehe Bild), ist:
\[\Delta \ell \stackrel{\small{0{,}01}}{\approx} 0{,}62\, \mathrm{cm}\]Für die Lage, die zu \(\varphi=6^\circ\) und \(\psi=6^\circ\) gehört, ist:
\[\Delta \ell \stackrel{\small{0{,}01}}{\approx} -1{,}49\, \mathrm{cm}\]
Genäherte Federverlängerung \(\Delta l\):
Bisher ging es um die tatsächliche Federverlängerung \(\Delta \ell\), die für alle Winkel korrekt ist. Die genäherte Federverlängerung \(\Delta \ell\) ist die Linearisierung von \(\Delta \ell\) bei \(\varphi=\psi=0\), die eine gute Näherung ist nur falls beide Winkel betragsmäßig sehr klein sind.
Berechnen Sie diese genäherte Feder-Verlängerung \(\Delta l\) für \(\varphi=6^\circ\) und \(\psi=6^\circ\).
Markieren Sie die wahre Aussage.
\(\Delta l \stackrel{\small{0{,}01}}{\approx} -1{,}57 \, \mathrm{cm}\)
\(\Delta l \stackrel{\small{0{,}01}}{\approx} -1{,}56 \, \mathrm{cm}\)
\(\Delta l \stackrel{\small{0{,}01}}{\approx} -1{,}55 \, \mathrm{cm}\)
\(\Delta l \stackrel{\small{0{,}01}}{\approx} -1{,}54 \, \mathrm{cm}\)
\(\Delta l \stackrel{\small{0{,}01}}{\approx} -1{,}53 \, \mathrm{cm}\)
\(\Delta l \stackrel{\small{0{,}01}}{\approx} -1{,}52 \, \mathrm{cm}\)
\(\Delta l \stackrel{\small{0{,}01}}{\approx} -1{,}51 \, \mathrm{cm}\)
\(\Delta l \stackrel{\small{0{,}01}}{\approx} -1{,}50 \, \mathrm{cm}\)
Source Code eines Programms dazu: Programm ausführen? Dazu: Copy: Source Code in die Zwischenablage kopieren. Paste: Source Code ins Eingabefeld hinter Play: Knopf Lösung
SymPy
from sympy.physics.units import kg, m, s
from sympy import pi, S, pprint, symbols, cos, sin, Matrix, Eq, solve, sqrt, exp
from sympy import diff
# 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
a = symbols("a", positive=True)
phi, psi = symbols("phi, psi", real=True)
# User Input:
prec = 2
sub_list = [
( a, 10 *cm ),
( phi, 6 *deg ),
( psi, 6 *deg ),
]
# End of User Input:
c1, s1 = cos(phi), sin(phi)
c2, s2 = cos(psi), sin(psi)
R1 = Matrix([
[c1, -s1],
[s1, c1]
])
R2 = Matrix([
[c2, -s2],
[s2, c2]
])
rA = a*Matrix([half, -1])
rB = a*Matrix([0, half])
pprint("\nuA / cm:")
uA = R1*rA - rA
printout(uA, unit=cm, prec=prec, sub_list=sub_list)
pprint("\nuB / cm:")
uB = R2*rB - rB
printout(uB, unit=cm, prec=prec, sub_list=sub_list)
# Vector from A to B:
dAB = a*Matrix([half, 0])
dABp = -uA + dAB + uB
dl = - half*a
pprint("\nl / cm:")
l = dAB.norm()
printout(l, unit=cm, prec=prec, sub_list=sub_list)
pprint("\nl' / cm:")
lp = dABp.norm()
printout(lp, unit=cm, prec=prec, sub_list=sub_list)
pprint("\nΔℓ / cm:")
dl = lp - l
printout(dl, unit=cm, prec=prec, sub_list=sub_list)
pprint("\nΔl:")
# Taylor
at_zero = [(phi, 0), (psi,0)]
dl1 = diff(dl, phi).subs(at_zero)
dl2 = diff(dl, psi).subs(at_zero)
dl_lin = 0 + dl1*phi + dl2*psi
pprint(dl_lin)
pprint("\nΔl / cm:")
printout(dl_lin, unit=cm, prec=prec, sub_list=sub_list)
[ ]: einfügen.▶ drücken.