2015-11-19 2 views
-1

Пусть у меня есть функция 2-х переменных F(i,j) которых зависит от индекса строки и столбца индекса матрицы, и я хочу, чтобы заполнить матрицу со значениями M_ij = F(i,j)MATLAB создать матрицу M = F (I, J)

Конечно, можно проделать петлю через i и j, или даже только i или j, если функция F может быть векторизованной, но я хотел бы знать, как это сделать.

+1

Я не понимаю, о чем вы просите. Какая у вас функция? Какие входы? Что вы пробовали? SO не является службой записи кода. – excaza

+2

Приведите пример F. Если он принимает векторные входы, вы можете передать i и j, которые имеют тот же размер, что и M, где каждая строка i одинакова, и каждый столбец j одинаковый. –

+2

Ответ полностью зависит от функции 'F'. Вы должны сказать, что это такое –

ответ

5

Это невозможно ответить, не видя вашего F, но давайте предположим, что F является векторизация, такие как

F = @(x,y)x+y; 

, то вы можете использовать ndgrid:

[I,J] = ndgrid(1:m,1:n); 
M = F(I,J) 

В приведенном выше случае, и это вполне может примените в своем случае также, вы могли бы векторизовать функцию напрямую, используя что-то вроде bsxfun:

M = bsxfun(@plus, 0:m-1, 1:n); 
+0

Ваши индексы возвращаются в обратном направлении в F –

+0

@MadPhysicist fixed – Dan

+0

Я имел в виду либо 'M = F (J, I)', либо '[J. I] = meshgrid (...) ', иначе' M' будет транспонирован. –

2

Независимо от того, является ли ваша функция F векторизованной или нет, вы должны ее оценить на каждую ценность i и j. Если F не векторизован, вам нужно будет выполнить цикл над индексами вручную. Если F основан на встроенных MATLAB-типах, таких как sin, log и т. Д., Это, скорее всего, векторизация. В этом случае, вы можете передать в i и j, которые имеют тот же размер, как M и получить результат в одном шаге:

[j, i] = meshgrid(1:size(M, 2), 1:size(M, 3)) 
M = F(i, j) 

Обратите внимание, что meshgrid принимает и возвращает параметры, как X, Y, который является противоположностью матрицы порядок индексирования row, col.

Смежные вопросы