如何在Matlab中创建此矩阵?

时间:2010-07-30 19:28:51

标签: matlab

我正在尝试解决Code Golf: Build Me an Arc问题。我的解决方案还不错,但我认为,有一种更简单的方法。在给定nxn的情况下,是否有人知道如何生成这样的n矩阵?我花了57个字来得到它!

 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 个答案:

答案 0 :(得分:1)

由于这与Code Golf问题有关,请考虑:

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

可以节省3个字符......

答案 1 :(得分:0)

此帖中列出的是一个包含bsxfun的单行解决方案代码,可以避免使用临时变量,因为它在内部执行expansion meshgrid明确执行并同时给出我们能够提到在bsxfun中列出的两个输入之间执行的数学运算。通过这些内部操作,基于bsxfun的解决方案似乎非常适合使用 43 characters 解决方案来解决上述问题的代码高尔夫问题 -

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