当前位置: 首页 > 面试题库 >

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

越狐若
2023-03-14
问题内容

我知道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月)。由于潜在的GSoC项目,今年夏天它可能会变得更好,但这还不确定。

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

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

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

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



 类似资料:
  • 以下是经典的实践中的一致性: 当线程A写入一个易失性变量,随后线程B读取相同的变量时,A在写入易失性变量之前可见的所有变量的值在读取易失性变量后变得对B可见。 我不确定我真的能理解这句话。例如,在这种情况下,所有变量的含义是什么?这是否意味着使用对使用非volatile变量也有副作用<在我看来,这句话有一些我无法理解的微妙含义<有什么帮助吗?

  • 问题内容: 以下是经典文章Concurency in Practice: 当线程A写入易失性变量,随后线程B读取相同的变量时,在写入易失性变量之前A可见的所有变量的值,在读取易失性变量后B可见。 我不确定我是否真的能理解这一说法。例如,在这种情况下,所有变量的含义是什么?这是否意味着使用volatile还会对非易失性变量的使用产生副作用? 在我看来,该声明具有我无法理解的一些微妙含义。 有什么帮助

  • 问题内容: 我有一个简单的文本输入字段,我必须在其中设置一个对象的默认值,并将其最终值保存在其他对象中。以下代码无法正常工作。 表单是DTO对象,客户端是数据库中的实体对象。 解决这种情况的正确方法是什么? 不工作是指-初始值为client.name =“ Foo”和form.clientName = null。我需要输入字段的显示值为“ Foo”,并在表单提交后将form.clientName值

  • 问题内容: 这是我第一次使用SQLServer 2012,并且我收到的这段代码不起作用: 这段代码有问题: 我有以下三个错误: 问题答案: 您需要替换为,它将起作用 所以这 需要替换为

  • 问题内容: 我需要在其他班上变数。我怎样才能做到这一点? 所以我尝试在Textcl.class中使用,但是得到了。 问题答案: 您将得到空值,因为inString从未按Robert Kilar在注释中正确指出的那样进行初始化。 您可以通过使用类名来引用静态变量。 示例ClassName.variablename。就你而言 运行您的主类。当您运行inString时,将在该类的构造函数中对其进行初始化

  • 我试图在Windows8中使用Spark和Hadoop。然而,无论我的代码是什么,我都会收到以下错误: hadoop主路径为空。我试图将设置为环境变量,但没有解决这个问题。

  • #include <stdio.h> int func(void) { int i = 2; return i; } int main(void) { int a = 0; a = func(); printf("%d\n", a); return 0; } 技巧 在gdb中,可以用“set var variable=expr”命令设置变量