2013-05-18 61 views
1

你好,我是新的matlab,我無法弄清楚如何解決問題。如何在一定條件下創建兩個或更多矩陣?

我有矩陣1:

1 0 
2 334.456 
3 654.7654 
4 65.76543 
1 0 
2 543.43567 
3 98.432 
4 54.9876 
5 12.456 

和矩陣2:

1 2 
2 3 
3 4 
1 2 
2 3 
3 4 
4 5 

矩陣2代表在它們出現的順序在矩陣1中的鏈接。

我想分開塊(矩陣),其中每個塊從停止1開始的鏈接。因此,通過分析矩陣2我應該產生2個新的矩陣,一個與鏈接(1,2)(2,3)(3 ,4),另一個與鏈接(1,2)(2,3)(3,4)(4,5)。 這樣每次我找到停止點1時,它就開始建立一個新的矩陣。
我想AB出來爲:

A= [1,2, 334.456; 2,3,654.7654;3,4,65.76543] 
B=[1,2,543.43567;2,3,98.432;3,4,54.9876;4,5,12.456] 
+0

在你的例子中,你並沒有實際構建兩個不同的矩陣。您的目標是構建您展示的單一矩陣嗎? – 2013-05-18 15:13:52

+1

創建多個命名矩陣通常是一件壞事,除非您對矩陣的單元陣列感到滿意,我強烈建議。 – 2013-05-18 15:16:35

+0

請提供一個明確的例子。兩個矩陣是什麼樣的?他們是否應該包含條目'Matrix1(1,2)','Matrix1(2,3)'等等? –

回答

0

認爲這你想要做什麼。 matrices是一個單元格數組,其中包含所需的不同矩陣數量(基於Matrix2列1中1的數量)。

Matrix1=[1 0; 2 334.456;3 654.7654;4 65.76543;1 0;2 543.43567;3 98.432;4 54.9876;5 12.456]; 
Matrix2=[1 2; 2 3; 3 4; 1 2; 2 3; 3 4; 4 5]; 

rows=find(Matrix2(:,1)==1); % find row numbers with 1 in column 1 of matrix 2) 
rows=[rows(2:end); size(Matrix2,1)+1]; % ignore (obvious) first row, add end of Matrix2 
nrows=size(rows,1); 

matrices=cell(nrows,1); 
for i=1:nrows 
    lb=1; 
    if i>1 
     lb=rows(i-1); 
    end 
    matrices{i,1}=zeros(rows(i)-lb,3); 
    for j=lb:rows(i)-1 
     matrices{i,1}(j-lb+1,:)=[Matrix2(j,:), Matrix1(lb+Matrix2(j,2)-2+i,2)]; 
    end 
end 

結果如下:

>> matrices{1,1} 

ans = 

    1.0000 2.0000 334.4560 
    2.0000 3.0000 654.7654 
    3.0000 4.0000 65.7654 

>> matrices{2,1} 

ans = 

    1.0000 2.0000 543.4357 
    2.0000 3.0000 98.4320 
    3.0000 4.0000 54.9876 
    4.0000 5.0000 12.4560 
+0

對不起,但這根本不是問題。仔細看看這個例子。 – 2013-05-18 15:11:43

+0

它是完美的。萬分感謝! – seli

+0

不客氣! –

0

也許這將是有益的。

Matrix1 = [ 
    1 0 
    2 334.456 
    3 654.7654 
    4 65.76543 
    1 0 
    2 543.43567 
    3 98.432 
    4 54.9876 
    5 12.456 
    ]; 

    result = {}; 
    index = 1; 
    temp = []; 
    prev = []; 

    for i=1:size(Matrix1)(1) 
    if (Matrix1(i, 1) == 1) 
     if (~isempty(temp)) 
     result{index++} = temp; 
     temp = []; 
     end 
     prev = Matrix1(i, 1:2); 
    else 
     curr = Matrix1(i, 1:2); 
     val = [prev(1), curr(1), curr(2)]; 
     prev = curr; 

     temp = [temp; val;]; 
    end 
    end 

    if (~isempty(temp)) 
    result{index} = temp; 
    end 

    result