我想知道曲柄杆应用的最坏情况。 连杆中的力 Ft 由下式给出:
我想知道它的最大值。
我尝试在 Wolfram Alpha 或 SymPy 上解决它。请参阅以下代码:
import sympy as sym
# import numpy as np
r, l, A = sym.symbols('r, l, A', positive = 'True')
B= sym.asin(r/l*sym.sin(A))
f = sym.simplify(sym.sin(A+B)/sym.cos(B))
df=sym.simplify(sym.diff(f,A))
sln=sym.solveset(df,A, sym.Interval(0, sym.pi))
它给了我,那个
Complement(ConditionSet(_R, Eq((-l + r*sin(_R))**2*(l + r*sin(_R))**2*(l**4*cos(_R + asin(r*sin(_R)/l))**2 - 2*l**2*r**2*sin(_R)**2*cos(_R + asin(r*sin(_R)/l))**2 + 2*l**2*r**2*sin(_R)*sin(_R + asin(r*sin(_R)/l))*cos(_R)*cos(_R + asin(r*sin(_R)/l)) - l**2*r**2*cos(_R)**2*cos(_R + asin(r*sin(_R)/l))**2 + r**4*sin(_R)**4*cos(_R + asin(r*sin(_R)/l))**2 - 2*r**4*sin(_R)**3*sin(_R + asin(r*sin(_R)/l))*cos(_R)*cos(_R + asin(r*sin(_R)/l)) + r**4*sin(_R)**2*sin(_R + asin(r*sin(_R)/l))**2*cos(_R)**2 + r**4*sin(_R)**2*cos(_R)**2*cos(_R + asin(r*sin(_R)/l))**2), 0), Interval(0, pi)), Union(Intersection({0}, ImageSet(Lambda(_n, -I*(I*(2*_n*pi + arg(sqrt(-2*l**2 - 2*l*sqrt(l - r)*sqrt(l + r) + r**2))) + log(Abs(sqrt(-2*l*sqrt(l - r)*sqrt(l + r)/r**2 + (-2*l**2 + r**2)/r**2))))), Interval(0, pi))), Intersection({0}, ImageSet(Lambda(_n, -I*(I*(2*_n*pi + arg(sqrt(-2*l**2 + 2*l*sqrt(l - r)*sqrt(l + r) + r**2))) + log(Abs(sqrt(2*l*sqrt(l - r)*sqrt(l + r)/r**2 + (-2*l**2 + r**2)/r**2))))), Interval(0, pi))), Intersection({0}, ImageSet(Lambda(_n, -I*(I*(2*_n*pi + arg(-sqrt(-2*l**2 - 2*l*sqrt(l - r)*sqrt(l + r) + r**2))) + log(Abs(sqrt(-2*l*sqrt(l - r)*sqrt(l + r)/r**2 + (-2*l**2 + r**2)/r**2))))), Interval(0, pi))), Intersection({0}, ImageSet(Lambda(_n, -I*(I*(2*_n*pi + arg(-sqrt(-2*l**2 + 2*l*sqrt(l - r)*sqrt(l + r) + r**2))) + log(Abs(sqrt(2*l*sqrt(l - r)*sqrt(l + r)/r**2 - (2*l**2 - r**2)/r**2))))), Interval(0, pi)))))
我不知道 _n 和 Lambda 是什么?
你能帮我吗?
from sympy import *
r, l, A = sym.symbols('r, l, A', positive = 'True')
B= sym.asin(r/l*sym.sin(A))
f = sym.simplify(sym.sin(A+B)/sym.cos(B))
df=sym.simplify(sym.diff(f,A))
# replace r/l with L and expand trig funcs and rewrite in terms of tan
# and then replace tan(A/2) with x
eq=df.subs(r,l*L).factor().expand(trig=True).rewrite(tan).subs(tan(A/2)**2,x)
# take the numerator and factor - it gives 3 terms
# look to see what was being solved
z = list(ordered(eq.as_numer_denom()[0].factor().args))
print(solve(z[0].base,x))
print(solve(z[1].base,x))
# remove the big sqrt expression from z[2]
from sympy.solvers.solvers import unrad
u = unrad(z[2],x)[0] # there is no change of var
# extend z with the new x-containing factors
z[-1:]=collect(u.factor(),L).as_independent(x)[1].args
print(solve(z[2].base,x))
这给出了
x
的 3 个简单解,定义为 tan(A/2)
:
[-1]
[2*L**2 - 2*L*sqrt(L**2 - 1) - 1, 2*L**2 + 2*L*sqrt(L**2 - 1) - 1]
[-1]
z[3]
是 L**2
中的二次项,并且是 x
中的六阶多项式。对于给定的L
,很容易获得解决方案,但如果您解决L**2
,则只能获得隐式解决方案:
>>> [i.n(3) for i in real_roots(z[-1].subs(L,S.Half))] # r/l = L in [0,1]
[-2.99, -0.335, 0.450, 2.22]
现在根据上述定义解决
A
的问题。