このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
root
多項式の根の表現
説明
例
高次多項式の根の表現
多項式 の根を 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 番目の根を表します。以下同様に続きます。この構文を使用して、高次多項式の根を表します。
高次多項式の根の計算
高次多項式を解く場合、solve
は root
を使用して根を表します。あるいは、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
は、simplify
、subs
、diff
などの 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)
入力引数
ヒント
vpa
を使用して可変精度のシンボリック数を返すことにより、関数root
を含むシンボリック式を数値的に近似することができます。R2023a 以降では、matlabFunction
を使用することで、式を Symbolic Math Toolbox なしで使用できる MATLAB® 関数に変換できます。生成されたファイルは、数値double
データ型で演算を行う関数roots
を使用します。
バージョン履歴
R2015b で導入