from sympy.physics.units import *
from sympy import *
from sympy import N as Num
import matplotlib.pyplot as plt
from numpy import linspace, full_like, array, arange
from mpmath import degrees
def fill_array(f,x,xia):
if f.is_constant(x):
res = full_like(xia,f)
else:
res = lambdify(x,f,"numpy")
res = array(res(xia))
return res
a, MB, EI = var('a, MB, EI')
print("\n--- a: --------------------------------")
C1, C2, C3, C4 = var('C1, C2, C3, C4')
unknowns = [C1, C2, C3, C4]
x = var("x")
wpppp = 1/EI * 0
wppp = integrate(wpppp,x) + C1
wpp = integrate(wppp,x) + C2
wp = integrate(wpp,x) + C3
w = integrate(wp,x) + C4
for w_ in [wppp, wpp, wp, w]:
w_ = expand(w_)
w_ = collect(w_, EI)
pprint(latex(w_ ))
print("\n--- b: --------------------------------")
bc1 = Eq(w.subs(x,0), 0)
bc2 = Eq(wp.subs(x,0), 0)
bc3 = Eq(- EI * wpp.subs(x,a), MB)
bc4 = Eq(w.subs(x,a), 0)
eqns = [bc1, bc2, bc3, bc4]
sol = solve(eqns, unknowns)
sC1 = sol[C1]
sC2 = sol[C2]
sC3 = sol[C3]
sC4 = sol[C4]
for s in [sC1, sC2, sC3, sC4]:
pprint(latex(s))
print("\n--- c: --------------------------------")
w = w.subs({C1: sC1, C2: sC2, C3: sC3, C4: sC4})
pprint("\nw / ( MB / EI):")
w = expand(w)
w = collect(w, MB/EI)
pprint(latex(w))
print("\n--- d: --------------------------------")
wn = w / ( MB*a*a / EI )
pprint("\nNormalized deflection:")
pprint("\nw / ( MB*a*a / EI ):")
pprint(expand(wn))
wp = diff(w,x)
wpn = wp / ( MB*a / EI )
pprint("\nw' / ( MB*a / EI ):")
pprint(expand(wpn))
xi = var('xi')
f = wn.expand().subs(x/a,xi)
g = wpn.expand().subs(x/a,xi)
xia = linspace(float(0),float(1))
f = fill_array(f,xi,xia)
g = fill_array(g,xi,xia)
tmp = plt.plot(xia, f, "b-", label="$w \\, / \\, \\frac{M^{\\mathsf{B}} a^2}{EI}$")
tmp = plt.plot(xia, g, "r--", label="$w' \\, / \\, \\frac{M^{\\mathsf{B}} a}{EI}$")
tmp = plt.grid()
tmp = plt.axhline(0, color='black')
tmp = plt.xlabel("$x / a$")
tmp = plt.legend()
plt.gca().invert_yaxis()
plt.savefig("2.4.2.E_w.svg", transparent=True)
plt.show()
print("\n--- e: --------------------------------")
eq = Eq(wpn, 0)
sol = solve(eq, x)
pprint("\nSolution of quadratic equation:")
pprint(sol)
wpp=diff(wp,x)
pprint(wpp)
print("\n--- f: --------------------------------")
wmax = w.subs(x,2*a/3)
pprint("\nMax. deflection wmax:")
pprint(wmax)
E = 210 *giga*pascal
I = 4000 *cm**4
MB_ = 1000 *kilo*newton*m
a_ = 4 *m
wmax=wmax.subs({EI: E*I, MB:MB_, a:a_})
pprint(Num(wmax/cm,3))
print("\n--- g: --------------------------------")
wppp=diff(wpp,x)
Q = - EI*wppp.subs(x,0)
pprint("\nVertical forces from beam towards ground:")
pprint("at A:")
pprint(Q)
Q = - EI*wppp.subs(x,a)
pprint("at B:")
pprint(-Q)
print("\n--- h: --------------------------------")
M = - EI*wpp.subs(x,0)
pprint(M)