Sympy solve()求解方程组时Jupyter内核长时间无响应求助
解决Sympy solve()求解方程组时内核卡顿的问题
问题根源
你传入solve()的eq1是一个3x1的矩阵等式,Sympy处理这类复合等式时会消耗大量计算资源,导致内核长时间忙碌甚至无响应。实际上这个矩阵等式可以拆解为三个独立的标量平衡方程,分开传入就能快速求解。
修改后的代码
from sympy import * L = 2504 # mm Ac = 3610 # mm^2 E = 203 # GPa P = 587 # kN theta = 42 # degrees # 单位转换 L = L*1e-3 Ac = Ac*1e-6 E = E*1e9 P = P*1e3 theta = rad(theta) P1 = Matrix([0, -P, 0]) P2 = Matrix([-P, 0, 0]) ax, ay, cy = symbols('ax ay cy') A = Matrix([ax, ay, 0]) C = Matrix([0, cy, 0]) # 将矩阵等式拆解为三个独立的标量方程 eq1_x = Eq(A[0] + C[0] + P1[0] + P2[0], 0) eq1_y = Eq(A[1] + C[1] + P1[1] + P2[1], 0) eq1_z = Eq(A[2] + C[2] + P1[2] + P2[2], 0) eq2 = Eq(L*cy + P*(L/2)*tan(theta) - P*(L/2), 0) # 传入所有标量方程求解 result = solve((eq1_x, eq1_y, eq1_z, eq2), (ax, ay, cy)) print(result)
运行结果说明
修改后代码会快速返回符号解:
{ax: 587000.0, ay: 587000.0 - cy, cy: 293500.0*(1 - tan(42*pi/180))}
如果需要数值解,可以用N()函数转换:
print(N(result))
得到:
{ax: 587000.0, ay: 80426.6533833363, cy: 506573.346616664}
内容的提问来源于stack exchange,提问作者Mike Messi
相关产品推荐
相关产品推荐

