2016-02-04 3 views
2

Я хочу, чтобы создать матрицу (MN матрицу с размерностью), принимая M смежных проб и положить их в столбце матрицы. Таким образом, последовательность x [0], x [1], ..., x [MN-1] где N = 0,1,2, ..., n и матрица выглядит математическиКак создать матрицу выборочных значений

A = [x_0, x_M,.....,x_{M(N-1)}; 
    x_1, x_M+1,....,x_{M(N-1)+1}; 
    . ......; 
    : : :; 
    x_{M-1},x_{2M-1},....,x_{MN-1}] 

Пожалуйста, помогите

+2

Не должен ли ваш цикл работать до 'M * N'? Кроме того, если у вас есть 'x', чтобы получить' A', просто используйте 'reshape (x, M, N)'. Наконец, ваш цикл, скорее всего, содержит 'x (i) = 4 * x (i-1) * (1-x (i-1))' – Dan

+0

@Dan: изменить форму не требуется. – Jonas

+0

@ Dan: Вы абсолютно правы, указывая на цикличность уравнения: в правой части это должно быть x (i-1). Во-вторых, цикл цикла должен начинаться от 0 до MN-1 или от 1 до MN. Вопрос основан на документе http://arxiv.org/pdf/1201.0362.pdf. Eq (7) - это матрица phi, которую я назвал матрицей A. – Sm1

ответ

3

Matlab допускает линейное индексирование, то есть в массиве 4 на 4 M, M(15)==M(3,4). Следовательно, вы можете заполнить свой массив, даже не нуждаясь в изменении:

M = 50; 
N = 100; 
A = zeros(M,N); 
A(1) = 0.1; 
for i = 2:N*M %// loop until the very last element 
    A(i) = 4*A(i-1)*(1-A(i-1)); 
end 
+2

Разве это не должно быть «x = нули (M, N)» в начале? Кроме того, вам все равно нужно добавить '-1' в индексирование вызовов RHS' x' – Dan

+0

@ Dan: Да, действительно. Благодаря! – Jonas

+0

@ Джонас: Спасибо за ваш ответ. Что-то неясно, не могли бы вы проверить - (1) Не следует ли A (1) быть x (1), и уравнение/функция повторяется с использованием x (1) вместо A (1)? (2) Вопрос основан на документе http://arxiv.org/pdf/1201.0362.pdf. В (7) в документе представлена ​​матрица phi, которую я назвал матрицей A. Также на основе ответов, данных другими следует ли изменить форму()? – Sm1

1

Я даю вам другое решение.

Если я вас правильно понимаю, у вас есть x vector, поэтому вам необходимо создать матрицу A. Здесь все трудное - позиционирование элементов. Мы можем сделать это таким образом (я буду использовать меньшие значения M,N только для примера):

M = 10; 
N = 5; 
x(1) = 0.1; 
for ii = 2:M*N 
    x(ii) = 4*x(ii-1)*(1 - x(ii-1)); 
end 
A = vec2mat(x,M)'; %' 

P.S. Еще один интересный вопрос - как создать x с помощью векторизации подход ... Но я все еще думаю об этом ...


Ради любопытства я сравнил мой подход к Dan «s подход:

tic; A = vec2mat(x,M)';toc %' 
Elapsed time is 0.037790 seconds. 
tic; A = reshape(x,M,N); toc 
Elapsed time is 0.000016 seconds. 

Yeeeep, нет смысла использовать vec2mat - reshape это потрясающе!

+0

Благодарим вас за ваши усилия. Если мое понимание правильное, я должен использовать reshape() после окончания цикла for. – Sm1

+0

Точно! Основное различие между моим ответом и ответом @Jonas - если вам нужно использовать 'x' позже в своей программе - используйте мой, если вам это не нужно - используйте Jonas, это будет быстрее –

+0

@Mikhail_Sam: обратите внимание, что если вам нужно 'x' позже в программе, вы можете просто использовать' A (:) 'вместо этого. – Jonas

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