Mathematica: FindRoot erreurs
FindRoot[
27215. - 7.27596*10^-12 x + 52300. x^2 - 9977.4 Log[1. - 1. x] == 0
,
{x, 0.000001}
]
converge vers la solution {x -> -0.0918521}
mais comment puis-je obtenir Mathematica pour éviter le message d'erreur suivant avant la solution:
FindRoot::nlnum: The function value {Indeterminate} is not a list of numbers with dimensions {1} at {x} = {1.}. >>
Je suis en utilisant FindRoot pour résoudre certains assez salissante expressions. J'ai aussi parfois l'erreur suivante, bien que Mathematica rendement encore de réponse, mais je me demande si il existe un moyen de l'éviter:
FindRoot::lstol: The line search decreased the step size to within tolerance specified by AccuracyGoal and PrecisionGoal but was unable to find a sufficient decrease in the merit function. You may need more than MachinePrecision digits of working precision to meet these tolerances. >>
Avez-vous essayé un autre point de départ?
Essayez Off[FindRoot::nlnum] 🙂
Ce n'est pas vraiment une solution, est-il? Regarde comme il n'y en a pas un (vrai) solution de l'équation. (Je ne sais pas pourquoi Mathematica vous donne une).
d'accord avec @Jefromi vous êtes l'obtention d'un numéro, mais il n'est pas une solution. Il ne semble pas être une réelle solution. Vous pouvez utiliser l'évaluation de surveiller et de suivre ce qui se passe et je pense que vous trouverez probablement sauvages oscillations jusqu'à ce qu'il crache ce numéro
Essayez Off[FindRoot::nlnum] 🙂
Ce n'est pas vraiment une solution, est-il? Regarde comme il n'y en a pas un (vrai) solution de l'équation. (Je ne sais pas pourquoi Mathematica vous donne une).
d'accord avec @Jefromi vous êtes l'obtention d'un numéro, mais il n'est pas une solution. Il ne semble pas être une réelle solution. Vous pouvez utiliser l'évaluation de surveiller et de suivre ce qui se passe et je pense que vous trouverez probablement sauvages oscillations jusqu'à ce qu'il crache ce numéro
OriginalL'auteur CaptanFunkyFresh | 2012-01-11
Vous devez vous connecter pour publier un commentaire.
La solution que vous obtenez n'est pas la solution réelle. Le message indique que quelque chose clochait et
FindRoot
retourne la dernière valeur dex
. C'est le dernier élément de sous "Plus d'Informations" pourFindRoot
:MaxIterations
étapes, il renvoie le plus récent rapprochement d'une solution qu'il a trouvé. Vous pouvez ensuite appliquer FindRoot à nouveau, avec ce rapprochement comme un point de départ.Par exemple, dans ce cas, il n'est également pas de solution:
Vous obtiendrez un
FindRoot::jsing
avertissement et Mathematica retourne{x -> 0.}
(qui est le plus récent rapprochement).Un cas similaire, mais avec un
Log
fonction:Donne un
FindRoot::nlnum
similaire à ce que vous voyez et retourne{x -> 0.000269448}
(qui est le plus récent rapprochement dans ce cas).C'est un complot de la même fonction, à des fins d'illustration:
Si vous souhaitez inclure des racines complexes, considérer cette partie de la documentation de
FindRoot
(sous "Plus d'Informations" aussi):Ainsi, par exemple, vous pouvez prendre une valeur de départ à proximité d'un complexe racine, comme suit:
Qui converge (sans les messages) pour
{x -> 8.46358*10^-23 + 1. I}
(donc en grosI
).Ou avec une valeur de départ près de l'autre complexe racine:
Vous obtenez fondamentalement
-I
(pour être précis, vous obtenez{x -> 8.46358*10^-23 - 1. I}
).OriginalL'auteur Arnoud Buzing
Il n'y a pas une véritable solution à cette équation. Mathematica finit par arriver quelque part près du minimum de la fonction, et des rapports de cette parce que c'est là que l'algorithme converge.
Mathematica ne vous avertir à ce sujet:
En fait, il ne imprimer une mise en garde - je juste n'ai pas copier sur, désolé.
OriginalL'auteur Verbeia