2013-02-17 56 views
0

我有兩個列向量,每個向量的大小都是<nx1>config矢量僅包含數字721,722,723 and 724,矢量包含的數字僅爲<nx1>。我需要建立矩陣Z,這是大小<3x3n>的: note:matrices a,b,c and d are each <3x3> matrices.這是很難把這裏用文字規則,讓我嘗試舉個例子第一:從兩個<nx1>列向量構建3by3n矩陣

length=[1 2 3],config=[721 722 723],a=eye(3),b=ones(3),c=magic(3);

z=[ 1  0  0  2  2  2 24  3 18 
    0  1  0  2  2  2  9 15 21 
    0  0  1  2  2  2 12 27  6] 

那如果config(i)是722並且length(i)是2,那麼將2 * matrix_a附加到z矩陣中,依此類推。

我做了以下內容:

 z=[0 0 0;0 0 0;0 0 0]; 
    for i=1:3 
    [~,col]=size(z); 
     if config(i)==721 
     z(:,col+[1:3])=length(i)*a 
     end 
     if config(i)==722 
     z(:,col+[1:3])=length(i)*b 
     end 
     if config(i)==723 
     z(:,col+[1:3])=length(i)*c 
     end 
    end 
    z=z(:,4:end) 

,但是是不是有更好的無環,矢量化的方法?

+0

我會建議你完全一樣複製代碼你跑了它。我會解決一些錯別字。 – 2013-02-18 10:59:03

+0

@ DennisJaheruddin修正了錯別字。現在應該更清楚了。 – 2013-02-18 15:14:35

+0

你爲什麼不使用'[a b c]'?閱讀它:哪些事情確實需要變量? – 2013-02-18 15:41:32

回答

1

我不知道你還需要這些信息,但我找到解決辦法:

config = [722 722 723 723 721]; 
lenght=[3 4 5 6 7]; 
a=eye(3);b=ones(3);c=magic(3); 
d1 = kron(~rem(config, 721).*lenght, a); 
d2 = kron(~rem(config, 722).*lenght, b); 
d3 = kron(~rem(config, 723).*lenght, c); 
result = d1 + d2 + d3; 

,並導致我的數據:

a = 

    1  0  0 
    0  1  0 
    0  0  1 

b = 

    1  1  1 
    1  1  1 
    1  1  1 

c = 

    8  1  6 
    3  5  7 
    4  9  2 

result = 

    3  3  3  4  4  4 40  5 30 48  6 36  7  0  0 
    3  3  3  4  4  4 15 25 35 18 30 42  0  7  0 
    3  3  3  4  4  4 20 45 10 24 54 12  0  0  7 
+0

不錯的一個!俗話說,遲到比從未好。雖然我不再需要它,但這可能對其他人有用。 – 2015-10-29 15:36:25