用SymPy求任意向量的散度

2024-05-28 20:47:18 发布

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

现在我正在尝试编写一个模块,它可以区分向量的任意维数。准确地说,它实际上是n维向量的散度算子。这是我的密码

from sympy import *
q = int(input("State your vector dimensions: "))
n = q+1 

def divergence(f):
"""
Divergence operator for n-dimensions vector
Please write the vector in form of an array
Please use en to indicate dimension
ie: [10*e1+5e*2, 5*e3-10*e2, 45*e3]
"""

    w = symbols ('e1:%d'%n)
    a0 = diff(f[0], w[0])

我需要一个代码来自动生成n个diff函数(我从SymPy导入的)。因此,每当我陈述向量维数时,这个散度模会给出n个数diff函数,并自动将其分别微分到它的维数上。应该是这样的。

假设我的向量由5个维度组成(我从输入中设置)。然后,我将把f写成len(f)=5的数组。我的代码应该自动生成如下代码:

^{pr2}$

每当我设置了一个新的输入,代码就会自动地分别变成输入。我怎样才能做到这一点?在

我写作的原因

w = symbols ('e1:%d'%n)

而不是

w = symbols ('e0:%d'%n)

只是因为它是很传统的,从e1,而不是e0来描述向量的维数。在

实际上,我对SymPy还很陌生,以前从未学过符号计算。所有NumPy基本属性是否也在SymPy中(例如array和cos)?在


Tags: 函数代码diffarray向量dimensionsvectorsymbols
1条回答
网友
1楼 · 发布于 2024-05-28 20:47:18

计算散度的函数需要两样东西:一个向量分量的列表和一个用来区分它们的变量列表。如果没有变量列表,散度的含义就不清楚了:例如,给定向量[t*s, t-s],如何知道第一个分量应该在t还是s中微分?输入[vector],[variables],函数如下:

def divergence(f, x):
    return sum(fi.diff(xi) for fi, xi in zip(f, x))

就像这样

^{pr2}$

旁白:SymPy和NumPy是非常不同的库。SymPy没有任何NumPy向量化方法。使用SymPy时,需要使用列表或元组,而不是NumPy数组。SymPy确实有像“cos”这样的数学函数,但它们是它自己的函数,而不是NumPy的函数。SymPy函数用于SymPy对象,NumPy函数用于NumPy对象。在

相关问题 更多 >

    热门问题