根を求める
関数がゼロになる値をその関数の根と呼びます。
• polyroots(v) - v で与えられた係数を持つ多項式の根を含むベクトルを返します。
デフォルトで、polyroots は、反復的で、複素平面で解を探すラゲール法を使用します。
• root(f(var1, var2, ...), var1, [a, b]) - 関数 f をゼロにする var1 の値を返します。a と b を指定すると、root は区間 [a, b] で var1 を見つけます。それ以外の場合、root を呼び出す前に推定値を使って var1 を定義する必要があります。推定値を使ったときの root は割線法と Mueller 法を使い、区間指定付きのときには root は Ridder 法または Brent 法を使いて求根します。
根の求解の詳細については、このビデオをご覧ください。
引数
• f は、任意の数の変数についてのスカラー値関数です。
• var1 は、f のスカラー変数で、求める根の変数です。複素数の根を求める場合は、複素数の推定値を定義します。
• a, b (オプション) は、f(a) と f(b) の符号が逆になるような実数 (a < b) です。root は a≤x ≤ b の区間で根を求めます。
root 関数をシンボリック評価する場合、範囲引数 [a, b] を指定する必要があります。
• v は、最初の成分に多項式の定数項の係数を含むベクトルで、
2 ≤ length(v) ≤ 99 です。
その他の情報
• リボンで root 関数を挿入すると、「キーワード」ラベルが自動的に割り当てられます。
• root 関数は、未知数が 1 つの一元方程式しか解くことができません。同時に複数の方程式を解くには、
findまたは
minerrを使用します。
• root 関数は TOL に依存していますが、10-5 を超える TOL には応答しません。これは最大収束条件です。また、10-12 より小さい TOL 値では、精度の高い結果を得られることは少なく、アルゴリズムが収束しないことがあります。
• 根が複数あるときは、推定値によって返される根が異なります。推定値が f の最小値または最大値に近いときは、root 関数は収束できないか、推定値から離れた根に収束します。関数を事前にグラフ化することで、適切な推定値や区間を容易に選択できます。
• 変化が速い関数では、結果が実数であると予測される場合でも、根のソルバは小さな虚部を返します。
• f(x) = g(x) という形式の方程式を解くには、x0 := root(f(x) − g(x), x) のような式を使用します。
• 既知の根 r を持つ式 f(x) では、f(x) のその他の根を求めることと、h(x) = f(x) / (x − r). の根を求めることは同じです。このように既知の根で式を割る方法は、近接した 2 つの根を求める場合に便利です。別の推定値を指定して f(x) のほかの根を求めるよりも、ここで定義したような h(x) の根を求める方が簡単なことがよくあります。
• f(x) が根の近くで小さい傾きを持つときは、root(f(x), x) が、実際の根から離れた値 r に収束することがあります。このような場合に、|f(r)|< TOL であっても、r は f(r) = 0 となる点から離れた点になります。精度の高い根を求めるには、TOL の値を小さくするか、root(g(x),x) で根を求めます。この場合、g(x) = [f(x))]/[(d/dx)*f(x)]) です。
• 次の場合、root 関数は収束に失敗したり、予期しない根に収束したりすることがあります。
◦ 式に根が存在していない。
◦ 根と初期推定値が離れ過ぎている。
◦ 推定値と根の間に極大、極小、または不連続点がある。
◦ 推定値が関数 f の最小値または最大値に近い。
◦ 式の根が複素数であるのに、初期推定値に実数を指定している (またはその逆)。
◦ 間隔が接近した複数の根がある (これらの区別を明確にするためには、TOL の値を減らしてみます)。
◦ 関数領域の平坦部に根がある (TOL の値を減らしてみるか、f(x) をその 1 次導関数で分った後の根を求めてみます)。