【转载】MATLAB代码矢量化入门
一、基本技术-----------------------------------------------------
1)MATLAB索引或引用(MATLAB Indexing or Referencing)
在MATLAB中有三种基本方法可以选取一个矩阵的子阵。它们分别是
下标法,线性法和逻辑法(subscripted, linear, and logical)。
如果你已经熟悉这个内容,请跳过本节
1.1)下标法
非常简单,看几个例子就好。
A = 6:12;
A()
ans =
8 10
A()
ans =
8 10 12
A =
[11 14 17; ...
12 15 18; ...
13 16 19];
A(2:3,2)
ans =
15
16
1.2)线性法
二维矩阵以列优先顺序可以线性展开,可以通过现行展开后的元素序号
来访问元素。
A =
[11 14 17; ...
12 15 18; ...
13 16 19];
A(6)
ans =
16
A()
ans =
13 11 18
A()
ans =
13
11
18
1.3)逻辑法
用一个和原矩阵具有相同尺寸的0-1矩阵,可以索引元素。在某个
位置上为1表示选取元素,否则不选。得到的结果是一个向量。
A = 6:10;
A(logical())
ans =
8 10
A =
[1 2
3 4];
B = ;
A(logical(B))
ans =
1 4
-----------------------------------------------------
2)数组操作和矩阵操作(Array Operations vs. Matrix Operations)
对矩阵的元素一个一个孤立进行的操作称作数组操作;而把矩阵视为
一个整体进行的运算则成为矩阵操作。MATLAB运算符*,/,,^都是矩阵
运算,而相应的数组操作则是.*, ./, ., .^
A=;
B=;
A*B % 矩阵乘法
ans =
0 1
1 0
A.*B % A和B对应项相乘
ans =
0 0
0 0
------------------------------------------------------
3)布朗数组操作(Boolean Array Operations)
对矩阵的比较运算是数组操作,也就是说,是对每个元素孤立进行的。
因此其结果就不是一个“真”或者“假”,而是一堆“真假”。这个
结果就是布朗数组。
D = [-0.2 1.0 1.5 3.0 -1.0 4.2 3.14];
D >= 0
ans =
0 1 1 1 0 1 1
如果想选出D中的正元素:
D = D(D>0)
D =
1.0000 1.5000 3.0000 4.2000 3.1400
除此之外,MATLAB运算中会出现NaN,Inf,-Inf。对它们的比较参见下例
Inf==Inf返回真
Inf<1返回假
NaN==NaN返回假
同时,可以用isinf,isnan判断,用法可以顾名思义。
在比较两个矩阵大小时,矩阵必须具有相同的尺寸,否则会报错。这是
你用的上size和isequal,isequalwithequalnans(R13及以后)。
------------------------------------------------------
4)从向量构建矩阵(Constructing Matrices from Vectors)
在MATLAB中创建常数矩阵非常简单,大家经常使用的是:
A = ones(5,5)*10
但你是否知道,这个乘法是不必要的?
A = 10;
A = A(ones(5,5))
A =
10 10 10 10 10
10 10 10 10 10
10 10 10 10 10
10 10 10 10 10
10 10 10 10 10
类似的例子还有:
v = (1:5)';
n = 3;
M = v(:,ones(n,1))
M =
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
事实上,上述过程还有一种更加容易理解的实现方法:
A = repmat(10,);
M = repmat(', );
其中repmat的含义是把一个矩阵重复平铺,生成较大矩阵。
更多详细情况,参见函数repmat和meshgrid。
-----------------------------------------------------
5)相关函数列表(Utility Functions)
ones 全1矩阵
zeros 全0矩阵
reshape 修改矩阵形状
repmat 矩阵平铺
meshgrid 3维plot需要用到的X-Y网格矩阵
ndgrid n维plot需要用到的X-Y-Z...网格矩阵
filter 一维数字滤波器,当数组元素前后相关时特别有用。
cumsum 数组元素的逐步累计
cumprod 数组元素的逐步累计
eye 单位矩阵
diag 生成对角矩阵或者求矩阵对角线
spdiags 稀疏对角矩阵
gallery 不同类型矩阵库
pascal Pascal 矩阵
hankel Hankel 矩阵
toeplitz Toeplitz 矩阵 超级好贴,不过似乎有人发了。 我最近也写了个潮流,对比对比 好贴,继续学习 很好的贴 学习,顶 反正不用费流量,可以参考复制一下 超级好帖
页:
[1]