我想加快我的 Matlab 代码。通常,我会找到避免使用 for 循环来获得计算时间的方法,但在这种情况下我遇到了障碍。我必须计算点网格中的值,但计算值需要逻辑运算和向量求和,这使实现复杂化。这段代码在我的机器上运行大约 8 秒:
clear all
% Grid
dLimsX=[-100 +100];
dLimsY=[-100 +100];
dStep=1;
[x_map, y_map]=meshgrid((dLimsX(1):dStep:dLimsX(2)),(dLimsY(1):dStep:dLimsY(2)));
nPoints_map=numel(x_map);
% Inputs
smallDistance=1e-3;
N=10e3;
scaleFactor=10;
x_input = sin(linspace(0,1,N));
y_input = cos(linspace(0,1,N));
z_input = linspace(0,1,N);
tic
A=zeros(size(x_map));
for r=1:size(x_map,1)
y0=y_map(r,1);
for c=1:size(x_map,2)
x0=x_map(1,c);
idxTemp = find((x0-x_input).^2+(y0-y_input).^2>smallDistance); % do not consider in the calculation the inputs too close to the point
A(r,c) = sum( scaleFactor * z_input(idxTemp) .* (y0-y_input(idxTemp)) ./ ((x0-x_input(idxTemp)).^2 +(y0-y_input(idxTemp)).^2+eps) );
end
end
toc