MATLB矩阵运算
MATLAB对于矩阵的运算其实是很友好的,大多数对于数据的二维for循环嵌套其实都可以改写为矩阵运算;
例如,我们有以下这个例子:
sj(1:2*N)=0;
for i=1:2*N
for j=1:500
sj(i)=sj(i)+(j-1)*S_A(j)*P_A(j)*sin(S_f(j)-P_f(j)+(j-1)*(i-N)/100000000/N*2*pi);
end
end
这段代码等价于:
I = (1:2*N)';
J = 1:500;
ONE = ones(2*N,1);
Matra = ONE * ( (J-1).*S_A(J).* P_A(J) ) .* sin( ONE * (S_f(J) - P_f(J)) + (I-N) * (J-1)/100000000/N*2*pi );
sj = Matra * ones(500,1);
代码量似乎是没有多大的差别的,但是在运算速度上面,后面采用的矩阵的乘法和矩阵函数的功能,在MATLAB的环境中更为友好,相对了连个for循环一个一个遍历的方法,速度上会有质的提高。
在MATLAB中,要充分利用矩阵索引,矩阵乘法、点乘、矩阵函数、特殊矩阵等线性代数的方式来组织运算,对于优化运算速度会有很大的提升。