从向量场求向量

2024-05-15 03:25:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我用的是sympy(它太棒了),我刚刚做了一个向量场,像这样

> import sympy
> from sympy.vector import CoordSys3D
> from sympy import *
> R = CoordSys3D('R')
> x, y, z, t = symbols('x y z t')
> v = x*R.i + 4*z*R.j + y*R.k
x*R.i + 4*z*R.j + y*R.k
> v.evalf(subs={x:6, y:5, z:2})
6.00000000000000*R.i + 8.00000000000000*R.j + 5.00000000000000*R.k

我需要的是得到一个向量或列表的形式[6.0,8.0,5.0],那么有没有办法得到一个列表形式v.evalf()?我可以在"6.00000000000000*R.i + 8.00000000000000*R.j + 5.00000000000000*R.k"上使用split或其他方法,但这看起来很难看,也许有一个内置的方法


Tags: 方法fromimport列表向量形式splitsubs
1条回答
网友
1楼 · 发布于 2024-05-15 03:25:08
In [252]: vector = v.evalf(subs={x:6, y:5, z:2}); vector
Out[252]: 6.00000000000000*R.i + 8.00000000000000*R.j + 5.00000000000000*R.k

In [253]: list(vector.to_matrix(R))
Out[253]: [6.00000000000000, 8.00000000000000, 5.00000000000000]

其他可能性包括

In [256]: vector.as_poly().coeffs()
Out[256]: [6.00000000000000, 8.00000000000000, 5.00000000000000]

In [257]: list(vector.components.values())
Out[257]: [5.00000000000000, 8.00000000000000, 6.00000000000000]

但我认为,当一个或多个组件等于0时,它们会暴露出致命的缺陷。例如,如果z设置为0:

In [258]: vector = v.evalf(subs={x:6, y:5, z:0}); vector
Out[258]: 6.00000000000000*R.i + 5.00000000000000*R.k

然后list(vector.to_matrix(R))仍然返回3个组件:

In [259]: list(vector.to_matrix(R))
Out[259]: [6.00000000000000, 0, 5.00000000000000]

另外两个表达式省略了零分量:

In [260]: vector.as_poly().coeffs()
Out[260]: [6.00000000000000, 5.00000000000000]

In [261]: list(vector.components.values())
Out[261]: [5.00000000000000, 6.00000000000000]

相关问题 更多 >

    热门问题