我对如何在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的符号的总和,其中dx(无穷小)是小的,即积分。我该怎么做呢?我很困惑。它甚至可以完成吗?
答案 0 :(得分:1)
您似乎并未在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