forループを使わない方法

7 次查看(过去 30 天)
貴弘
貴弘 2025-3-3
评论: 貴弘 2025-3-3
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を使わない形で表現できないかと考えておりますが,
良いアイデアがありません.
ご教示いただけないでしょうか?

采纳的回答

Akira Agata
Akira Agata 2025-3-3
テプリッツ行列を作成する関数 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 个评论
貴弘
貴弘 2025-3-3
ありがとうございます!
できました!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Multidimensional Arrays 的更多信息

产品


版本

R2023a

Community Treasure Hunt

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

Start Hunting!