我正在将我的代码从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.
我该如何解决?
答案 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]]