我对如何在 MATLAB 中对无限数量的矩阵求和感到非常困惑。假设我有这个函数(高斯函数):
%Set up grid/coordinate system
Ngrid=400;
w=Ngrid;
h=Ngrid;
%Create Gaussian Distribution
G = zeros ([w, h]);
Sig = 7.3; %I want the end/resultant G to be a summation of Sign from 7.3 to 10 with dx
for x = 1 : w
for y = 1 : h
G (x, y) = exp (-((Sig^-2)*((x-w/2+1)^2 + (y-h/2+1)^2)) / (2));
end
end
我本质上希望最终/结果函数 G 是从 7.3 到 10 的 Sign 与 dx(无穷小)小的总和,即积分。我该怎么做呢?我很困惑。还可以吗?
您似乎并未实际对一系列
G
值求和 Sig
。你永远不会改变 Sig
的值。无论如何,假设 dx
不太小并且您有足够的内存,这可以在没有任何循环的情况下完成,更不用说两个循环了。
Ngrid = 400;
w = Ngrid;
h = Ngrid;
% Create range for Sig
dx = 0.1;
Sig = 7.3:dx:10;
% Build mesh of x and y points
x = 1:w;
y = 1:h;
[X,Y] = meshgrid(x,y);
% Evaluate columnized mesh points at each value of Sig, sum up, reshape to matrix
G = reshape(sum(exp(bsxfun(@rdivide,-((X(:)-w/2+1).^2+(Y(:)-h/2+1).^2),2*Sig.^2)),2),[h w]);
figure
imagesc(G)
axis equal
结果是这样的
上面的长而复杂的行可以用这个代替(使用更少的内存,但可能会更慢):
G = exp(-((X-w/2+1).^2+(Y-h/2+1).^2)/(2*Sig(1)^2));
for i = 2:length(Sig)
G = G+exp(-((X-w/2+1).^2+(Y-h/2+1).^2)/(2*Sig(i)^2));
end