什么是同情的索引对象?

Nir*_*bag 2 python sympy

我不明白indexed objects同情的是什么.文档没有帮助我理解这个概念.

例如 :

>>> from sympy import symbols, IndexedBase, Idx
>>> M = IndexedBase('M')
>>> i, j = symbols('i j', cls=Idx)
>>> M[i, j]
M[i, j]
Run Code Online (Sandbox Code Playgroud)

这段代码有什么作用?什么是M[i,j]

我所理解的是,它indexed object给出了个人同情的指数symbols.

我正在寻找一个更好的解释indexed objects,以及它与IndexedBase和的关系idx

小智 6

单行解释:它们代表一个未确定的,可能是无限大小的符号数组.

假设你想使用n个符号,你会怎么做?如果n是给定的数字,就像10一样容易.但它只是n,一个未指定的整数.类似的公式一直出现在数学中:"在索引i = 1,...,n"上加上或乘以(某物).

例如,假设我在n维空间R n中具有函数,例如f(x)= 1 /距离(x,0).当然,距离是坐标平方和的平方根.也许我想找到f的一些偏导数.如何在SymPy中表达所有这些?像这样:

from sympy import *
x = IndexedBase('x')
j, k, n = symbols('j k n', cls=Idx)
f = 1/sqrt(Sum(x[k]**2, (k, 1, n)))
print(f.diff(x[j]))
Run Code Online (Sandbox Code Playgroud)

这计算f相对于坐标的导数x[j].答案是

-Sum(2*KroneckerDelta(j, k)*x[k], (k, 1, n))/(2*Sum(x[k]**2, (k, 1, n))**(3/2))
Run Code Online (Sandbox Code Playgroud)

这是正确的(尽管如果我们假设j在1..n范围内,也许可以简化分子).

在上面的例子中,x[j]是与索引j的坐标.在您的示例中,M[i, j]可能是位置i,j处的某些矩阵的输入.

  • M是符号数组的名称,其类是IndexedBase
  • i和j是该数组的索引,它们的类是Idx

以上是您自己实例化的类.M [i,j]的类是索引但你不是通过使用类名创建那些对象,M[i, j]只是这样做.

最近的两个问题,包括使用索引对象的示例: