Python 如何检查表达式是否为同向向量

Python 如何检查表达式是否为同向向量,python,sympy,symbolic-math,Python,Sympy,Symbolic Math,如何判断一个辛表达式是否为向量?请参见以下示例: from sympy import * from sympy.vector import * N = CoordSys3D('N') x = symbols('x') v = x * N.i + x**2 * N.j + x**3 * N.k type(v) # sympy.vector.vector.VectorAdd vf=factor(v) vfs = vf.as_ordered_factors() vfs #[x, N.i + N.j*

如何判断一个辛表达式是否为向量?请参见以下示例:

from sympy import *
from sympy.vector import *
N = CoordSys3D('N')
x = symbols('x')
v = x * N.i + x**2 * N.j + x**3 * N.k
type(v)
# sympy.vector.vector.VectorAdd

vf=factor(v)
vfs = vf.as_ordered_factors()
vfs
#[x, N.i + N.j*x + N.k*x**2]

type(vfs[1])
# sympy.core.add.Add

v
进行因子分析后,其因子中没有一个具有
sympy.vector…
类型。我怎样才能知道它的哪一个因子是向量?有测试吗?

SymPy有多种搜索/解析表达式的方法。一些可能对您有用的方法是
as_independent
方法:

>>> vf.as_independent(Vector)
(x, N.i + N.j*x + N.k*x**2)

vf
的向量相关部分将是最右边的元素。

我最近也遇到过类似的问题,但涉及传递函数。因为默认情况下SymPy是如何简化某些表达式的。我得出的结论是,你只需要假设类型可能会随着时间的推移而改变。例如,如果您告诉它在s域中给您传递函数的分母,因为分母可能是单个实数,如
1
15
,它会将其转换为SymPys数字类。所以我的猜测是,要么提前计划某些假设,比如说
,如果这个和那个是一个数字,那么这个
,要么强制将它转换成一些东西。尽管我发现了一些有用的东西:你可以试着检查它的类,然后用默认值来改变它,这能保证吗?换句话说,这是
作为依赖(向量)
的预期(定义)行为吗?是的。如果
vf
是一个向量或在乘积中有一个向量作为因子,则返回元组最右边的参数将是该向量。