A
マトリックスを作成するには、blkdiag
を使用します。対角線に沿って配置する各項目を構成するには、連結(cat
)とmat2cell
を組み合わせて使用し、{:}
インデックスを付けて各セル配列要素を別の値としてblkdiag
に渡すことができます。
a = [1 2 3 4];
b = [5 6 7 8];
% The size of each "block"
sz = 2;
inputs = mat2cell(cat(2, a(:), b(:)), repmat(sz, [numel(a)/sz, 1]));
% [2x2 double]
% [2x2 double]
A = blkdiag(inputs{:});
% 1 5 0 0
% 2 6 0 0
% 0 0 3 7
% 0 0 4 8
a
とb
た説明
は、我々はそれぞれのすべての2つの要素を取り、マトリックスにそれらを結合したいです。最初のステップは、私たちは、今、最初の2つの行が1つのマトリックスの一部であるような2×2の行列にこれを破るにしたいしたい、我々は第二の次元に沿って
C = cat(2, a(:), b(:))
% 1 5
% 2 6
% 3 7
% 4 8
をa
とb
を連結しようとしているということです次の2つは、別の行列の一部であり、そのようなものです。 mat2cell
を使用すると、この行列をセル配列に変換できます。ここで、各要素には、上で説明したように2 x 2行列が含まれています。
repmat(2, [numel(a)/2, 1])
は、単純に合計がa
内の要素の合計数(答えに、私は一般的なsz
変数と2つのを交換した)に等しい私たちはすべて2の配列をしたいと言っています。これは、各セル要素に入れる行数をmat2cell
に指示します。
D = mat2cell(C, repmat(2, [numel(a)/2, 1]))
% D{1} =
%
% 1 5
% 2 6
%
% D{2} =
%
% 3 7
% 4 8
私たちは、その後、あなたがそのような対角線に沿って物事を置くために、 `blkdiag`を使用することができますcomma-separated list
blkdiag(D{:})
% 1 5 0 0
% 2 6 0 0
% 0 0 3 7
% 0 0 4 8
を生み出す
{:}
インデックスを使用してblkdiag
に別々の入力引数として、これらの細胞の配列の要素を渡すことができますが、もっと重要なのは、なぜあなたの 'A'マトリックスに' b'を入れようとしているのですか?あなたが同時に解決しようとしている方程式の[mcve]を提供するかもしれません。 – Suever@Sueverああ、 'x = A \ b'のbは、マトリックスのものと同じではありません。混乱して申し訳ありません(私の質問を編集しました)。私は 'blkdiag'があることを知っていますが、ループなしでそれを使う方法はわかりません。どうやら' [a(i)、a(i + 1); b(i)、b(i + 1)] ... ... – Dunno