2015-02-21 6 views
0

Я пытаюсь vectorise этого двойного цикла, который вычисляет координаты, так что я получилVectorising двойного цикла в MATLAB

A = zeros(100,100); 
for x = 1:100  
    for y = 1:100 
     A(x,y) = x^2 + y %or other functions with x and y 
    end 
end 

Хотя пытаюсь vectorise его, используя что-то вроде meshgrid как некоторые примеры, которые я видел, дают мне массу ошибок, таких как «Размеры конкатенированных матриц несовместимы».

Есть ли способ венерить это? Большое спасибо за помощь.

Я на самом деле с помощью

A = zeros(31,31); 
for x = 1:31  
    for y = 1:31 
     A(y,x) = f(1.5, (x-16)/10 + i*((y-16)/10), 1000); 
    end 
end 

где F (1,5, ...) некоторые другие функции я использую, чтобы вычислить точки А, будет выводить только номер.

Пытаясь что-то вроде

A = zeros(31,31); 
[X,Y] = ndgrid(1:31,1:31); 
A(Y,X) = f(1.5, (X-16)/10 + i*((Y-16)/10), 1000); 

мне дает:

Ошибка с помощью horzcat Размеры матриц, сцеплены не согласуются.

Ошибка в F

Ошибка в строке 3: A (Y, X) = F (1.5, (Х-16)/10 + I * ((У-16)/10), 1000);

+0

Показать код попытки и точные детали ошибки видели – Wain

+0

Вы должны скажите нам, что это за 'func, f'. Не могли бы вы добавить его реализацию? – Divakar

ответ

3

Позвольте N = 100 быть данным. Здесь у вас мало возможностей для игры.

Подход № 1: bsxfun со встроенным @plus

A = bsxfun(@plus,[1:N]'.^2,1:N) 

Подход № 2: bsxfun с -

func = @(x,y) x.^2 + y 
A = bsxfun(func,[1:N]',1:N) 

Для общей функции с x и y, вам может использовать ndgrid или meshgrid, как обсуждается далее.

Подход № 3: С ndgrid -

[X,Y] = ndgrid(1:N,1:N); 
A = X.^2 + Y 

Подход # 4: С meshgrid -

[Y,X] = meshgrid(1:N,1:N); 
A = X.^2 + Y 
Смежные вопросы