matlab 快捷的生成矩阵

今天师兄提出一个问题

要快速的生成如下的矩阵

1 1 1 1 0.5
1 1 1 0.5 0
1 1 0.5 0 0
1 0.5 0 0 0
0.5 0 0 0 0


我思考了一下,对于数据量不大的完全可以用循环来做,奈何本人有matlab综合症,不矩阵简化的话活不了

所以解答如下:

a=ones(5,5);提前申请矩阵空间
a=triu(a)-0.5*diag(ones(1,5));ones(1,5)生成diag对角线元素
a=fliplr(a);左右顺序颠倒
这个方法省去了繁琐的循环和判断赋值

下面对用到的函数和核心思想做简要说明:

1.matlab的核心在于矩阵,像一般的循环之类的都可以用内置函数(ones,meshgrid,linspace等)来代替,这样不仅代码简洁,还大大提高了代码运行效率,符合matlab矩阵至上的原则

2.提前申请矩阵空间和索引向量化或矩阵化是基本的原则

3.灵活转换->本文中代码先用ones生成5*5的全部元素为1的矩阵,然后用triu提取了上三角部分(包括对角线),然后用diag生成了对角线是0.5 的同样大小的矩阵,二者相减发现和想要的还有点差别,再发现用fliplr左右顺序颠倒一下就OK了。这个只要结构类似,能够各个部分分离的多几步转换就得到了想要的。


类似的操作在实际需求中很多,写下来和大家分享,窥一斑而见全豹,希望对大家有所启发。


原创,转载请注明来自http://blog.csdn.net/wenzhou1219

你可能感兴趣的:(matlab)