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

时间:2015-05-21 10:35:32

标签: matrix sympy

我试图创建一般大小的符号矩阵(S表示LxL),我想将矩阵的每个元素设置为索引的函数,即:< / p>

    if(self.slidingViewController.currentTopViewPosition == ECSlidingViewControllerTopViewPositionCentered){
        [self.slidingViewController anchorTopViewToRightAnimated:YES];
    }
    else{
        self.slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"someID"];
        [self.slidingViewController resetTopViewAnimated:YES];
    }

我试着用同情的方式跑步,我得到了

S[m,n] = (u+i/2*(n-m))/(u-i/2*(n-m)) * (u+i/2*(n+m))/(u-i/2*(n+m))

通过Stack Exchange搜索我从去年发现了这个问题: Sympy - Dense Display of Matrices of Arbitrary Size 这是没有答案的,并不完全相同。这是同一个问题,还是我只是想在同情(或一般的电脑)中做一件不可能的事情?

2 个答案:

答案 0 :(得分:0)

这当然可以做到。 docs提供了一些示例。这是一个

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

答案 1 :(得分:0)

我知道这很古老,但是我遇到了同样的问题,并认为我会分享一个对我有用的解决方案。 您需要使用FunctionMatrix对象,而不是MatrixSymbol。对于背景,我在Python 3.5.2。上使用SymPy 1.6.1。

这是一个例子。使用下面的代码,我设置了一些迭代符号以及要用于矩阵f(i,j)的元素的函数u

# Import SymPy for symbolic computations 
import sympy as sym

# Index variables
i,j = sym.symbols('i j', integer=True);
N = sym.Symbol('N', real=True, integer=True, zero=False, positive=True);

# The function we'll use for our matrix
def f(i,j):
    # Some arbitrary function...
    return i + j;

# Define a function matrix where elements of the matrix
# are a function of the indices
U = sym.FunctionMatrix(N, N, sym.Lambda((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 )