Matlab基础学习(2)

向量化编程是Matlab的核心,从实践来说:

1.尽量避免循环,使用Matlab内置函数

2.使用逻辑索引

3.提前分配内存

4.0较多的稀疏矩阵使用稀疏矩阵相关函数(help-Matlab-Functions-mathematics-Sparse Matrices)

我们一个一个说。

既然是向量化编程,使用者要对线性代数(起码是矩阵)有感觉。

help-Matlab-Functions-Mathematics-Arrays and Matrices-Array Operations

help-Matlab-Functions-Mathematics-Arrays and Matrices-Array Manipulation

这两部分的函数必须非常熟悉。再进一步,

help-Matlab-Functions-Mathematics-Linear Algebra

help-Matlab-Functions-Mathematics-Arrays and Matrices其他函数也尽量多知道点。

一、一些矩阵的操作函数

1.特殊矩阵:
diag(v,k) %以向量v为对角线元素,生成对角阵,k=0主对角线,k<0左下,k>0右上
eye(m,n) %单位阵
zeros(m,n) %全零阵
ones(m,n) %全一阵
其他的特殊矩阵:help-Matlab-functions-Mathematics-Arrays and Matrices-special matrices
 
2.常见操作
2.1 find(逻辑表达式)
可以返回线性索引,也可以返回行列索引
2.2
length(A)
如果A是一个向量,返回长度;如果A是矩阵,返回max(size(A))
size(A)
返回行数,列数
size(A,1) 只返回行数
size(A,2) 只返回列数
2.3
min(A) %返回每一列的最小值
min(A,B) %A,B对应元素最小值
min(A,[],dim) %dim=1,等同于min(A)
                        %dim=2,等同于(min(A'))'
max()类推
2.4
共轭转置 '
转置 .'
对于实数,   '等同于 .'
2.5
repmat(A,m,n) %堆叠矩阵A,形成m行A,n列A的矩阵
2.6
reshape(A,m,n) %按线性索引将A矩阵变为m*n维
2.7
cat(dim,A,B,C,...)  %在dim维连接矩阵
horzcat(A,B,C,...) %A|B|C|....
vertcat(A,B,C,...) %(A|B|C|...)'
2.8
fliplr(A) %左右对折
flipud(A) %上下对折
2.9
circshift(A,[m,n]) %向下移动m位,向右移动n位
rot90(A,k) %逆时针旋转90度k次
2.10
permute(A,[  ]) %Rearrange dimensions of N-D array
shiftdim(A,num) %和permute相似,但是操作更简单,功能也更简单
2.11简单的运算
sum(A)返回每一列的和
sum(A,dim)返回第dim维的和dim=1,计算sum of cols;dim=2,计算sum of rows
 
prod()计算积,用法和sum相同
 
tril(A)下三角
triu(A)上三角
 
dot()计算内积
cross()计算外积
 
det()计算行列式
rank()秩
trace()迹
rref()最简行阶梯型
eig()特征值、特征向量
svd()svd分解
null()零空间
 
rand(m,n) %m*n的(0,1)的均匀分布的数 .a+(b-a)*rand(m,n)产生[a,b]间的均匀分布的数
randi([min,max],m,n] %产生[min,max]之间m*n的均匀分布的整数
randn(m,n) %m*n的(0,1)的正态分布的数 .a+(b-a)*rand(m,n)产生[a,b]间的正态分布的数
rng('shuffle') %按当前时间取随机数种子
 
还有很多函数,详见help-Matlab-functions-Mathematics-Arrays and Matrices和linear algebra
另一些随机数产生函数,见help-Statistics Toolbox-Functions-Probability Distribtions-Random Number Generators
 
二、向量化编程的几个实用函数
1.accumarray()
accumarray(arr1,arr2,save-arr,@func)
这个函数的作用是将arr1中的每一行对应arr2中的每一行,将arr2中的每一行数据放入以arr1为索引值的矩阵中,如果没有func,默认求和;有func,就执行函数,之后求和。所以arr1的行数=arr2的行数。
这个函数可以用来计算arr1空间的一些数值。计算结果的矩阵行列(以矩阵为例)分别表示arr1中的一个参数,里面的值表示arr2中元素经过运算求和的结果。
 
2._fun
arrayfun
bsxfun
spfun
cellfun
structfun
这些函数都有助于减少循环操作
 
arrayfun(func_handle,arr1,arr2,...)%func几个变量,就有几个arr
arrayfun()可以对arr中每个元素进行操作
 
常见的bsxfun的参数形式是bsxfun(func_handle,matrix,vector),让vector作用于matrix的每一列.bsxfun()中func_handle式确定的,详见help
 
spfun(func_handle,arr1,arr2,...)和arrayfun()相似,这里只是针对稀疏矩阵
posted @ 2015-12-03 20:06  霖霖柒  阅读(111)  评论(0)    收藏  举报