シンボリック代入
ページ内をすべて折りたたむ
構文
snew = subs(s,old,new)
snew = subs(s,new)
snew = subs(s)
sMnew = subs(sM,oldM,newM)
sMnew = subs(sM,newM)
sMnew = subs(sM)
説明
シンボリック スカラー変数とシンボリック関数の代入
例
は、現れるすべての snew
= subs(s,old,new)old
を new
に置き換え、次に s
を評価して s
のコピーを返します。ここで、s
はシンボリック スカラー変数またはシンボリック関数の式であり、old
には代入の対象となるシンボリック スカラー変数またはシンボリック関数を指定します。
old
およびnew
がいずれも同じサイズのベクトルまたは cell 配列の場合、subs
はold
の各要素を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)oldM
を newM
に置き換え、次に sM
を評価して sM
のコピーを返します。ここで、sM
はシンボリック行列変数およびシンボリック行列関数を含む式、方程式、または条件であり、oldM
には代入の対象となるシンボリック行列変数およびシンボリック行列関数を指定します。置換値 newM
は、oldM
と同じサイズでなければなりません。 (R2021b 以降)
例
は、sMnew
= subs(sM,newM)sM
に現れる既定のシンボリック行列変数をすべて newM
に置き換え、次に sM
を評価して sM
のコピーを返します。 (R2021b 以降)
例
は、sMnew
= subs(sM)sM
内のシンボリック行列変数を MATLAB ワークスペースで割り当てられた値に置き換え、次に sM
を評価して sM
のコピーを返します。値が代入されていない変数は、変数のままになります。 (R2023b 以降)
例
すべて折りたたむ
単一置換
ライブ スクリプトを開く
この式で a
を 4
に置き換えます。
syms a bsubs(a + b,a,4)
ans =
この式で a*b
を 5
に置き換えます。
subs(a*b^2,a*b,5)
ans =
既定の代入変数
ライブ スクリプトを開く
次の式の既定のシンボリック スカラー変数を a
に置き換えます。置き換えるスカラー変数または式を指定しない場合、subs
は、symvar
を使用して既定の変数を求めます。x + y
では、既定の変数は x
です。
syms x y asymvar(x + y,1)
ans =
したがって、subs
は x
を a
に置き換えます。
subs(x + y,a)
ans =
新しい値による式の評価
ライブ スクリプトを開く
シンボリック スカラー変数に新しい値が代入されても、それらの値を含む式の値は自動的に求められません。代わりに、subs
を使用して式の値を求めます。
式 y = x^2
を定義します。
syms xy = x^2;
2
を x
に代入します。y
値は 4
ではなく x^2
のままです。
x = 2;y
y =
subs
を使用して、x
の新しい値で y
を評価します。
subs(y)
ans =
複数置換
ライブ スクリプトを開く
古い値と新しい値をベクトルとして指定し、複数の置換を行います。
syms a bsubs(cos(a) + sin(b), [a,b], [sym('alpha'),2])
ans =
あるいは、複数の代入には cell 配列を使用します。
subs(cos(a) + sin(b), {a,b}, {sym('alpha'),2})
ans =
配列によるスカラーの置き換え
ライブ スクリプトを開く
次の式のシンボリック スカラー変数 a
を 3 行 3 列の魔方陣行列に置き換えます。定数 1
により、3 行 3 列の行列のすべての要素が 1
に拡張されることに注意してください。
syms a tsubs(exp(a*t) + 1, a, -magic(3))
ans =
ベクトル、行列または非スカラー値の配列の要素を置き換えることもできます。たとえば、これらの 2 行 2 列の行列を作成します。
A = sym('A',[2,2])
A =
B = sym('B',[2,2])
B =
行列 A
の最初の要素を行列 B
と置き換えます。この置き換えを行う際に、subs
は 2 行 2 列の行列 A
を 4 行 4 列の行列に拡張します。
A44 = subs(A, A(1,1), B)
A44 =
subs
では、非スカラーまたは行列を、行列のサイズを縮小するスカラーに置き換えることはできません。
構造体配列内のシンボリック スカラー変数の置換
ライブ スクリプトを開く
フィールド値としてシンボリック式を使用して構造体配列を作成します。
syms x y zS = struct('f1',x*y,'f2',y + z,'f3',y^2)
S = struct with fields: f1: x*y f2: y + z f3: y^2
シンボリック スカラー変数 x
、y
、および 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 ysubs(x*y, {x,y}, {[0 1; -1 0], [1 -1; -2 1]})
ans =
x
と y
はスカラーであるため、これらの代入は要素単位で行われます。
[0 1; -1 0].*[1 -1; -2 1]
ans = 2×2 0 -1 2 0
方程式での置換
ライブ スクリプトを開く
もう 1 つの方程式の変数の値を使用して、方程式からスカラー変数を消去します。2 番目の方程式において、isolate
を使用して変数を左辺に分離し、それから右辺を 1 番目の方程式の変数で置き換えます。
はじめに、方程式 eqn1
および eqn2
を宣言します。
syms x yeqn1 = sin(x)+y == x^2 + y^2;eqn2 = y*x == cos(x);
isolate
を使用して eqn2
の y
を分離します。
eqn2 = isolate(eqn2,y)
eqn2 =
eqn2
の左辺を eqn2
の右辺に置き換えることで、eqn1
から y
を消去します。
eqn1 = subs(eqn1,lhs(eqn2),rhs(eqn2))
eqn1 =
関数での置換
ライブ スクリプトを開く
このシンボリック関数の x
を a
に置き換えます。
syms x y asyms f(x,y)f(x,y) = x + y;f = subs(f,x,a)
f(x, y) =
subs
はシンボリック関数式の値を置き換えますが、関数の入力引数は置き換えません。
formula(f)
ans =
argnames(f)
ans =
シンボリック関数の引数は明示的に置き換えます。
syms x yf(x,y) = x + y;f(a,y) = subs(f,x,a);f
f(a, y) =
構造体の対応値による変数の置き換え
ライブ スクリプトを開く
次の方程式系の解を確認するとします。
syms x yeqs = [x^2 + y^2 == 1, x == y];S = solve(eqs,[x y]);S.x
ans =
S.y
解を元の方程式系に代入して解を検証します。
isAlways(subs(eqs,S))
ans = 2x2 logical array 1 1 1 1
配列によるシンボリック行列変数の置き換え
R2021b 以降
ライブ スクリプトを開く
2 つの 2 行 2 列の行列の積を定義します。行列を symmatrix
データ型のシンボリック行列変数として宣言します。
syms X Y [2 2] matrixsM = X*Y
sM =
行列変数 と を 2 行 2 列のシンボリック行列に置き換えます。ベクトルまたは行列を含む複数の置換を行う場合は、cell 配列を使用して代入の対象となる行列変数とその新しい値を指定します。新しい値は、代入の対象となる行列変数と同じサイズでなければなりません。
S = subs(sM,{X,Y},{[0 sqrt(sym(2)); sqrt(sym(2)) 0], [1 -1; -2 1]})
S =
式 S
を sym
データ型に変換して、置換された行列の乗算結果を表示します。
Ssym = symmatrix2sym(S)
Ssym =
行列の特性多項式
R2021b 以降
ライブ スクリプトを開く
シンボリック数の行列を作成します。
A = sym([1 4 2; 4 1 2; 2 2 3])
A =
関数 charpoly
を使用して、A
の特性多項式の係数を計算します。
c = charpoly(A)
c =
次に、 を 3 行 3 列のシンボリック行列変数として定義します。係数 c
を使用して、多項式 を作成します。ここで は、3 行 3 列の行列を表す不定元です。
syms X [3 3] matrixp = c(1)*X^3 + c(2)*X^2 + c(3)*X + c(4)*X^0
p =
関数 subs
を使用して、多項式 の を A
で置換します。ケーリー・ハミルトンの定理によれば、係数 c
が A
の特性多項式であるため、この代入結果は 3 行 3 列のゼロ行列となります。symmatrix2sym
を使用して、置換された式をシンボリック数の行列に変換します。
Y = subs(p,A)
Y =
Z = symmatrix2sym(Y)
Z =
シンボリック行列関数での変数の代入
R2022a 以降
ライブ スクリプトを開く
関数 を定義します。ここで、 は 2 行 2 列の行列であり、 は 2 行 2 列の単位行列です。変数 に別の式を代入して、新しい関数を評価します。
2 行 2 列のシンボリック行列変数 を作成します。 の既存の定義をワークスペースに保持したまま、シンボリック行列関数 を作成します。 の多項式を割り当てます。
syms A 2 matrixsyms f(A) 2 matrix keepargsf(A) = A*A - 2*A + eye(2)
f(A) =
次に、新しいシンボリック行列変数 と を作成します。 と の既存の定義をワークスペースに保持したまま、新しいシンボリック行列関数 を作成します。
syms B C 2 matrixsyms g(B,C) 2 matrix keepargs
内の変数 に を代入します。代入結果を新しい関数 に割り当てます。
g(B,C) = subs(f,A,B+C)
g(B, C) =
subs
を使用して、行列値 と に対する を評価します。
S = subs(g(B,C),{B,C},{[0 1; -1 0],[1 -1; -2 1]})
S =
式 S
を symmatrix
データ型から sym
データ型に変換して、多項式の代入結果を表示します。
Ssym = symmatrix2sym(S)
Ssym =
シンボリック行列変数およびシンボリック行列関数の方程式への代入
R2022b 以降
ライブ スクリプトを開く
方程式 を定義します。ここで、 は 3 行 3 列の行列、 は 3 行 1 列の行列です。 に、別のシンボリック式、およびシンボリック値をもつ を代入します。この方程式がこれらの値について真となるかどうかをチェックします。
2 つのシンボリック行列変数 および を作成します。 と の既存の定義をワークスペースに保持したまま、シンボリック行列関数 を作成します。方程式を作成します。
syms A [3 3] matrixsyms X [3 1] matrixsyms f(X,A) [1 1] matrix keepargseq = diff(diff(f,X),X.') == 2*A
eq(X, A) =
に を代入し、この式の方程式に含まれる 2 次微分関数を評価します。
eq = subs(eq,f,X.'*A*X)
eq(X, A) =
に次数 3 のヒルベルト行列を代入します。
eq = subs(eq,A,hilb(3))
eq(X, A) =
isAlways
を使用して、この方程式がこれらの値について真となるかどうかをチェックします。isAlways
は symfun
型または sym
型のシンボリック入力のみを受け入れるため、isAlways
を使用する前に eq
を symfunmatrix
型から symfun
型に変換します。
tf = isAlways(symfunmatrix2symfun(eq))
tf = 3x3 logical array 1 1 1 1 1 1 1 1 1
シンボリック行列変数を含む式の評価
R2023b 以降
ライブ スクリプトを開く
式 を定義します。ここで、 と は 3 行 3 列の行列です。行列をシンボリック行列変数として作成します。
syms X Y [3 3] matrixC = X*Y^2 - Y*X^2
C =
行列 X
と Y
に値を代入します。
X = [-1 2 pi; 0 1/2 2; 2 1 0];Y = [3 2 2; -1 2 1; 1 2 -1];
subs
を使用して、X
と Y
の値が代入された式 C
を評価します。
Cnew = subs(C)
Cnew =
結果を symmatrix
データ型から double
データ型に変換します。
Cnum = double(Cnew)
Cnum = 3×3 -42.8496 -13.3584 -13.4336 -0.7168 3.1416 0.0752 -3.2832 29.8584 16.4248
入力引数
すべて折りたたむ
s
— シンボリック入力
シンボリック スカラー変数 | シンボリック式 | シンボリック方程式 | シンボリック関数 | シンボリック配列 | シンボリック行列 | 構造体
シンボリック入力。シンボリック スカラー変数、シンボリック式、シンボリック方程式、シンボリック関数、シンボリック配列、シンボリック行列、または構造体として指定します。
データ型: sym
| symfun
| struct
old
— 代入の対象となるスカラー変数
シンボリック スカラー変数 | シンボリック関数 | シンボリック式 | シンボリック配列 | cell 配列
代入の対象となるスカラー変数。シンボリック スカラー変数、シンボリック関数、シンボリック式、シンボリック配列、または cell 配列として指定します。
データ型: sym
| symfun
| cell
new
— 新しい値
数値 | シンボリック数 | シンボリック スカラー変数 | シンボリック関数 | シンボリック式 | シンボリック配列 | 構造体 | cell 配列
代入する新しい値。数値、シンボリック数、シンボリック スカラー変数、シンボリック関数、シンボリック式、シンボリック配列、構造体、または cell 配列として指定します。
データ型: sym
| symfun
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| struct
| cell
sM
— シンボリック入力
シンボリック行列変数 | シンボリック行列関数 | シンボリック式 | シンボリック方程式 | シンボリックな条件
シンボリック入力。シンボリック行列変数、シンボリック行列関数、シンボリック式、シンボリック方程式、またはシンボリック条件として指定します。
データ型: symmatrix
| symfunmatrix
oldM
— 代入の対象となる行列変数または行列関数
シンボリック行列変数 | シンボリック行列関数 | シンボリック式 | cell 配列
代入の対象となる行列変数または行列関数。シンボリック行列変数、シンボリック行列関数、シンボリック式、または cell 配列として指定します。
データ型: symmatrix
| symfunmatrix
| cell
newM
— 新しい値
数値 | シンボリック数 | シンボリック行列変数 | シンボリック行列関数 | シンボリック式 | シンボリック配列 | 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
を評価します。すべての定数項は、単位行列にその定数をかけた項に置き換えられます。R2022b 以降、微分または関数
diff
を含むシンボリック代入では、代入されるシンボリック オブジェクトの入力順序に従います。たとえば、次のコードは関数diff
を含むシンボリック代入を実行します。R2022b より前では、コードは次の出力を返します。syms m k x(t)syms x_t x_t_ddoteqSHM = m*diff(x(t),t,2) == -k*x(t);eqSHMnew = subs(eqSHM,[x(t) diff(x(t),t,2)],[x_t x_t_ddot])
eqSHMnew = m*x_t_ddot == -k*x_t
R2022b 以降では、コードは次の出力を返します。
出力が異なるのは、eqSHMnew =0 == -k*x_t
subs
が最初にx(t)
にx_t
を代入するようになったためであり、この結果はdiff(x_t,t,2)
、つまり0
に等しくなります。以前のリリースと同じ代入結果を得るには、最初にdiff(x(t),t,2)
項を指定して、それがx(t)
項の前に代入されるようにします。eqSHMnew = subs(eqSHM,[diff(x(t),t,2) x(t)],[x_t_ddot x_t])
eqSHMnew = m*x_t_ddot == -k*x_t
バージョン履歴
R2006a より前に導入
すべて展開する
R2023b: シンボリック行列変数へのワークスペースの値の代入
構文 subs(sM)
を使用すると、sM
内のシンボリック行列変数およびシンボリック行列関数に MATLAB ワークスペースで割り当てられた値を代入してから sM
を評価できます。値が代入されていない変数は、変数のままになります。例については、シンボリック行列変数を含む式の評価を参照してください。
R2022b: シンボリック方程式またはシンボリック条件におけるシンボリック行列変数およびシンボリック行列関数の代入
関数 subs
は、最初の入力引数として、symmatrix
型または symfunmatrix
型のシンボリック方程式またはシンボリック条件を受け入れます。例については、シンボリック行列変数およびシンボリック行列関数の方程式への代入を参照してください。
R2022a: シンボリック行列関数での変数の代入
関数 subs
は、最初の入力引数として、symfunmatrix
型のシンボリック行列関数を受け入れます。例については、シンボリック行列関数での変数の代入を参照してください。
R2021b: シンボリック式でのシンボリック行列変数の代入
関数 subs
は、最初の入力引数として、symmatrix
型のシンボリック式を受け入れます。例については、配列によるシンボリック行列変数の置き換えおよび行列の特性多項式を参照してください。
参考
関数
- double | lhs | rhs | simplify | subexpr | vpa
トピック
- シンボリック式への代入
- シンボリック式の変数の置き換え
- シンボリック行列の要素の置き換え
- スカラーを行列で置き換える
- subs を使用したシンボリック式の求解
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- Deutsch
- English
- Français
- United Kingdom (English)
Contact your local office