私は奇数であるユーザー入力(i)を持っています。私は配列iを作成したいと思います。だから私は次のようにします:対角に反射された配列
ここでは、主対角線に沿って反射する数字を含む配列を生成したいと思います。私はこの使用してループを行うことができます
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
をどのようにこれは単なる配列つくを使用して可能である:
I = 5なら、それは次のようになりますか?
私は奇数であるユーザー入力(i)を持っています。私は配列iを作成したいと思います。だから私は次のようにします:対角に反射された配列
ここでは、主対角線に沿って反射する数字を含む配列を生成したいと思います。私はこの使用してループを行うことができます
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
をどのようにこれは単なる配列つくを使用して可能である:
I = 5なら、それは次のようになりますか?
最初に、各行が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);
のは、コード1の各ラインを通って行こう一度に。最初の行は、あなたが持っているサイズマトリックスを定義します。これはi x i
です。次に、行列M
を作成し、1からi
までi
行を作成します。repmat
を使用すると、最初にベクトルを1からi
にし、それを垂直にi
倍に複製することができます。次に、triu
関数を使用して、対角を含むこの行列の上三角部分を抽出しますが、上三角部分のすべての要素を0に設定します。上三角部分とゼロ以外の部分を単純に比較しますこれを行うためにlogical
インデックスを使用してください。これにより、対角部分と上三角部分が0に設定され、残りの部分はそのまま残ります。最後に
、我々はこの行列を取り、i + 1
によってスケーリングeye
と単位行列でこれを追加し、最終的には上半分を完了するために、我々は単純に90度行列を回転させるrot90
を使用して180度で、これと同じ行列を回転させるが、私たちは、180度の回転をしたいと、私たちは二度90度回転する必要があるので、2
に二parmeter rot90
を設定する私たちは、このように取得する:
>> 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これら2つの機能で十分か、他に何か必要がありますか? – carlosremove
その行列の背後にある論理は何ですか?私はそれが「5x5」であることを別にすれば、その行列のどこにどの要素を配置するかをどのように決定するのでしょうか? –