2017-02-11 27 views
1

Размерность n дано, мы хотим к сетке пространство с равноудаленных точек, скажем в каждом измерении, мы начинаем с -L до +L на размер шага 2L/(N+1). Теперь мы хотим, чтобы на выходе были все n -мерные векторы, дающие узловые точки. Все они содержатся в массиве из n строк и N^n столбцов. Мне интересно, как закодировать это в MATLAB.Создание последовательности точек сетки в MATLAB

Спасибо заранее,

+0

Можете ли вы привести пример с L = 5, N = 10 и n = 3? – Rotem

+0

Известно ли только во время выполнения? Если нет, вы можете использовать 'ndgrid' – nikaltipar

+0

@Rotem. Это будет матрица с 3 строками и 10^3 столбцами; каждый colim соответствует '(i, j, k)', так что '-5

ответ

2

Если я вас правильно понял, это то, что вы ищете:

n = 3; % no. of dimensions 
L = 4; % bounds 
N = 20; % no. of points 
grd = cell(1,n); 
[grd{:}] = ndgrid(-L:2*L/(N-1):L); 

здесь grd массив ячеек вместе с n клеток, каждая из которых по одному измерению. Обратите внимание: если вы хотите N точек, вам нужно установить разрыв в 2*L/(N-1), потому что 2*L/N даст вам N+1 баллов.

grd = 
    [20x20x20 double] [20x20x20 double] [20x20x20 double] 

Если вы хотите, чтобы вывод, что в n по N^n матрице, вы Переберите grd:

arr = zeros(n,N^n); 
for k = 1:n 
    arr(k,:) = grd{k}(:).'; 
end 

и вы получите:

>> size(arr) 
ans = 
      3  8000