2017-02-21 119 views
1

我有一個用戶輸入(i),它是一個奇數。我想創建一個數組我i次。所以我做了以下幾點:橫跨對角線的反射陣列

reflect = zeros(i, i); 

現在,我想產生一個數組,其中包含反映沿着主對角線的數字。

如果我= 5,它應該是這樣的:

6 4 3 2 1 
1 6 3 2 1 
1 2 6 2 1 
1 2 3 6 1 
1 2 3 4 6 

我可以做到這一點使用循環,而且這怎麼可能只使用陣列funcitons?

+0

功能'diag'和'triu'可能有用。 – nibot

+0

@nibot這兩個函數應該足夠還是我需要其他東西? – carlosremove

+0

矩陣背後的邏輯是什麼?我的意思是除了5x5之外,你如何決定在矩陣中放置什麼元素? –

回答

2

首先創建一個矩陣,其中每行從1到ii行,然後將矩陣的上三角形(包括對角線)設置爲0.一旦您完成此操作,請將此矩陣旋轉180度並創建另一個矩陣矩陣,其大小爲基體,並伴隨着零對角線所有i + 1額外的矩陣一樣被設置成其他人,並添加所有的矩陣一起:

i = 5; 
M = repmat(1 : i, i, 1); 
M(triu(M) ~= 0) = 0; 
O = M + (i + 1)*eye(i) + rot90(M, 2); 

讓我們通過一個代碼的每一行一次。第一行只是定義了什麼尺寸矩陣,即i x i。接下來我們創建一個矩陣M,該矩陣從1到ii行,我們可以使用repmat來幫助我們創建該矩陣,方法是首先從1到i的矢量並垂直複製i次。接下來,我們使用triu函數提取該矩陣的上三角部分(包括對角線),但我們將設置上三角部分中的所有元素都爲0.我們只需比較上三角部分與非零部分並使用logical索引來幫助我們做到這一點。這將對角線和上三角部分設置爲0,其餘部分保持完好。

最後,我們把這個矩陣,並與eye單位矩陣由i + 1比例添加此最後完成上半部分,我們簡單地通過180度使用rot90 90度旋轉矩陣旋轉此相同的矩陣,但因爲我們希望有一個180度旋轉,我們需要90度的兩次旋轉,所以第二parmeter rot90設置爲2

因此,我們得到:

>> O 

O = 

    6  4  3  2  1 
    1  6  3  2  1 
    1  2  6  2  1 
    1  2  3  6  1 
    1  2  3  4  6