Matlab:在矩阵中将一个值的百分比移动到另一个值

时间:2011-11-23 08:19:00

标签: matlab matrix

 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)”时,m(1,1,j)实际上似乎不等于A(7,1,j)* B(3,1,j).. < / p>

对于如何将矩阵中的一个值的百分比移动到下一个时间步的另一个值,是否有人有更好和更简单的想法...必须从一个值中删除该百分比并添加到另一个值。

编辑:这可以在循环中完成吗?

2 个答案:

答案 0 :(得分:1)

你的最后一行应该是:

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循环。 / p>

答案 1 :(得分:1)

显然有两个问题。首先是你最后一行的j+1(如@Sam所示)。其次,您错误地将{em> 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的大小。