Matlab: перемещение процента от одного значения к другому в матрице - PullRequest
1 голос
/ 23 ноября 2011
 t=3;

Если у меня есть матрица A (9x9xt):

  1  2  3  4  5  6  7  8  9 
 10 11 12 13 14 15 16 17 18
 19 20 21 22 23 24 25 26 27
 28 29 30 31 32 33 34 35 36
 37 38 39 40 41 42 43 44 45
 46 47 48 49 50 51 52 53 54
 55 56 57 58 59 60 61 62 63
 64 65 66 67 68 69 70 71 72
 73 74 75 76 77 78 79 80 81

И вектор B (9x1xt):

 0.5
 0.6
 0.7
 0.5
 0.6 
 0.7
 0.5
 0.6
 0.7


 for j=1:t

Я пытаюсь переместитьпроцент от A (7,1, j) до A (7,2, j + 1).Процентное значение в этом случае составляет B (3,1, j).

Я подумал, что мне следует создать новое значение m (1,1, j), которое содержит процентное значение: B (3,1, j) * A (7,1, j) ...

      m(1,1,j)= A(7,1,j)*B(3,1,j); %# Find out what the percentage of A(7,1,j) is.
      A(7,2,j+1)= A(7,2,j)+m(1,1,j); %# Add that ''percentaged'' value to the A(7,2,j+1)
      A(7,1,j+1) = A(7,1,j)-m(1,1,j); %# Remove that ''percentaged'' value from A(7,1,j+1)

Это, однако, не работает.m (1,1, j) на самом деле не кажется равным A (7,1, j) * B (3,1, j), когда я набираю '' m (1,1, j) '' ..

Есть ли у кого-нибудь лучшая и простая идея о том, как переместить процент от одного значения в матрице в другое для следующего временного шага ... Этот процент должен быть удален из одного значения и добавлен к другому.

Редактировать: Возможно ли выполнить цикл?

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

Очевидно, есть две проблемы.Первый - это j+1 в вашей последней строке (как указано @Sam).Во-вторых, вы ошибочно увеличиваете j -й элемент на j*m(1,1,j), а не на m(1,1,j).Это происходит потому, что вы добавляете следующий элемент, переходите к следующему, а затем добавляете накопленную сумму.Исправленная векторизованная версия:

t=3;
A = repmat(reshape(1:81,9,9)',[1,1,t]);
B = repmat([0.5 0.6 0.7 0.5 0.6  0.7 0.5 0.6 0.7]', [1,1,t]);
m(1,1,1:t)= A(7,1,1:t).*B(3,1,1:t); %# Find out what the percentage of A(7,1,j) is.
A(:,:,t+1)=0; % Add zeros matrix at A(:,:,t+1)
A(7,2,2:t+1) = A(7,2,2:t+1)+m(1,1,1:t); %# Add that ''percentaged'' value to the A(7,2,j+1)
A(7,1,1:t) = A(7,1,1:t)-m(1,1,1:t); %# Remove that ''percentaged'' value from A(7,1,j+1)

Примечание: ваш исходный код также увеличивает размер A.

1 голос
/ 23 ноября 2011

Если ваша последняя строка будет читать:

A(7,1,j) = A(7,1,j)-m(1,1,j);

вместо

A(7,1,j+1) = A(7,1,j)-m(1,1,j);

Что касается того, есть ли лучший способ сделать это - я не уверен, так как яне уверен, что вы в конечном итоге пытаетесь сделать.Я полагаю, что если вы пытаетесь выполнить эту операцию для всех строк, или всех столбцов, или многократно каким-либо другим способом, тогда будет векторизованный способ сделать это, а не цикл for.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...