概述
MatLab 向量化技巧
家家 @ 2007-05-17 13:53
大家都知道MatLab是一种解释性语言,它的长处在矩阵运算。
因此需要将问题尽量用矩阵表示,并且要避免对单个矩阵元素操作,
而用整体矩阵运算。一个重要过程就是所谓将问题矢量化(vectorizing)。
一个问题是如果需要对矩阵的不同元素作不同操作,那么怎么办?举个例子
对矩阵X,作A=5*sin(X)/X,显然当X某元素->0时,A对应元素->5。按照
通常在其他语言思路编程为:
Nx=2000;
X=2.0*pi*(rand(Nx,Nx)-0.5);
X(1:Nx/2,:)=0.0; %生成Nx X Nx矩阵X,一半为随机分布,一半为0。
A=zeros(Nx,Nx);
for m=1:Nx
for n=1:Nx
if(abs(X(m,n))>=eps)
A(m,n)=5.0.*sin(X(m,n))./X(m,n);
else
A(m,n)=5.0;
end
end
end %(ProgramNo.1)
以上代码通过循环语句对每一个矩阵元素进行单独操作,这段代码在MatLab里效 率特别低。为避免循环,考虑如下方法:
方法I:用所谓logical subscripting。
Nx=2000;
X=2.0*pi*(rand(Nx,Nx)-0.5);
X(1:Nx/2,:)=0.0;
A=zeros(Nx,Nx);
I=(abs(X)>=eps);
A=I.*5.0.*sin(X)./(X+(1-I))+(1-I).*5.0; %(ProgramNo.2)
或者上面最后一行用如下代码代替:
A(I)=5.0.*sin(X(I))./X(I);
最后
以上就是冷酷黑猫为你收集整理的矩阵列向量化 matlab,MatLab 向量化技巧的全部内容,希望文章能够帮你解决矩阵列向量化 matlab,MatLab 向量化技巧所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复