根据Mathematica中的变量定义矩阵

时间:2015-04-11 14:46:44

标签: python matrix wolfram-mathematica

我正在将我的代码从Python翻译成Mathematica。我试图定义一个矩阵,其值取决于用户选择的变量,称为kappa。 在Python中,代码看起来像这样:

    def getA(kappa):

        matrix = zeros((n, n), float)
        for i in range(n):
            for j in range(n):
                matrix[i][j] = 2*math.cos((2*math.pi/n)*(abs(j-i))*kappa)
        n = 5
        return matrix

到目前为止,我在Mathematica中所做的是以下代码:

n = 5

getA[kappa_] :=
A = Table[0.0, {n}, {n}];
For[i = 0, i < n, i++, 
  For[ j = 0, j < n, j++, 
   A[[i, j]] = 2*Cos[(2*pi/n)*(abs (j - i))*kappa]]]; 

b = getA[3]

但是当我尝试评估此矩阵的值kappa等于3时,我收到以下错误:

Set::partd: "Part specification A[[i,j]] is longer than depth of object.

我该如何解决?

2 个答案:

答案 0 :(得分:0)

尝试这样的事情

n = 5;
A = Table[2*Cos[(2 \[Pi]/n) (Abs[ j - i]) \[Kappa]], {i, 1, n}, {j, 1, n}];
b = A /. \[Kappa]->3

如果你愿意的话,我会让你把它打包成一个函数。

您写道,您正在尝试将Python翻译成Mathematica;您使用For循环表示您正在尝试转换为 C-in-Mathematica 。 Mathematica俱乐部的第一条规则是不要使用循环

除此之外,你已经犯了一些小的语法错误,例如使用abs()你应该有Abs[](Mathematica的内置函数都有以大写字母开头的名字,将参数包装在[]中,而不是()),pi不是圆的直径与圆的比值的名称它的半径(称为\[Pi])。另请注意,我省略了通常不需要的乘法运算符。

答案 1 :(得分:0)

在您的特定情况下,这将是最快速,最直接的解决方案:

getA[κ_, n_] := ToeplitzMatrix[2 Cos[2 π κ Range[0, n - 1] / n]]