gpt4 book ai didi

python - SymPy 无法计算 *metamorphosed* 向量的点积

转载 作者:行者123 更新时间:2023-12-04 09:49:01 26 4
gpt4 key购买 nike

我正在使用 SymPy vector s:

from sympy import *
from sympy.vector import *
N = CoordSys3D('N')
x = symbols('x')
v = x * N.i + x**2 * N.j
vf=factor(v)
vf1=vf.as_independent(Vector)[1]
type(vf1)
# sympy.core.add.Add

我需要计算 dot(vf1,vf1) .但是 SymPy 不计算点积:
ss = dot(vf1,vf1)
ss
# 1 + 2*Dot(N.i, N.j*x) + Dot(N.j*x, N.j*x)

我怀疑,这是因为 vf1已经变形为另一种类型,即 sympy.core.add.Add )。

有没有办法让 SymPy 评估 ss ?有没有办法投 vf1作为 sympy.vector... ?

编辑

我写了一个做点积的函数。但我需要以 SymPy 方式执行此操作,因此我不必在 sympy.vector 中重新实现我自己的每个函数版本.

最佳答案

是的,as_independent不尊重它正在处理的 Add 或 Mul 类,只使用 Mul/Add (而不是 VectorMul/VectorAdd 在您的情况下)。这可以通过转换来解决:

>>> from sympy.core.rules import Transform
>>> T = Transform(lambda x: (VectorMul if x.is_Mul else VectorAdd)(*x.args),
... lambda x: x.is_Add or x.is_Mul and any(isinstance(i,BaseVector)
... for i in x.args))
>>> vf1.xreplace(T)
N.i + x*N.j
>>> dot(_,_)
x**2 + 1

关于python - SymPy 无法计算 *metamorphosed* 向量的点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62043082/

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