作业帮 > 综合 > 作业

matlab for循环向量化的问题

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 17:05:13
matlab for循环向量化的问题
在写循环时运行慢想改成向量,但本人菜鸟……向量化一点都不熟.麻烦各位帮忙看看下面的两层循环如何才能向量化啊
x0=-5;y0=0;z0=0;
xx=1:3:300;
yy=[5,7,-4,6,12];
zz=[1,7,8,-9,3];
for j=1:100
for k=1:5
r(j,k)=sqrt((x0-xx(j))^2+(y0-yy(k))^2+(z0-zz(k))^2);
end
end
【解法1】
x0=-5;y0=0;z0=0;
xx=1:3:300;
yy=[5,7,-4,6,12];
zz=[1,7,8,-9,3];
xx100 = (x0-xx).^2;
yyzz5 = (y0-yy).^2+(z0-zz).^2;
xx1005 = repmat(xx100', 1, 5);
yyzz1005 = repmat(yyzz5, 100, 1);
r1 = sqrt(xx1005 + yyzz1005);
% r-r1 % 验算
【解法2】
x0=-5;y0=0;z0=0;
xx=1:3:300;
yy=[5,7,-4,6,12];
zz=[1,7,8,-9,3];
xx100 = (x0-xx).^2;
yyzz5 = (y0-yy).^2+(z0-zz).^2;
r2 = sqrt(bsxfun(@plus, xx100', yyzz5));
% r-r2 % 验算
再问: 若程序再多加一行求 f(j,k) 如下,该如何向量化啊,好像用bsxfun不行啊……跪求高人指点 x0=-5;y0=0;z0=0; xx=1:3:300; yy=[5,7,-4,6,12]; zz=[1,7,8,-9,3]; for j=1:100 for k=1:5 r(j,k)=sqrt((x0-xx(j))^2+(y0-yy(k))^2+(z0-zz(k))^2); f(j,k)=0.5*exp(-0.5*r(j,k)/3)*(x0-xx(j))/r(j,k); end end
再答: x0=-5;y0=0;z0=0; xx=1:3:300; yy=[5,7,-4,6,12]; zz=[1,7,8,-9,3]; xx100 = (x0-xx).^2; yyzz5 = (y0-yy).^2+(z0-zz).^2; r2 = sqrt(bsxfun(@plus, xx100', yyzz5)); % r-r2 % 验算 xx1001 = (x0-xx); f1 = 0.5*exp(-0.5*r/3); f2 = bsxfun(@times, f1, xx1001'); f3 = f2./r2; % f3 - f % 验算