ドキュメンテーション

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

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

新しい値による式の評価

シンボリック変数に新しい値が代入されても、それらの値を含む式の値は自動的に求められません。代わりに、subs を使用して式の値を求めます。

y = x^2 を定義します。

syms x
y = x^2;

2x に代入します。y 値は 4 ではなく x^2 のままです。

x = 2;
y
y =
x^2

subs を使用して、x の新しい値で y を評価します。

subs(y)
ans =
4

複数置換

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

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

あるいは、複数の代入には cell 配列を使用します。

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 列の行列に置き換えます。ベクトルや行列の関与する複数の置換を行う場合は、cell 配列を使用して古い値と新しい値を指定します。

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

方程式での置換

もう 1 つの方程式の変数の値を使用して、方程式から変数を消去します。2 番目の方程式において、isolate を使用して変数を左辺に分離し、それから右辺を 1 番目の方程式の変数で置き換えます。

はじめに、方程式 eqn1 および eqn2 を宣言します。

syms x y
eqn1 = sin(x)+y == x^2 + y^2;
eqn2 = y*x == cos(x);

isolate を使用して eqn2y を分離します。

eqn2 = isolate(eqn2,y)
eqn2 =
y == cos(x)/x

eqn2 の右辺を eqn1eqn2 の左辺で置き換えることで、eqn1 から y を消去します。

eqn1 = subs(eqn1,lhs(eqn2),rhs(eqn2))
eqn1 =
sin(x) + cos(x)/x == cos(x)^2/x^2 + x^2

関数での置換

このシンボリック関数の 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

構造体の対応値による変数の置き換え

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

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 =
  2×2 logical array
   1   1
   1   1

入力引数

すべて折りたたむ

入力。シンボリック変数、シンボリック式、シンボリック方程式、シンボリック関数、シンボリック配列、またはシンボリック行列として指定します。

代入する要素。シンボリック変数、シンボリック式、またはシンボリック配列として指定します。

代入する新しい要素。数値、シンボリック数、シンボリック変数、シンボリック式、シンボリック配列、またはシンボリック構造体として指定します。

ヒント

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

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

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

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

R2006a より前に導入