Main Content

subs

説明

snew = subs(s,old,new) は、現れるすべての oldnew に置き換え、次に s を評価して s のコピーを返します。ここで、s はシンボリック スカラー変数またはシンボリック関数の式であり、old には代入の対象となるシンボリック スカラー変数またはシンボリック関数を指定します。

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

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

snew = subs(s,new) は、s に現れる既定のシンボリック スカラー変数をすべて new に置き換え、次に s を評価して s のコピーを返します。既定の変数は symvar(s,1) で定義されます。

snew = subs(s) は、s のコピーを返し、s 内のシンボリック スカラー変数を MATLAB® ワークスペースで割り当てられた値に置き換えてから、s を評価します。値が代入されていない変数は、変数のままになります。

sMnew = subs(sM,oldM,newM) は、現れるすべての oldMnewM に置き換え、次に sM を評価して sM のコピーを返します。ここで、sM はシンボリック行列変数またはシンボリック行列関数の式であり、oldM には代入の対象となるシンボリック行列変数またはシンボリック行列関数を指定します。置換値 newM は、oldM と同じサイズでなければなりません。

sMnew = subs(sM,newM) は、sM に現れる既定のシンボリック行列変数をすべて newM に置き換え、次に sM を評価して sM のコピーを返します。

すべて折りたたむ

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

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

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

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

次の式の既定のシンボリック スカラー変数を 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 = x2

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

subs(y)
ans = 4

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

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

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

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

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

syms a t
subs(exp(a*t) + 1, a, -magic(3))
ans = 

(e-8t+1e-t+1e-6t+1e-3t+1e-5t+1e-7t+1e-4t+1e-9t+1e-2t+1)

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

A = sym('A',[2,2])
A = 

(A1,1A1,2A2,1A2,2)

B = sym('B',[2,2])
B = 

(B1,1B1,2B2,1B2,2)

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

A44 = subs(A, A(1,1), B)
A44 = 

(B1,1B1,2A1,2A1,2B2,1B2,2A1,2A1,2A2,1A2,1A2,2A2,2A2,1A2,1A2,2A2,2)

subs では、非スカラーまたは行列を、行列のサイズを縮小するスカラーに置き換えることはできません。

フィールド値としてシンボリック式を使用して構造体配列を作成します。

syms x y z
S = struct('f1',x*y,'f2',y + z,'f3',y^2)
S = struct with fields:
    f1: x*y
    f2: y + z
    f3: y^2

シンボリック スカラー変数 xy、および z を数値に置き換えます。

Sval = subs(S,[x y z],[0.5 1 1.5])
Sval = struct with fields:
    f1: 1/2
    f2: 5/2
    f3: 1

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

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

(0-120)

xy はスカラーであるため、これらの代入は要素単位で行われます。

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

     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)2x2+x2

このシンボリック関数の 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)
ans = a+y
argnames(f)
ans = (xy)

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

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
ans = 

(-2222)

S.y
ans = 

(-2222)

解を元の方程式系に代入して解を検証します。

isAlways(subs(eqs,S))
ans = 2x2 logical array

   1   1
   1   1

2 つの 2 行 2 列の行列の積を定義します。行列を symmatrix データ型のシンボリック行列変数として宣言します。

syms X Y [2 2] matrix
sM = X*Y
sM = XY

行列変数 XY を 2 行 2 列のシンボリック行列に置き換えます。ベクトルまたは行列を含む複数の置換を行う場合は、cell 配列を使用して代入の対象となる行列変数とその新しい値を指定します。新しい値は、代入の対象となる行列変数と同じサイズでなければなりません。

S = subs(sM,{X,Y},{[0 1; -1 0], [1 -1; -2 1]})
S = 

Σ1Σ2where  Σ1=(01-10)  Σ2=(1-1-21)

Ssym データ型に変換して、置換された行列の乗算結果を表示します。

Ssym = symmatrix2sym(S)
Ssym = 

(-21-11)

シンボリック数の行列を作成します。

A = sym([1 4 2; 4,1,2; 2,2,3])
A = 

(142412223)

関数 charpoly を使用して、A の特性多項式の係数を計算します。

c = charpoly(A);

次に、X を 3 行 3 列のシンボリック行列変数として定義します。係数 c を使用して、多項式 p(X)=c1X3+c2X2+c3X+c4I3 を作成します。ここで X は、3 行 3 列の行列を表す不定元です。

syms X [3 3] matrix
p = c(1)*X^3 + c(2)*X^2 + c(3)*X + c(4)*X^0
p = 21I3-17X-5X2+X3

関数 subs を使用して、多項式 p(X)XA で置換します。Cayley-Hamilton の定理によれば、係数 cA の特性多項式であるため、この結果は 3 行 3 列のゼロ行列となります。symmatrix2sym を使用して、置換された式をシンボリック数の行列に変換します。

Y = subs(p,A)
Y = 

-17Σ1-5Σ12+Σ13+21I3where  Σ1=(142412223)

Z = symmatrix2sym(Y)
Z = 

(000000000)

関数 f(A)=A2-2A+I2 を定義します。ここで、A は 2 行 2 列の行列であり、I2 は 2 行 2 列の単位行列です。変数 A に別の式を代入して、新しい関数を評価します。

2 行 2 列のシンボリック行列変数 A を作成します。A の既存の定義をワークスペースに保持したまま、シンボリック行列関数 f(A) を作成します。f(A) の多項式を割り当てます。

syms A 2 matrix
syms f(A) 2 matrix keepargs
f(A) = A*A - 2*A + eye(2)
f(A) = I2-2A+A2

次に、新しいシンボリック行列変数 BC を作成します。BC の既存の定義をワークスペースに保持したまま、新しいシンボリック行列関数 g(B,C) を作成します。

syms B C 2 matrix
syms g(B,C) 2 matrix keepargs

f(A) 内の変数 AB+C を代入します。代入結果を新しい関数 g(B,C) に割り当てます。

g(B,C) = subs(f,A,B+C)
g(B, C) = B+C2+I2-2B-2C

subs を使用して、行列値 B=[01-10]C=[1-1-21] に対する g(B,C) を評価します。

S = subs(g(B,C),{B,C},{[0 1; -1 0],[1 -1; -2 1]})
S = 

-2Σ1-2Σ2+Σ1+Σ22+I2where  Σ1=(01-10)  Σ2=(1-1-21)

Ssymmatrix データ型から sym データ型に変換して、多項式の代入結果を表示します。

Ssym = symmatrix2sym(S)
Ssym = 

(0000)

入力引数

すべて折りたたむ

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

データ型: sym | symfun | struct

代入の対象となるスカラー変数。シンボリック スカラー変数、シンボリック関数、シンボリック式、シンボリック配列、または cell 配列として指定します。

データ型: sym | symfun | cell

代入する新しい値。数値、シンボリック数、シンボリック スカラー変数、シンボリック関数、シンボリック式、シンボリック配列、構造体、または cell 配列として指定します。

データ型: sym | symfun | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | struct | cell

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

データ型: symmatrix | symfunmatrix

代入の対象となる行列変数または行列関数。シンボリック行列変数、シンボリック行列関数、シンボリック式、または cell 配列として指定します。

データ型: symmatrix | symfunmatrix | cell

代入する新しい値。数値、シンボリック数、シンボリック行列変数、シンボリック行列関数、シンボリック式、シンボリック配列、または cell 配列として指定します。newM のサイズは、oldM と同じであるか、sM の既定のシンボリック行列変数と同じでなければなりません。

データ型: sym | symmatrix | symfunmatrix | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | struct | cell

ヒント

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

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

バージョン履歴

R2006a より前に導入

すべて展開する