【问题标题】:Define a matrix depending on variable in Mathematica根据 Mathematica 中的变量定义矩阵
【发布时间】:2015-04-11 14:46:43
【问题描述】:

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

我该如何解决?

【问题讨论】:

    标签: python matrix wolfram-mathematica


    【解决方案1】:

    试试这样的

    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])。另请注意,我省略了通常不需要的乘法运算符。

    【讨论】:

    • 如何将所有这些打包成一个函数?也许“模块”是做到这一点的方法?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-01
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多