代码之家  ›  专栏  ›  技术社区  ›  Jacob

如何在Matlab中创建这个矩阵?

  •  5
  • Jacob  · 技术社区  · 14 年前

    我正试图解决这个问题 Code Golf: Build Me an Arc 问题。我的解决方案不错,但我想,有一个更简单的方法。有人知道如何生成 nxn 像这样的矩阵,给定 n

     3     0     0     0     2     0     0     0     1
     0     3     0     0     2     0     0     1     0
     0     0     3     0     2     0     1     0     0
     0     0     0     3     2     1     0     0     0
     4     4     4     4     8     8     8     8     8
     0     0     0     5     6     7     0     0     0
     0     0     5     0     6     0     7     0     0
     0     5     0     0     6     0     0     7     0
     5     0     0     0     6     0     0     0     7
    

    我想打败其中一些 matrices 使之成形。

    我现在就是这样得到的。

    %%# Create the grid
    [X Y]=meshgrid(-r:r);
    %%# Compute the angles in degrees
    T=atan2(-Y,X)/pi*180;
    %%# Get all the angles
    T=T+(T<=0)*360;
    

    如你所见,我不需要大多数的条目 T .

    2 回复  |  直到 4 年前
        1
  •  1
  •   Amro    14 年前

    由于这与高尔夫问题有关,请考虑:

    [X Y]=meshgrid(r:-1:-r,-r:r);
    T=180+atan2(Y,X)*180/pi;
    

    这样可以节省你3个字符。。。

        2
  •  0
  •   Divakar    9 年前

    bsxfun expansion 那个 meshgrid 是否显式地同时给我们提供了在两个输入之间执行数学运算的能力 . 通过这些内部操作 BSX风 基于代码的解决方案似乎是完美的高尔夫这样一个代码的东西 43 characters 所述问题的解决方案-

    T=180+bsxfun(@atan2,[-r:r]',r:-1:-r)*180/pi