我有一個用戶輸入(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?
我有一個用戶輸入(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?
首先創建一個矩陣,其中每行從1到i
與i
行,然後將矩陣的上三角形(包括對角線)設置爲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到i
和i
行,我們可以使用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
功能'diag'和'triu'可能有用。 – nibot
@nibot這兩個函數應該足夠還是我需要其他東西? – carlosremove
矩陣背後的邏輯是什麼?我的意思是除了5x5之外,你如何決定在矩陣中放置什麼元素? –