ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

subs

構文

  • subs(s,old,new)
  • subs(s,new)
  • subs(s)

説明

subs(s,old,new) は、現れるすべての oldnew に置き換え、次に s を評価して s のコピーを返します。

subs(s,new) は、s に現れる既定の変数をすべて new に置き換え、次に s を評価して s のコピーを返します。既定の変数は symvar で定義されます。

subs(s) は、s のシンボリック変数を、呼び出し関数と MATLAB® ワークスペースから取得した値で置き換え、次に s を評価して s のコピーを返します。値が代入されていない変数は、変数のままになります。

単一置換

この式で a4 に置き換えます。

syms a b
subs(a + b, a, 4)
ans =
b + 4

この式で a*b5 に置き換えます。

subs(a*b^2, a*b, 5)
ans =
5*b

既定により置き換えられる値

次の式の既定値を a に置き換えます。置き換える変数または式を指定しない場合、subs は、symvar を使用して既定の変数を求めます。x + yでは、既定の変数は x です。

syms x y a
symvar(x + y, 1)
ans =
x

したがって、subs は xa に置き換えます。

subs(x + y, a)
ans =
a + y

単一入力

次の常微分方程式を解きます。

syms a y(t)
y = dsolve(diff(y) == -a*y)
y =
C3*exp(-a*t)

次に、シンボリック パラメーター aC2 の値を指定します。

a = 980;
C2 = 3;

aC2 は、この時点で MATLAB ワークスペースにありますが、y はこれらの値を使用して評価されていません。

y
y =
C3*exp(-a*t)

aC2 の新しい値を考慮して y を評価するには、subs を使用します。

subs(y)
ans =
C3*exp(-980*t)

複数置換

古い値と新しい値をベクトルとして指定し、複数の置換を行います。

syms a b
subs(cos(a) + sin(b), [a, b], [sym('alpha'), 2])
ans =
sin(2) + cos(alpha)

また、この目的でセル配列も使用できます。

subs(cos(a) + sin(b), {a, b}, {sym('alpha'), 2})
ans =
sin(2) + cos(alpha)

スカラーと行列の拡張

次の式の変数 a を 3 行 3 列の魔方陣行列に置き換えます。定数 1 により、3 行 3 列の行列のすべての要素が 1 に拡張されることに注意してください。

syms a t
subs(exp(a*t) + 1, a, -magic(3))
ans =
[ exp(-8*t) + 1,   exp(-t) + 1, exp(-6*t) + 1]
[ exp(-3*t) + 1, exp(-5*t) + 1, exp(-7*t) + 1]
[ exp(-4*t) + 1, exp(-9*t) + 1, exp(-2*t) + 1]

ベクトル、行列または非スカラー値の配列の要素を置き換えることもできます。たとえば、これらの 2 行 2 列の行列を作成します。

A = sym('A', [2,2])
B = sym('B', [2,2])
A =
[ A1_1, A1_2]
[ A2_1, A2_2]
 
B =
[ B1_1, B1_2]
[ B2_1, B2_2]

行列 A の最初の要素を行列 B と置き換えます。この置き換えを行う際に、subs は 2 行 2 列の行列 A を 4 行 4 列の行列に拡張します。

A44 = subs(A, A(1,1), B)
A44 =
[ B1_1, B1_2, A1_2, A1_2]
[ B2_1, B2_2, A1_2, A1_2]
[ A2_1, A2_1, A2_2, A2_2]
[ A2_1, A2_1, A2_2, A2_2]

subs では、非スカラーをスカラーに置き換えることはできません。

複数のスカラー拡張

変数 x および y を 2 行 2 列の行列に置き換えます。ベクトルや行列の関与する複数の置換を行う場合は、セル配列を使用して古い値と新しい値を指定します。

syms x y
subs(x*y, {x, y}, {[0 1; -1 0], [1 -1; -2 1]})
ans =
[ 0, -1]
[ 2,  0]

これらの代入は要素ごとに行われることに注意してください。

[0 1; -1 0].*[1 -1; -2 1]
ans =
     0    -1
     2     0

方程式での置換

この式の sin(x + 1)a に置き換えます。

syms x a
subs(sin(x + 1) + 1 == x, sin(x + 1), a)
ans =
a + 1 == x

関数での置換

このシンボリック関数の xa に置き換えます。

syms x y a
syms f(x, y)
f(x, y) = x + y;
f = subs(f, x, a)
f(x, y) =
a + y

subs はシンボリック関数式の値を置き換えますが、関数の入力変数は置き換えません。

formula(f)
argnames(f)
ans =
a + y
 
ans =
[ x, y]

シンボリック関数の引数は明示的に置き換えることができます。

syms x y
f(x, y) = x + y;
f(a, y) = subs(f, x, a);
f
f(a, y) =
a + y

元の式

x + ys に代入します。

syms x y
s = x + y;

次の式で y を値 1 に置き換えます。ここで、s は変化しません。

subs(s, y, 1);
s
s =
x + y

s の値を新しい式と置き換えるためには、subs から返された結果を s に代入します。

s = subs(s, y, 1);
s
s =
x + 1

構造体配列

次の連立方程式の解を確認するとします。

syms x y
eqs = [x^2 + y^2 == 1, x == y];
S = solve(eqs, x, y);
S.x
S.y
ans =
 -2^(1/2)/2
  2^(1/2)/2
ans =
 -2^(1/2)/2
  2^(1/2)/2

返される解の正確性を検証するため、解を元の連立方程式に代入します。

isAlways(subs(eqs, S))
ans =
     1     1
     1     1

関連する例

入力引数

すべて折りたたむ

シンボリック変数、シンボリック式、シンボリック方程式、シンボリック関数、シンボリック配列、シンボリック ベクトルまたはシンボリック行列として指定される入力。

シンボリック変数、シンボリック式、シンボリック文字列、シンボリック配列、シンボリック ベクトルまたはシンボリック行列として指定される、置き換える必要がある既存の要素。

数値、変数、式、文字列、配列、ベクトル、行列または構造体配列として指定される新しい要素。

詳細

すべて折りたたむ

ヒント

  • subs(s,old,new)s を変更しません。s を変更するには、s = subs(s,old,new) を使用します。

  • oldnew がいずれも同じサイズのベクトルまたはセル配列の場合、subsold の各要素を new の対応する要素で置き換えます。

  • old がスカラーであり、new がベクトルまたは行列である場合、subs(s,old,new) はすべての演算を要素ごとに実行して、s における old のインスタンスをすべて new に置き換えます。s のすべての定数項は、すべて 1 のベクトルまたは行列にその定数をかけた項に置き換えられます。

  • s が一変数多項式で、new が数値行列の場合、polyvalm(sym2poly(s), new) を使用して行列として s を評価します。すべての定数項は、単位行列にその定数をかけた項に置き換えられます。

参考

| | | |

R2006a より前に導入

この情報は役に立ちましたか?