【发布时间】:2017-01-17 01:57:57
【问题描述】:
当我尝试在 python3 中使用以下代码求解一个由三个方程组成的系统时,我不断收到错误:
import sympy
from sympy import Symbol, solve, nsolve
x = Symbol('x')
y = Symbol('y')
z = Symbol('z')
eq1 = x - y + 3
eq2 = x + y
eq3 = z - y
print(nsolve( (eq1, eq2, eq3), (x,y,z), (-50,50)))
这是错误信息:
Traceback(最近一次调用最后一次): 文件 “/usr/lib/python3/dist-packages/mpmath/calculus/optimization.py”,行 928,在 findroot 中 fx = f(*x0) TypeError: () 缺少 1 个必需的位置参数: '_Dummy_15'
在处理上述异常的过程中,又发生了一个异常:
Traceback(最近一次调用最后一次):文件“”,第 1 行,in 文件“”,第 12 行,在文件中 “/usr/lib/python3/dist-packages/sympy/solvers/solvers.py”,第 2498 行, 在解决 x = findroot(f, x0, J=J, **kwargs) 文件 “/usr/lib/python3/dist-packages/mpmath/calculus/optimization.py”,行 931,在 findroot 中 fx = f(x0[0]) TypeError: () 缺少 2 个必需的位置参数: “_Dummy_14”和“_Dummy_15”
奇怪的是,如果我只解决前两个等式,错误消息就会消失 --- 通过将代码的最后一行更改为
print(nsolve( (eq1, eq2), (x,y), (-50,50)))
输出:
exec(open('bug444.py').read())
[-1.5]
[ 1.5]
我很困惑;非常感谢您的帮助!
一些附加信息:
我在 ubuntu 14.04 上使用 python3.4.0 + sympy 0.7.6-3。我在 python2 中遇到了同样的错误
-
我可以用
解决这个系统求解( [eq1,eq2,eq3], [x,y,z] )
但这个系统只是一个玩具示例;在实际应用中,系统是非线性的,我需要更高的精度,我不知道如何调整精度来求解,而对于 nsolve,我可以使用nsolve(... , prec=100)
谢谢!
【问题讨论】:
-
对了,你应该知道在
nsolve中设置精度需要git版本的SymPy。