Python 2.7 是否解决返回类型错误?

Python 2.7 是否解决返回类型错误?,python-2.7,sympy,solver,Python 2.7,Sympy,Solver,我已经写了一个程序来解决一个超越方程使用,但我不断得到一个类型错误。我编写的代码如下: from sympy.solvers import solve from sympy import Symbol import sympy as sp import numpy as np x = Symbol('x',positive=True) def converts(d): M = 1.0 res = solve(-2*M*sp.sqrt(1+2*M/x)-d,x)[0]

我已经写了一个程序来解决一个超越方程使用,但我不断得到一个类型错误。我编写的代码如下:

from sympy.solvers import solve
from sympy import Symbol
import sympy as sp
import numpy as np

x = Symbol('x',positive=True)

def converts(d):
    M = 1.0
    res = solve(-2*M*sp.sqrt(1+2*M/x)-d,x)[0]
    return res
print converts(0.2)
返回以下错误:

raise TypeError('invalid input: %s' % p)
TypeError: invalid input: -2.0*sqrt(1 + 2/x)
我以前用这种方法解过超越方程,但这是我第一次面对这个错误

从我收集的信息来看,Sympy似乎将我的输入视为一个字符串,而不是一个有理数,但我不确定这是不是或者为什么。有人能告诉我为什么会出现这个错误和/或如何修复它吗

编辑:我已经重写了我的代码,使它更清晰,但结果仍然是一样的


是我要解的方程,让我们先重新创建实际方程

from sympy import *
init_printing()
M, x, d = symbols("M, x, d")
eq = Eq(-2*M * sqrt(1 + 2*M/x) - d, 0)
eq
在您的代码中,我们可以替换值:M=1,d=0.2

现在,我们可以尝试直接解决它

solve(to_solve, x)
不幸的是,solve在这种情况下无法找到解决方案。如果我们仔细看看这个方程,平方根部分应该返回一个负数,这个方程才有效

-2 * (-1/10) - 0.2 = 0
因为一个数字的平方根不能是负数,如果我错了,请纠正我,sympy无法找到x的值,因此sqrt1+2/x==-1/10

这个问题是由于我们选择了d和M的值。如果M和d的符号相反,则存在解决方案

to_solve = eq.subs({M:-1, d:0.2})
to_solve
[2.02020202]


运行此代码并尝试其他值。

我已修复括号问题并清除了代码,但仍然得到相同的结果。我已修复括号问题并清除了代码,但仍然得到相同的结果。Solve不会解决此问题,并返回一个空列表。您指的是这一行代码还是一般的solve?如果是前者,我做错了什么?正如我所说,我以前曾多次使用解来解一个超越方程,但这是我第一次遇到这种错误,所以我真的不知道如何继续。理解这个错误的任何帮助都是值得的,我的意思是solve不能解这个特殊的方程。编辑答案以避免歧义。我不熟悉超越方程。不管怎样,为了清晰起见,你能把乳胶版的方程式贴出来吗?我已经添加了一张方程式的图片。我知道它可以解析解,但我想用数值解,然后在左边加上更多的项。超越方程只是一个不是多项式方程的方程,不能这样解。我最初试图解这样一个方程,但当我得到这个类型错误时,我开始切掉一些术语,看看它是否来自任何特定的术语。这是方程中剩下的最后一项——也是非常简单的一项——但即使是这一项也返回了同样的错误,所以我很困惑。
to_solve = eq.subs({M:-1, d:0.2})
to_solve
solve(to_solve, x)