sympy:求解二次方程的结果顺序
sympy: order of result from solving a quadratic equation
我用 sympy 求解了一个二次方程:
import sympy as sp
q,qm,k,c0,c,vt,vm = sp.symbols('q qm k c0 c vt vm')
c = ( c0 * vt - q * vm) / vt
eq1 = sp.Eq(qm * k * c / (1 + k * c) ,q)
q_solve = sp.solve(eq1,q)
根据一些测试,我发现只有 q_solve[0]
具有物理意义。 sympy 总是会把 (b - sqrt(b**2 - 4*a*c))/2a
放在第一位吗?我想,它可能会随着升级而改变?
回答您的问题的一个简单测试是使用以下 sympy 符号求解二次方程:
import sympy as sp
a, b, c, x = sp.symbols('a b c x')
solve( a*x**2 + b*x + c, x)
结果如下:
[(-b + sqrt(-4*a*c + b**2))/(2*a), -(b + sqrt(-4*a*c + b**2))/(2*a)]
这让我相信一般来说顺序是首先是 + sqrt()
解决方案,然后是 - sqrt()
解决方案。
对于你的程序 q_solve[0]
给你:
(c0*k*vt + k*qm*vm + vt - sqrt(c0**2*k**2*vt**2 - 2*c0*k**2*qm*vm*vt + 2*c0*k*vt**2 + k**2*qm**2*vm**2 + 2*k*qm*vm*vt + vt**2))/(2*k*vm)
这仍然是 x= (-b + sqrt(b**2-4*a*c))/(2*a)
答案,b
项中的负号由于解决方案中变量符号的分布而消失
我用 sympy 求解了一个二次方程:
import sympy as sp
q,qm,k,c0,c,vt,vm = sp.symbols('q qm k c0 c vt vm')
c = ( c0 * vt - q * vm) / vt
eq1 = sp.Eq(qm * k * c / (1 + k * c) ,q)
q_solve = sp.solve(eq1,q)
根据一些测试,我发现只有 q_solve[0]
具有物理意义。 sympy 总是会把 (b - sqrt(b**2 - 4*a*c))/2a
放在第一位吗?我想,它可能会随着升级而改变?
回答您的问题的一个简单测试是使用以下 sympy 符号求解二次方程:
import sympy as sp
a, b, c, x = sp.symbols('a b c x')
solve( a*x**2 + b*x + c, x)
结果如下:
[(-b + sqrt(-4*a*c + b**2))/(2*a), -(b + sqrt(-4*a*c + b**2))/(2*a)]
这让我相信一般来说顺序是首先是 + sqrt()
解决方案,然后是 - sqrt()
解决方案。
对于你的程序 q_solve[0]
给你:
(c0*k*vt + k*qm*vm + vt - sqrt(c0**2*k**2*vt**2 - 2*c0*k**2*qm*vm*vt + 2*c0*k*vt**2 + k**2*qm**2*vm**2 + 2*k*qm*vm*vt + vt**2))/(2*k*vm)
这仍然是 x= (-b + sqrt(b**2-4*a*c))/(2*a)
答案,b
项中的负号由于解决方案中变量符号的分布而消失