我确信这是一个非常基本的问题,但我用Google搜索并没有找到它。假设我有一个同情的载体
z = 3*x + 4*y
如何计算向量的x分量(即3)? z / x没有给它(仍然是y部分),z [x]或z.x也没有。当然有办法做到这一点,对吗?
答案 0 :(得分:2)
是否如此简单:
>>> from sympy.abc import x, y
>>> z = 3*x + 4*y
>>> z.coeff(x)
3
答案 1 :(得分:1)
我认为将此表达式称为向量有点不正确。实际上,如果您认为x
和y
是一些基本向量的假设,它将在您的脑海中 。但是,该库不会提供任何类似矢量的功能,因为它不知道您希望将其视为矢量。
对于包含所有优秀辅助方法的向量,您可以使用sympy的diffgeom
子模块,该子模块提供具有多个坐标系的预定义R^2
和R^3
空间。
但是,对于您的情况,模式匹配似乎是一个更自然的选择。所有模式匹配都是像Mathematica等其他CAS的基本构建块之一。
在SymPy中,就像在所有其他CAS中一样,您使用符号表达式,这些符号表达式基本上是大树,每个节点都有运算符,叶子处有一些符号。您可以将树与某些预定义模式匹配,就像在字符串上使用正则表达式一样。与此同时,您使用Wild
来执行此操作:
x, y = Symbols("x y")
a, b = Wild('a', exclude=[x, y]), Wild('b', exclude=[x, y])
(2*x + 3*y).match(a*x + b*y)
对于线性组合的特殊情况,请检查另一个答案中描述的coeff
。
请参阅:https://github.com/sympy/sympy/wiki/Idioms-and-Antipatterns#wild-and-match