我现在有一个相当基本的代码,应该可以解决下面所示的方程,但它没有收敛到解决方案。它就挂在一个脉动的"_“
from sympy import *
gamma = 1.4
M_a = 1.0
y = Symbol('y', real=True)
eqn = Eq((1.0/((gamma/2.0)*(y**2.0))) * ((((1.0 + ((gamma - 1.0)/2.0)*(y**2.0))/(1.0 + ((gamma - 1.0)/2.0)*(M_a**2.0)))**(gamma/(gamma - 1.0))) - 1.0) ,(-0.5704/((1.0 - (y**2.0))**(1.0/2.0))))
print solve(eqn, y)
只需打印公式即可得到以下结果
1.42857142857143*y**(-2.0)*((0.166666666666667*y**2.0 + 0.833333333333333)**3.5- 1.0) == -0.5704*(-y**2.0 + 1.0)**(-0.5)
当插入wolfram或maple时,它会产生正确的解决方案。~= 0.696256
所以我试着找出为什么渐近不能解这个方程。
等式应该类似于下面的Picture
如果渐近不能用来解这个方程,我可以用什么来代替呢?
谢谢
菲尔
发布于 2014-04-19 07:49:46
如果你只关心数值解,不要使用solve
。它正在努力寻找一个象征性的解决方案。但是,多项式的符号解通常是相当复杂的,通常它们并不存在。
如果您只想要一个数值解决方案,请使用nsolve
In [60]: nsolve(eqn, 0)
Out[60]: mpc(real='0.69625557901731519', imag='-3.4211388289180104e-49')
(0是对解决方案的猜测)。虚构的部分小到可以忽略不计。您可以使用N(solution, chop=True)
将其删除。
如果你真的关心符号解决方案,另一个建议是避免浮点指数。使用有理指数或整数指数。为了从符号上找到多项式的根,必须首先将其转换为实际的多项式,即具有整数系数的多项式。这意味着浮点系数必须转换为有理数。但这通常会导致巨大的数字,从而导致非常大的程度(我怀疑这就是为什么这最终会对你造成影响,请考虑:
In [61]: gamma
Out[61]: 1.4
In [62]: Rational(gamma)
Out[62]:
3152519739159347
────────────────
2251799813685248
https://stackoverflow.com/questions/23146856
复制相似问题