Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

root

説明

root(p,x) は、x について、シンボリック多項式 p の番号付けされた根の列ベクトルを返します。高次多項式の根をシンボリックに解くと、複雑になったり数学的に不可能だったりする場合があります。この場合、Symbolic Math Toolbox™ では関数 root を使用して多項式の根を表します。

root(p,x,k) は、x について、シンボリック多項式 pk 番目の根を表します。

高次多項式の根の表現

多項式 x3+1 の根を root を使用して表します。関数 root は列ベクトルを返します。このベクトルの要素は、多項式の 3 つの根を表します。

syms x
p = x^3 + 1;
root(p,x)
ans =
 root(x^3 + 1, x, 1)
 root(x^3 + 1, x, 2)
 root(x^3 + 1, x, 3)

root(x^3 + 1, x, 1)p の 1 番目の根を表し、root(x^3 + 1, x, 2) は 2 番目の根を表します。以下同様に続きます。この構文を使用して、高次多項式の根を表します。

高次多項式の根の計算

高次多項式を解く場合、solveroot を使用して根を表します。あるいは、MaxDegree オプションを使用して明示的な解を返したり、vpa を使用して数値結果を返したりもできます。

x^3 + 3*x - 16 の根を求めます。

syms x
p = x^3 + 3*x - 16;
R = solve(p,x)
R =
 root(z^3 + 3*z - 16, z, 1)
 root(z^3 + 3*z - 16, z, 2)
 root(z^3 + 3*z - 16, z, 3)

MaxDegree オプションに多項式の次数を設定して、明示的に根を求めます。4 より大きい次数の多項式は明示的な解をもちません。

Rexplicit = solve(p,x,'MaxDegree',3)
Rexplicit =
                  (65^(1/2) + 8)^(1/3) - 1/(65^(1/2) + 8)^(1/3)
 1/(2*(65^(1/2) + 8)^(1/3)) - (65^(1/2) + 8)^(1/3)/2 -...
 (3^(1/2)*(1/(65^(1/2) + 8)^(1/3) + (65^(1/2) + 8)^(1/3))*1i)/2
 1/(2*(65^(1/2) + 8)^(1/3)) - (65^(1/2) + 8)^(1/3)/2 +...
 (3^(1/2)*(1/(65^(1/2) + 8)^(1/3) + (65^(1/2) + 8)^(1/3))*1i)/2

vpa を使用して R を高精度浮動小数点に変換し、根を数値的に求めます。

Rnumeric = vpa(R)
RRnumeric =
                                        2.1267693318103912337456401562601
 - 1.0633846659051956168728200781301 - 2.5283118563671914055545884653776i
 - 1.0633846659051956168728200781301 + 2.5283118563671914055545884653776i

root の呼び出しにパラメーターが含まれる場合は、subs を使用してパラメーターに数値を代入してから vpa を呼び出します。

シンボリック計算における root の使用

関数 root は、simplifysubsdiff などの Symbolic Math Toolbox 関数の入力として使用できます。

root を含む式を関数 simplify を使用して単純化します。

syms x
r = root(x^6 + x, x, 1);
simplify(sin(r)^2 + cos(r)^2)
ans =
1

subs を使用して root 内のパラメーターに数値を代入します。

syms b
subs(root(x^2 + b*x, x, 1), b, 5)
ans =
root(x^2 + 5*x, x, 1)

vpa を使用して root を数値形式に変換する前に、subs を使用したパラメーターへの代入が必要です。

diff を使用して root を含む式をパラメーターについて微分します。

diff(root(x^2 + b*x, x, 1), b)
ans =
root(b^2*x^2 + b^2*x, x, 1)

多項式の比率の逆ラプラス変換の計算

ilaplace を使用して 2 つの多項式の比率の逆ラプラス変換を求めます。逆ラプラス変換は root に関して返されます。

syms s
G = (s^3 + 1)/(s^6 + s^5 + s^2);
H = ilaplace(G)
H =
t - symsum(exp(t*root(s3^4 + s3^3 + 1, s3, k))/...
(4*root(s3^4 + s3^3 + 1, s3, k) + 3), k, 1, 4)

関数 root が出力で得られる場合、この後のシンボリック計算で関数 root を入力として使用できます。しかし、数値結果が求められる場合は、vpa を使用して、関数 root を高精度の数値結果に変換します。

vpa を使用して逆ラプラス変換を数値形式に変換します。

H_vpa = simplify(vpa(H))
H_vpa =
t +...
0.30881178580997278695808136329347*exp(-1.0189127943851558447865795886366*t)*...
                                   cos(0.60256541999859902604398442197193*t) -...
0.30881178580997278695808136329347*exp(0.5189127943851558447865795886366*t)*...
                                   cos(0.666609844932018579153758800733*t) -...
0.6919689479355443779463355813596*exp(-1.0189127943851558447865795886366*t)*...
                                   sin(0.60256541999859902604398442197193*t) -...
0.16223098826244593894459034019473*exp(0.5189127943851558447865795886366*t)*...
                                   sin(0.666609844932018579153758800733*t)

入力引数

すべて折りたたむ

シンボリック多項式。シンボリック式として指定します。

変数。シンボリック変数として指定します。

多項式の根の番号。数値、ベクトル、行列、多次元配列、あるいはシンボリック数、ベクトル、行列、関数または多次元配列として指定します。k が非スカラーの場合、rootk の要素単位で動作します。

例: root(f,x,3) は、f の 3 番目の根を表します。

ヒント

  • vpa を使用して可変精度のシンボリック数を返すことにより、関数 root を含むシンボリック式を数値的に近似することができます。R2023a 以降では、matlabFunction を使用することで、式を Symbolic Math Toolbox なしで使用できる MATLAB® 関数に変換できます。生成されたファイルは、数値 double データ型で演算を行う関数 roots を使用します。

バージョン履歴

R2015b で導入

参考

| |