首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sympy solve()找不到解决方案

sympy solve()找不到解决方案
EN

Stack Overflow用户
提问于 2014-04-18 11:20:18
回答 1查看 2K关注 0票数 2

我现在有一个相当基本的代码,应该可以解决下面所示的方程,但它没有收敛到解决方案。它就挂在一个脉动的"_“

代码语言:javascript
运行
复制
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)

只需打印公式即可得到以下结果

代码语言:javascript
运行
复制
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

如果渐近不能用来解这个方程,我可以用什么来代替呢?

谢谢

菲尔

EN

回答 1

Stack Overflow用户

发布于 2014-04-19 07:49:46

如果你只关心数值解,不要使用solve。它正在努力寻找一个象征性的解决方案。但是,多项式的符号解通常是相当复杂的,通常它们并不存在。

如果您只想要一个数值解决方案,请使用nsolve

代码语言:javascript
运行
复制
In [60]: nsolve(eqn, 0)
Out[60]: mpc(real='0.69625557901731519', imag='-3.4211388289180104e-49')

(0是对解决方案的猜测)。虚构的部分小到可以忽略不计。您可以使用N(solution, chop=True)将其删除。

如果你真的关心符号解决方案,另一个建议是避免浮点指数。使用有理指数或整数指数。为了从符号上找到多项式的根,必须首先将其转换为实际的多项式,即具有整数系数的多项式。这意味着浮点系数必须转换为有理数。但这通常会导致巨大的数字,从而导致非常大的程度(我怀疑这就是为什么这最终会对你造成影响,请考虑:

代码语言:javascript
运行
复制
In [61]: gamma
Out[61]: 1.4

In [62]: Rational(gamma)
Out[62]:
3152519739159347
────────────────
2251799813685248
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23146856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档