2015-07-04 91 views
14

结果为了我解决了使用sympy二次方程:根据一些测试,我想通了,只有q_solve[0]也有物理意义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) 

。 sympy总是会把(b - sqrt(b**2 - 4*a*c))/2a放在首位?我想,它可能会因升级而改变?

+0

上面定义的参数(q,qm,k,...)中的哪一个应该是正数,你如何定义“物理意义”以及你做了哪种测试,你使用了哪种类型的数值, ...? – Cleb

+0

我知道q_solve应该是正数,q_solve应该是小qm。 – Moritz

+0

而且没有固定值(c0可能是光速)?或者其他大于0的变量?你测试哪些值? – Cleb

回答

5

一个简单的测试来回答你的问题是使用每低于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长期的负号消失作为变量的迹象解

内分布的结果
+0

是的,这就是我所做的。我很好奇,如果我可能会遇到麻烦,因为我依赖于我能找到的文档中的 – Moritz

+0

,我相信这是一般约定 – bern