forループを使わない方法

7 Ansichten (letzte 30 Tage)
貴弘
貴弘 am 3 Mär. 2025
Kommentiert: 貴弘 am 3 Mär. 2025
n = 1;
d = 2;
Phi = eye(n+d+1);
Phi_b = [1;2];
for k = 1:d
Phi(k+1:k+n+1,k) = Phi_b;
end
上記のような単位行列Phiの特定の位置にPhi_bを入れるようなプログラムがあります.
処理の都合上をforを使わない形で表現できないかと考えておりますが,
良いアイデアがありません.
ご教示いただけないでしょうか?

Akzeptierte Antwort

Akira Agata
Akira Agata am 3 Mär. 2025
テプリッツ行列を作成する関数 toeplitz を使うとできそうです。
たとえば以下のような方法はいかがでしょうか?(ちなみに n と Phi_b は独立ではないため、以下では n を 1 としています)
% d, Phi_b の一例
d = 3;
Phi_b = [1;2];
% テプリッツ行列を作成
c = [1; Phi_b; zeros(d-1, 1)];
r = [1, zeros(1, d+1)];
Phi = toeplitz(c, r);
% (end, end-1) の要素だけテプリッツ行列と異なるため修正
Phi(end, end-1) = 0;
% 結果を表示
disp(Phi)
1 0 0 0 0 1 1 0 0 0 2 1 1 0 0 0 2 1 1 0 0 0 2 0 1
  1 Kommentar
貴弘
貴弘 am 3 Mär. 2025
ありがとうございます!
できました!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Multidimensional Arrays finden Sie in Help Center und File Exchange

Produkte


Version

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!