Python 根据Mathematica中的变量定义矩阵

Python 根据Mathematica中的变量定义矩阵,python,matrix,wolfram-mathematica,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/

我正在将我的代码从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]

我怎样才能修好它

试试这样的东西

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 club的第一条规则是不要使用循环


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

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

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

如何将所有这些打包成一个函数?也许“模块”是实现这一点的方法?
getA[κ_, n_] := ToeplitzMatrix[2 Cos[2 π κ Range[0, n - 1] / n]]