首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python解/解三重方程

python解/解三重方程
EN

Stack Overflow用户
提问于 2017-01-17 01:57:57
回答 4查看 12.1K关注 0票数 3

当我试图用python3中的以下代码求解一个由三个方程组成的方程组时,我总是会出错:

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

以下是错误消息:

追溯(最近一次调用):文件"/usr/lib/python3/dist-packages/mpmath/calculus/optimization.py",第928行,在findroot = f(*x0) TypeError:()中缺少一个必需的位置参数:'_Dummy_15‘

在处理上述异常的过程中,发生了另一个异常:

追溯(最近一次调用):文件“,第1行,在文件”中“,第12行,在文件"/usr/lib/python3/dist-packages/sympy/solvers/solvers.py",第2498行,在nsolve = findroot(f,x0,J=J,**kwargs)文件"/usr/lib/python3/dist-packages/mpmath/calculus/optimization.py",行931,在findroot = f(x0) TypeError:()中,缺少两个必需的位置参数:“_Dummy_14”和“_Dummy_15”

奇怪的是,如果我只解决前两个方程--通过将代码的最后一行改为

代码语言:javascript
复制
print(nsolve( (eq1, eq2), (x,y), (-50,50)))

产出:

代码语言:javascript
复制
exec(open('bug444.py').read())
[-1.5]
[ 1.5]

我很困惑,你的帮助是我最感激的!

一些额外的信息:

  • 我在ubuntu 14.04上使用python3.4.0 +渐近0.7.6-3。我在python2中也有同样的错误
  • 我可以用 解( eq1,eq2,eq3,x,y,z)

但是这个系统只是一个玩具例子,在实际应用中,系统是非线性的,我需要更高的精度,我不知道如何调整解决方案的精度,而对于nsolve,我可以使用nsolve(... , prec=100)

谢谢!

EN

回答 4

Stack Overflow用户

发布于 2017-01-17 02:01:19

在打印语句中,您错过了对z的猜测

代码语言:javascript
复制
print(nsolve((eq1, eq2, eq3), (x, y, z), (-50, 50)))

尝试这样做(在大多数情况下,对于所有猜测都可以使用1 ):

代码语言:javascript
复制
print(nsolve((eq1, eq2, eq3), (x, y, z), (1, 1, 1)))

输出:

代码语言:javascript
复制
[-1.5]
[ 1.5]
[ 1.5]
票数 3
EN

Stack Overflow用户

发布于 2017-01-17 02:05:50

如果使用linsolve,可以放弃最初的猜测/假人。

代码语言:javascript
复制
>>> from sympy import linsolve
>>> print(linsolve((eq1, eq2, eq3), x,y,z))
{(-3/2, 3/2, 3/2)}

然后,您可以使用nonlinsolve对您的非线性问题集。

票数 1
EN

Stack Overflow用户

发布于 2017-01-24 22:19:54

问题是变量的数量应该等于猜测向量的数量,

print(nsolve((eq1, eq2, eq3), (x,y,z), (-50,50,50)))

如果你在多维问题上使用数值解,它想要从某个地方开始,并遵循一个梯度到解。猜测向量是你开始的地方。如果空间中存在多个局部极小/极大值,则不同的猜测向量会导致不同的输出。或者一个不幸的猜测向量可能根本不收敛。对于一维问题,猜测向量就是x0。对于大多数函数,您可以轻松地写下,几乎任何向量都将收敛到一个全局解决方案。

所以(1,1,1)猜测向量和(-50,50,50)一样好,只是为了程序而不留下空空间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41687908

复制
相关文章

相似问题

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