如何用SymPy求解符号比例?代码无法得到预期结果求助
问题分析与解决
你的代码有两个关键问题导致无法得到预期结果:
- 求解变量不被识别:
sympy.solve无法直接把Q/q当作待求解变量,需要先将这个比值定义为新的符号变量。 - 平衡条件未明确:原代码仅计算了两个力的和,但实际需求是受力平衡(合力为0),需要明确写出等式
Eqn = sy.Eq(F21 + F41i, 0)。
另外,方程中的K、a²、sy.I(矢量方向分量)均不为0,可以提前约去,简化计算过程。
修正后的代码
import sympy as sy q, Q, a, K = sy.symbols('q Q a K') # 定义目标变量x = Q/q x = sy.symbols('x') F21 = K * q * Q / a**2 * (-sy.I) F41i = K * Q * Q / (2*a**2) * 1/sy.sqrt(2) * (sy.I) # 建立受力平衡方程:合力等于0 eq = sy.Eq(F21 + F41i, 0) # 将Q替换为x*q,把方程转化为关于x的形式 eq_x = eq.subs(Q, x*q) # 约去非零项K*q*I/a²,简化方程 simplified_eq = sy.simplify(eq_x / (K * q * sy.I / a**2)) # 求解x ans = sy.solve(simplified_eq, x) print(ans)
运行结果
执行代码后会输出[2*sqrt(2)],与预期的Q/q = 2√2完全一致。
内容的提问来源于stack exchange,提问作者KitingPaul
相关产品推荐
相关产品推荐

