如何在 MATLAB 中积分矩阵(具有 dx 间距的矩阵之和)?

问题描述 投票:0回答:1

我对如何在 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(无穷小)小的总和,即积分。我该怎么做呢?我很困惑。还可以吗?

matlab statistics gaussian numerical-integration integral
1个回答
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

结果是这样的 enter image description here

上面的长而复杂的行可以用这个代替(使用更少的内存,但可能会更慢):

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
© www.soinside.com 2019 - 2024. All rights reserved.