Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

children

シンボリック式の部分式または項

R2020b から、構文 subexpr = children(expr) は、スカラー入力 expr に対し、ベクトルの代わりに "入れ子でない cell 配列" として subexpr を返します。subexpr = children(expr,ind) を使用して、返された部分式の cell 配列にインデックスを付けることができます。詳細は、互換性についての考慮事項を参照してください。

説明

subexpr = children(expr) は、シンボリック式 expr の子部分式を含む、入れ子でない cell 配列を返します。たとえば、和の子部分式は項です。

subexpr = children(A) は、シンボリック行列 A の各式の子部分式を含む、入れ子の cell 配列を返します。

subexpr = children(___,ind) は、シンボリック式 expr またはシンボリック行列 A の子部分式を、ind によってインデックス付けされた cell 配列として返します。

すべて折りたたむ

シンボリック式 x2+xy+y2 の子部分式を検出します。部分式は、入れ子でない cell 配列で返されます。children は、部分式を返すときに内部の並べ替え規則を使用します。subexpr{i} を使用して、cell 配列の各要素にインデックスを付けることができます。ここで、i はセルのインデックスです。和の子部分式は項です。

syms x y
subexpr = children(x^2 + x*y + y^2)
subexpr=1×3 cell array
    {[x*y]}    {[x^2]}    {[y^2]}

s1 = subexpr{1}
s1 = xy
s2 = subexpr{2}
s2 = x2
s3 = subexpr{3}
s3 = y2

関数 children でインデックス ind を指定して、部分式の各要素にインデックスを付けることもできます。

s1 = children(x^2 + x*y + y^2,1)
s1 = xy
s2 = children(x^2 + x*y + y^2,2)
s2 = x2
s3 = children(x^2 + x*y + y^2,3)
s3 = y2

部分式の cell 配列をベクトルに変換するには、コマンド [subexpr{:}] を使用できます。

V = [subexpr{:}]
V = (xyx2y2)

方程式 x2+xy=y2+1 の子部分式を検出します。方程式の子部分式は、1 行 2 列の cell 配列で返されます。cell 配列のすべての要素にインデックスを付けます。方程式の部分式は、方程式の左辺と右辺です。

syms x y
subexpr = children(x^2 + x*y == y^2 + 1)
subexpr=1×2 cell array
    {[x^2 + y*x]}    {[y^2 + 1]}

subexpr{:}
ans = x2+yx
ans = y2+1

次に、不等式 sin(x)<cos(x) の子部分式を検出します。返された cell 配列のすべての要素にインデックスを付けます。不等式の子部分式は、不等式の左辺と右辺です。

subexpr = children(sin(x) < cos(x))
subexpr=1×2 cell array
    {[sin(x)]}    {[cos(x)]}

subexpr{:}
ans = sin(x)
ans = cos(x)

積分 abf(x)dx の子部分式を検出します。子部分式は、シンボリック式の cell 配列として返されます。

syms f(x) a b
subexpr = children(int(f(x),a,b))
subexpr=1×4 cell array
    {[f(x)]}    {[x]}    {[a]}    {[b]}

V = [subexpr{:}]
V = (f(x)xab)

関数 cos(x)x=2 付近のテイラー近似を求めます。

syms x
t = taylor(cos(x),x,2)
t = 

cos(2)+sin(2)x-236-sin(2)x-25120-sin(2)x-2-cos(2)x-222+cos(2)x-2424

このテイラー展開は、+ または の符号で区切られる 6 つの項を持ちます。

関数 cos(x) をプロットします。children を使用して式の項を取り出します。含まれる項が増えるに従ってテイラー展開が関数をより正確に近似することを示します。

fplot(cos(x),[0 4])
hold on
s = 0;
for i = 1:6
    s = s + children(t,i);
    fplot(s,[0 4],'--')
end
legend({'cos(x)','1 term','2 terms','3 terms','4 terms','5 terms','6 terms'})

Figure contains an axes object. The axes object contains 7 objects of type functionline. These objects represent cos(x), 1 term, 2 terms, 3 terms, 4 terms, 5 terms, 6 terms.

関数 children を呼び出して、次のシンボリック行列入力の子部分式を検出します。結果は、行列の各要素の子部分式を含む、22 列の入れ子の cell 配列となります。

syms x y
symM = [x + y, sin(x)*cos(y); x^3 - y^3, exp(x*y^2) + 3]
symM = 

(x+ycos(y)sin(x)x3-y3exy2+3)

s = children(symM)
s=2×2 cell array
    {1x2 cell}    {1x2 cell}
    {1x2 cell}    {1x2 cell}

入れ子の cell 配列 s の要素に対し、入れ子を解除またはアクセスするには、中かっこを使用します。たとえば、s{1,1}-要素は 12 列のシンボリック式の cell 配列です。

s11 = s{1,1}
s11=1×2 cell array
    {[x]}    {[y]}

中かっこを使用して、s の各要素の入れ子を解除します。大かっこを使用して、入れ子でない cell 配列をベクトルに変換します。

s11vec = [s{1,1}{:}]
s11vec = (xy)
s21vec = [s{2,1}{:}]
s21vec = (x3-y3)
s12vec = [s{1,2}{:}]
s12vec = (cos(y)sin(x))
s22vec = [s{2,2}{:}]
s22vec = (exy23)

入れ子の cell 配列 s の各要素が、入れ子でない同じサイズの cell 配列を含む場合は、入力引数 ind を使用して、入れ子の cell 配列の要素にアクセスすることもできます。インデックス ind により、children はシンボリック行列入力 symM の部分式の各列にアクセスできるようになります。

scol1 = children(symM,1)
scol1=2×2 cell array
    {[x  ]}    {[cos(y)    ]}
    {[x^3]}    {[exp(x*y^2)]}

[scol1{:}].'
ans = 

(xx3cos(y)exy2)

scol2 = children(symM,2)
scol2=2×2 cell array
    {[y   ]}    {[sin(x)]}
    {[-y^3]}    {[3     ]}

[scol2{:}].'
ans = 

(y-y3sin(x)3)

入力引数

すべて折りたたむ

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

入力行列。シンボリック行列として指定します。

返す子部分式のインデックス。正の整数として指定します。

  • children(expr) が子部分式の入れ子でない cell 配列を返す場合、インデックス付きの children(expr,ind) は cell 配列の ind 番目の要素を返します。

  • children(A) が子部分式の入れ子の cell 配列 (各セル要素は同じサイズ) を返す場合、インデックス付きの children(A,ind) は入れ子でない cell 配列の ind 番目の列を返します。

バージョン履歴

R2012a で導入

すべて展開する