forループを使わない方法

3 vues (au cours des 30 derniers jours)
貴弘
貴弘 le 3 Mar 2025
Commenté : 貴弘 le 3 Mar 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を使わない形で表現できないかと考えておりますが,
良いアイデアがありません.
ご教示いただけないでしょうか?

Réponse acceptée

Akira Agata
Akira Agata le 3 Mar 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 commentaire
貴弘
貴弘 le 3 Mar 2025
ありがとうございます!
できました!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Multidimensional Arrays dans Help Center et File Exchange

Produits


Version

R2023a

Community Treasure Hunt

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

Start Hunting!