?入 - MATLAB subs MathWorks 日本 (2024)

Table of Contents
構文 説明 シンボリック スカラー変数とシンボリック関数の代入 シンボリック行列変数とシンボリック行列関数の代入 単一置換 既定の代入変数 新しい値による式の評価 複数置換 配列によるスカラーの置き換え 構造体配列内のシンボリック スカラー変数の置換 配列による複数のスカラーの置き換え 方程式での置換 関数での置換 構造体の対応値による変数の置き換え 配列によるシンボリック行列変数の置き換え 行列の特性多項式 シンボリック行列関数での変数の代入 シンボリック行列変数およびシンボリック行列関数の方程式への代入 シンボリック行列変数を含む式の評価 入力引数 s — シンボリック入力 シンボリック スカラー変数 | シンボリック式 | シンボリック方程式 | シンボリック関数 | シンボリック配列 | シンボリック行列 | 構造体 old — 代入の対象となるスカラー変数 シンボリック スカラー変数 | シンボリック関数 | シンボリック式 | シンボリック配列 | cell 配列 new — 新しい値 数値 | シンボリック数 | シンボリック スカラー変数 | シンボリック関数 | シンボリック式 | シンボリック配列 | 構造体 | cell 配列 sM — シンボリック入力 シンボリック行列変数 | シンボリック行列関数 | シンボリック式 | シンボリック方程式 | シンボリックな条件 oldM — 代入の対象となる行列変数または行列関数 シンボリック行列変数 | シンボリック行列関数 | シンボリック式 | cell 配列 newM — 新しい値 数値 | シンボリック数 | シンボリック行列変数 | シンボリック行列関数 | シンボリック式 | シンボリック配列 | cell 配列 ヒント バージョン履歴 R2023b: シンボリック行列変数へのワークスペースの値の代入 R2022b: シンボリック方程式またはシンボリック条件におけるシンボリック行列変数およびシンボリック行列関数の代入 R2022a: シンボリック行列関数での変数の代入 R2021b: シンボリック式でのシンボリック行列変数の代入 参考 関数 トピック MATLAB コマンド Americas Europe Asia Pacific References

シンボリック代入

ページ内をすべて折りたたむ

構文

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) は、現れるすべての 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 と同じサイズでなければなりません。 (R2021b 以降)

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

sMnew = subs(sM) は、sM 内のシンボリック行列変数を MATLAB ワークスペースで割り当てられた値に置き換え、次に sM を評価して sM のコピーを返します。値が代入されていない変数は、変数のままになります。 (R2023b 以降)

すべて折りたたむ

単一置換

ライブ スクリプトを開く

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

syms a bsubs(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 asymvar(x + y,1)
ans =x

したがって、subsxa に置き換えます。

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

新しい値による式の評価

ライブ スクリプトを開く

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

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

syms xy = x^2;

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

x = 2;y
y =x2

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

subs(y)
ans =4

複数置換

ライブ スクリプトを開く

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

syms a bsubs(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 tsubs(exp(a*t) + 1, a, -magic(3))

ベクトル、行列または非スカラー値の配列の要素を置き換えることもできます。たとえば、これらの 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 zS = 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 ysubs(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 yeqn1 = sin(x)+y == x^2 + y^2;eqn2 = y*x == cos(x);

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

eqn2 = isolate(eqn2,y)
eqn2 =

y=cos(x)x

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

eqn1 = subs(eqn1,lhs(eqn2),rhs(eqn2))
eqn1 =

sin(x)+cos(x)x=cos(x)2x2+x2

関数での置換

ライブ スクリプトを開く

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

syms x y asyms 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 yf(x,y) = x + y;f(a,y) = subs(f,x,a);f
f(a, y) =a+y

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

ライブ スクリプトを開く

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

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

(-2222)

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

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

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

Σ1whereΣ1=(-2222-2)

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

Ssym = symmatrix2sym(S)
Ssym =

(-2222-2)

行列の特性多項式

R2021b 以降

ライブ スクリプトを開く

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

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

(142412223)

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

c = charpoly(A)
c =(1-5-1721)

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

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

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

Y = subs(p,A)
Y =

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

Z = symmatrix2sym(Y)
Z =

(000000000)

シンボリック行列関数での変数の代入

R2022a 以降

ライブ スクリプトを開く

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

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

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

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

syms B C 2 matrixsyms 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)

シンボリック行列変数およびシンボリック行列関数の方程式への代入

R2022b 以降

ライブ スクリプトを開く

方程式 XT X f(X,A)=2 A を定義します。ここで、A は 3 行 3 列の行列、X は 3 行 1 列の行列です。f(X,A) に、別のシンボリック式、およびシンボリック値をもつ A を代入します。この方程式がこれらの値について真となるかどうかをチェックします。

2 つのシンボリック行列変数 A および X を作成します。AX の既存の定義をワークスペースに保持したまま、シンボリック行列関数 f(X,A) を作成します。方程式を作成します。

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

XTXf(X,A)=2A

f(X,A)XTAX を代入し、この式の方程式に含まれる 2 次微分関数を評価します。

eq = subs(eq,f,X.'*A*X)
eq(X, A) =AT+A=2A

A に次数 3 のヒルベルト行列を代入します。

eq = subs(eq,A,hilb(3))
eq(X, A) =

Σ1+Σ1T=2Σ1whereΣ1=(11213121314131415)

isAlways を使用して、この方程式がこれらの値について真となるかどうかをチェックします。isAlwayssymfun 型または sym 型のシンボリック入力のみを受け入れるため、isAlways を使用する前に eqsymfunmatrix 型から symfun 型に変換します。

tf = isAlways(symfunmatrix2symfun(eq))
tf = 3x3 logical array 1 1 1 1 1 1 1 1 1

シンボリック行列変数を含む式の評価

R2023b 以降

ライブ スクリプトを開く

XY2-YX2 を定義します。ここで、XY は 3 行 3 列の行列です。行列をシンボリック行列変数として作成します。

syms X Y [3 3] matrixC = X*Y^2 - Y*X^2
C =XY2-YX2

行列 XY に値を代入します。

X = [-1 2 pi; 0 1/2 2; 2 1 0];Y = [3 2 2; -1 2 1; 1 2 -1];

subs を使用して、XY の値が代入された式 C を評価します。

Cnew = subs(C)
Cnew =

-Σ1Σ22+Σ2Σ12whereΣ1=(322-12112-1)Σ2=(-12π0122210)

結果を 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 を含むシンボリック代入を実行します。

    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])
    R2022b より前では、コードは次の出力を返します。
    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 より前に導入

すべて展開する

構文 subs(sM) を使用すると、sM 内のシンボリック行列変数およびシンボリック行列関数に MATLAB ワークスペースで割り当てられた値を代入してから sM を評価できます。値が代入されていない変数は、変数のままになります。例については、シンボリック行列変数を含む式の評価を参照してください。

関数 subs は、最初の入力引数として、symmatrix 型または symfunmatrix 型のシンボリック方程式またはシンボリック条件を受け入れます。例については、シンボリック行列変数およびシンボリック行列関数の方程式への代入を参照してください。

関数 subs は、最初の入力引数として、symfunmatrix 型のシンボリック行列関数を受け入れます。例については、シンボリック行列関数での変数の代入を参照してください。

参考

関数

  • double | lhs | rhs | simplify | subexpr | vpa

トピック

  • シンボリック式への代入
  • シンボリック式の変数の置き換え
  • シンボリック行列の要素の置き換え
  • スカラーを行列で置き換える
  • subs を使用したシンボリック式の求解

MATLAB コマンド

次の MATLAB コマンドに対応するリンクがクリックされました。

 

コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。

£入 - MATLAB subs MathWorks 日本 (1)

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)

Asia Pacific

Contact your local office

?入 - MATLAB subs MathWorks 日本 (2024)

References

Top Articles
Latest Posts
Article information

Author: Terence Hammes MD

Last Updated:

Views: 5875

Rating: 4.9 / 5 (69 voted)

Reviews: 84% of readers found this page helpful

Author information

Name: Terence Hammes MD

Birthday: 1992-04-11

Address: Suite 408 9446 Mercy Mews, West Roxie, CT 04904

Phone: +50312511349175

Job: Product Consulting Liaison

Hobby: Jogging, Motor sports, Nordic skating, Jigsaw puzzles, Bird watching, Nordic skating, Sculpting

Introduction: My name is Terence Hammes MD, I am a inexpensive, energetic, jolly, faithful, cheerful, proud, rich person who loves writing and wants to share my knowledge and understanding with you.