1

我确信这是一个非常基本的问题,但我已经用谷歌搜索并没有找到它。假设我在 sympy 中有一个向量

z = 3*x + 4*y

如何计算向量的 x 分量(即 3)?z/x 不给它(仍然有 y 部分),z[x] 或 zx 也不给它当然有办法做到这一点,对吧?

4

2 回答 2

2

是不是很简单:

>>> from sympy.abc import x, y
>>> z = 3*x + 4*y
>>> z.coeff(x)
3
于 2013-07-17T02:14:07.560 回答
1

我认为将此表达式称为向量有些不正确。事实上,如果你牢记xy是一些基向量的假设,它就会在你的脑海中发挥作用。但是,该库不会提供任何类似矢量的功能,因为它不知道您要将其视为矢量。

对于带有所有不错的辅助方法的向量,您可以使用diffgeomsympy 的子模块,它提供了具有许多坐标系的预定义R^2和空间。R^3

但是,对于您的情况,模式匹配似乎是一个更自然的选择。毕竟,模式匹配是像 Mathematica 等 CAS 的基本构建块之一。

在 SymPy 中,与在所有其他 CAS 中一样,您使用符号表达式,它们基本上是大树,每个节点都有运算符,叶子上有一些符号。您可以将树与一些预定义的模式进行匹配,就像在字符串上使用正则表达式一样。在 sympy 中,您可以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

于 2013-07-16T23:38:57.613 回答