matlab | 靶心矩阵 BullseyeMatrix

From Cody Problem 18. Bullseye Matrix

靶心矩阵

\begin{array}{lllll} {\color{Red} 3 }& {\color{Red} 3} & {\color{Red} 3} & {\color{Red} 3}& {\color{Red} 3}\\ {\color{Red} 3}& {\color{Blue} 2} & {\color{Blue} 2} & {\color{Blue} 2} & {\color{Red} 3} \\ {\color{Red} 3} & {\color{Blue} 2} & {\color{Orange} 1} & {\color{Blue} 2} & {\color{Red} 3} \\ {\color{Red} 3} & {\color{Blue} 2} & {\color{Blue} 2} & {\color{Blue} 2} & {\color{Red} 3}\\ {\color{Red} 3} & {\color{Red} 3} & {\color{Red} 3} & {\color{Red} 3} & {\color{Red} 3} \end{array}


解法一

Function a=bullseye(n)
     a=toeplitz(1:n);      %生成1到n的托普利兹矩阵
     a=(a+rot90(a))/2;      %rot90()逆时针旋转矩阵
end

托普利兹矩阵 简称T型矩阵。其主对角线上的元素相等,平行于主对角线的线上的元素也相等;矩阵中的各元素关于次对角线对称,为次对称矩阵。在matlab种可以利用toeplitz()命令生成。

A=\left[\begin{array}{cccccc} a_ {0} & a_{-1} & a_{-2} & \cdots & \cdots & a_{1-n} \\ a_{1} & a_{0} & a_{-1} & \ddots & \ddots & \vdots \\ a_{2} & a_{1} & a_{0} & \ddots & \ddots & \vdots \\ \vdots & \ddots & \ddots & \ddots & \ddots & a_{-2} \\ \vdots & \ddots & \ddots & \ddots & a_{0} & a_{-1} \\ a_{n-1} & \cdots & \cdots & a_{2} & a_{1} & a_{0} \end{array}\right]


解法二

Function a = bullseye(n)
   a = ceil(sqrt(spiral(n))/2+0.5);
end

 spiral(n)命令生成n维从1开始的顺时针螺旋矩阵,下面以spiral(9)为例。

螺旋矩阵A:右上角次对角线是1、9、25、49、81,也就是说第一圈是1一个元素,第二圈是 [2,9] 八个元素,第三圈是 [10,25] 十六个元素,第四圈是 [26,49] 二十四个元素……以此类推。

不难想到,如果对矩阵每个元素开方,得到一个新矩阵B:右上角次对角线是1、3、5、7、9,第一圈是 1 一个元素,第二圈是 (1,3] 八个元素,第三圈是 (3,5] 十六个元素,第四圈是 (5,7] 二十四个元素……以此类推。

如果想让一圈都是一个相同的整数元素,要么向上取整,要么向下取整,很显然 (1,3] 、 (3,5] 、 (5,7] 这样的区间跨度还是大了一点,所以,将新矩阵再除以2,得到矩阵C:右上角次对角线是0.5、1.5、2.5、3.5、4.5,第一圈是 0.5一个元素,第二圈是 (0.5,1.5] 八个元素,第三圈是 (1.5,2.5] 十六个元素,第四圈是 (2.5,3.5] 二十四个元素……以此类推。

现在每个区间的跨度都是1,但是错开了0.5,所以将C矩阵每个元素加0.5,得到矩阵D:右上角次对角线是1、2、3、4、5,第一圈是 1 一个元素,第二圈是 (1,2] 八个元素,第三圈是 (2,3] 十六个元素,第四圈是 (3,4] 二十四个元素……以此类推。

 

矩阵元素向上取整,结束。

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值