Matrix 大小为NxN的符号矩阵的元素

Matrix 大小为NxN的符号矩阵的元素,matrix,sympy,Matrix,Sympy,我试图创建一个一般大小的符号矩阵(比如LxL),我想将矩阵的每个元素设置为索引的函数,即: S[m,n] = (u+i/2*(n-m))/(u-i/2*(n-m)) * (u+i/2*(n+m))/(u-i/2*(n+m)) 我试着在sympy上运行这个,结果 --------------------------------------------------------------------------- TypeError

我试图创建一个一般大小的符号矩阵(比如LxL),我想将矩阵的每个元素设置为索引的函数,即:

S[m,n] = (u+i/2*(n-m))/(u-i/2*(n-m)) * (u+i/2*(n+m))/(u-i/2*(n+m))
我试着在sympy上运行这个,结果

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-a456d47e99e7> in <module>()
      2 S_l = MatrixSymbol('S_l',2*l+1,2*l+1)
      3 S_k = MatrixSymbol('S_k',2*k+1,2*k+1)
----> 4 S_l[m,n] = (u+i/2*(n-m))/(u-i/2*(n-m)) * (u+i/2*(n+m))/(u-i/2*(n+m))

TypeError: 'MatrixSymbol' object does not support item assignment
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
2 S_l=矩阵符号('S_l',2*l+1,2*l+1)
3 S_k=矩阵符号('S_k',2*k+1,2*k+1)
---->4 S_l[m,n]=(u+i/2*(n-m))/(u-i/2*(n-m))*(u+i/2*(n+m))/(u-i/2*(n+m))
TypeError:“MatrixSymbol”对象不支持项分配
在Stack Exchange中搜索时,我发现了去年的问题:
这是没有答案的,也不完全相同。这是同一个问题,还是我只是想在sympy(或一般的计算机)中做一件不可能的事情?

这当然可以做到。本文提供了一些例子。这里有一个

>>> Matrix(3, 4, lambda i,j: 1 - (i+j) % 2)
Matrix([
[1, 0, 1, 0],
[0, 1, 0, 1],
[1, 0, 1, 0]])

我知道这很古老,但我遇到了同样的问题,我想我会分享一个适合我的解决方案您需要使用对象而不是矩阵符号。作为背景,我在Python3.5.2上使用Sympy1.6.1

这里有一个例子。使用下面的代码,我设置了一些迭代符号和函数
f(I,j)
我想用于矩阵
u
的元素

#为符号计算导入SymPy
将sympy作为sym导入
#索引变量
i、 j=符号('i j',整数=真);
N=符号('N',实=真,整数=真,零=假,正=真);
#我们将用于矩阵的函数
定义f(i,j):
#一些任意函数。。。
返回i+j;
#定义一个函数矩阵,其中包含矩阵的元素
#是指数的函数
U=对称函数矩阵(N,N,对称λ((i,j),f(i,j));
现在,让我们尝试使用矩阵中的元素,将它们全部相加

U_sum=sym.sum(U[i,j],(i,0,N),(j,0,N));
U_sum
>>>
N N
___   ___         
╲     ╲           
╲     ╲          
╱     ╱   (i+j)
╱     ╱           
‾‾‾   ‾‾‾         
j=0 i=0
然后,让我们告诉SymPy计算总和

our_sum.doit().simplify()
>>>N*(N**2+2*N+1)

这不起作用,不能使用矩阵定义符号大小的矩阵。