2013-08-03 6 views
0

Я довольно смущен тем, как я собирался суммировать бесконечное количество матриц в MATLAB. Допустим, у меня есть эта функция (а гауссова):Как интегрировать матрицы (сумма матриц с интервалом dx) в 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 с дх (что бесконечно) малый т.е. интеграции. Как мне это сделать? Я довольно смущен. Можно ли это сделать?

ответ

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 
Смежные вопросы