gpt4 book ai didi

python - 在 Sympy 中设置变量相对于其他变量的假设

转载 作者:太空狗 更新时间:2023-10-29 20:46:00 25 4
gpt4 key购买 nike

我知道python中的sympy可以对变量进行假设,比如x是正数,负数,实数,复数等。我想知道sympy是否可以对变量进行相对于其他变量的假设。例如,如果我有变量 x 和 y,我可以将 sympy 设置为在其解决方案中假定 x > y。或者,如果我有两个变量 a 和 B,我可以将 sympy 设置为假设 a + 2B < 1 吗?这些假设可能有助于 sympy 简化 solve() 和特征向量的复杂解决方案。

我查看了所有内容,但没有找到与在 sympy 中设置这些类型的假设相关的信息。

我问是因为我试图找到特定矩阵的特征向量

a,b = symbols('a,b', nonnegative=False)
M = Matrix([ [1-a-2*b, a, b, b],
[a, 1-a-2*b, b, b],
[b, b, 1-a-2*b, a],
[b, b, a, 1-a-2*b] ])

Sympy 正确找到特征值

M.eigenvals()

我已经通过 MATLAB 和 WolframAlpha 确认了这一点,它们都给出了相同的结果。然而,特征向量一团糟

M.eigenvects()

MATLAB 和 WolframAlpha 都返回 [1,1,1,1] [-1,-1,1,1] [0,0,-1,1] [-1,1,0,0] 的特征向量,它们是正确的特征向量。我什至没有尝试简化 sympy 的结果,因为它们非常长且复杂。我怀疑它与变量的假设有关,例如指定 a+2b < 1,但我不确定。

最佳答案

我在想是否要将此作为评论发布,但它太长了:

简短回答:不可用。

SymPy 的假设系统现在有点乱(版本 0.7.2,最新版本截至 2013 年 5 月)。由于 future 的 GSoC 项目,它有可能在今年夏天变得更好,但这还不确定。

SymPy 中实际上有两个假设系统。旧的,它将假设添加到符号本身(因此导致重建表达式树的问题)并在构造函数中调用(例如 Symbol(..., positive=True)),和有一个新的,它基于用于全局假设的全局变量和用于本地假设的上下文管理器(with assume(...):)。

SymPy 中的许多函数确实会检查旧的假设(例如 Abs 将检查是否设置了关键字参数 positive),但仍然可能会遗漏。新的假设系统可能更强大,但目前几乎没有使用(除了最近的子模块)。

在旧的假设系统中,你想要的是不可能的。在新版本中这是可能的,但可能尚未实现并且未在 SymPy 的任何部分中使用。

因此您有两个选择:帮助我们使用假设系统或帮助我们使用矩阵模块。两者都可以使用更多的爱。

关于python - 在 Sympy 中设置变量相对于其他变量的假设,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16431552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com