Main Content

スカラーを行列で置き換える

次の正弦関数を表す式を作成します。

syms w t
f = sin(w*t);

テプリッツ行列で表される角速度をもつ正弦関数を要素とする行列の作成を伴うタスクがあるとします。まず、4 行 4 列のテプリッツ行列を作成します。

W = toeplitz(sym([3 2 1 0]))
W =
[ 3, 2, 1, 0]
[ 2, 3, 2, 1]
[ 1, 2, 3, 2]
[ 0, 1, 2, 3]

次に、式 f の変数 w をテプリッツ行列 W と置き換えます。シンボリック式のスカラーを行列と置き換えるとき、subs は式を行列に展開します。この例では、subs は、sin(w*t) を要素とする 4 行 4 列の行列に f = sin(w*t) を展開します。次に、この関数は 4 行 4 列の行列の w をテプリッツ行列 W の対応する要素と置き換えます。

F = subs(f, w, W)
F =
[ sin(3*t), sin(2*t),   sin(t),        0]
[ sin(2*t), sin(3*t), sin(2*t),   sin(t)]
[   sin(t), sin(2*t), sin(3*t), sin(2*t)]
[        0,   sin(t), sin(2*t), sin(3*t)]

t = πt = π/2t = π/3t = π/4t = π/5、および t = π/6 における、これらの正弦波の和を求めます。まず、行列 F のすべての要素の和を求めます。ここで、sum の最初の呼び出しでは、各列の要素の和を含む行ベクトルが返されます。sum の 2 番目の呼び出しでは、行ベクトルの要素の和が返されます。

S = sum(sum(F))
S =
6*sin(2*t) + 4*sin(3*t) + 4*sin(t)

次に、subs を使用して、変数 t の特定の値に対する S の値を求めます。

subs(S, t, sym(pi)./[1:6])
[ 0,...
  0,...
  5*3^(1/2), 4*2^(1/2) + 6,...
  2^(1/2)*(5 - 5^(1/2))^(1/2) + (5*2^(1/2)*(5^(1/2) + 5)^(1/2))/2,...
  3*3^(1/2) + 6]

subs を使用して、行列のスカラーの要素を別の行列と置き換えることもできます。この場合、subs は行列を展開して新しい要素を組み入れます。たとえば、行列 F のゼロの要素を列ベクトル [1;2] と置き換えます。元の 4 行 4 列行列 F は展開して 8 行 4 列行列になります。関数 subs は、ゼロの要素を含む行だけでなく、元の行列の各行を複製します。

F = subs(F, 0, [1;2])
F =
[ sin(3*t), sin(2*t),   sin(t),        1]
[ sin(3*t), sin(2*t),   sin(t),        2]
[ sin(2*t), sin(3*t), sin(2*t),   sin(t)]
[ sin(2*t), sin(3*t), sin(2*t),   sin(t)]
[   sin(t), sin(2*t), sin(3*t), sin(2*t)]
[   sin(t), sin(2*t), sin(3*t), sin(2*t)]
[        1,   sin(t), sin(2*t), sin(3*t)]
[        2,   sin(t), sin(2*t), sin(3*t)]