Mathematica:FindRootエラー
-
27-10-2019 - |
質問
ソリューション{x -> -0.0918521}
に収束しますが、ソリューションの前に次のエラーメッセージを回避するようにMathematicaを取得するにはどうすればよいですか?
ジェネラコディセタグプレ
FindRootを使用して、かなり厄介な式を解決しています。Mathematicaはまだ答えを出しますが、私は時々次のエラーを受け取ることがありますが、それを回避する方法もあるかどうか疑問に思っています: ジェネラコディセタグプレ
解決
得られている解決策は実際の解決策ではありません。メッセージは何かが間違っていたことを示し、FindRoot
はx
の最後の値を返します。これは、FindRoot
の「詳細情報」の下の最後の項目です:
- FindRootが、
MaxIterations
ステップ内で指定した精度の解を見つけることに成功しなかった場合、見つかった解の最新の近似値を返します。次に、この近似を開始点として、FindRootを再度適用できます。たとえば、この場合、解決策もありません: ジェネラコディセタグプレ
FindRoot::jsing
の警告が表示され、 Mathematica は{x -> 0.}
(最新の概算)を返します。このような同様のケースですが、
Log
関数があります: ジェネラコディセタグプレ表示されているものと同様の
FindRoot::nlnum
を提供し、{x -> 0.000269448}
(この場合は最新の近似値)を返します。これは、説明のための同じ関数のプロットです:
複素根を含める場合は、
FindRoot
のドキュメントのこの部分を検討してください([詳細情報]も参照):- 開始値に0.Iを追加することで、いつでもFindRootに複素根を検索するように指示できます。
たとえば、次のように、1つの複素根の近くで開始値を取ることができます。 ジェネラコディセタグプレ
これは(メッセージなしで)
{x -> 8.46358*10^-23 + 1. I}
(つまり基本的にI
)に収束します。または他の複素根の近くの開始値: ジェネラコディセタグプレ
基本的に
-I
を取得します(正確には、{x -> 8.46358*10^-23 - 1. I}
を取得します)。
- 開始値に0.Iを追加することで、いつでもFindRootに複素根を検索するように指示できます。
他のヒント
この方程式の実際の解決策はありません。Mathematicaは最終的に関数の最小値に近づき、アルゴリズムが収束する場所であるため、これを報告します。 ジェネラコディセタグプレ
Mathematicaはこれについて警告します: ジェネラコディセタグプレ