Je suis en train d'écrire une application de calculatrice. J'essaie d'écrire un estimateur dérivé. La formule ci-dessous est un moyen simple de le faire. Normalement, sur le papier, vous utiliseriez le plus petit h possible pour obtenir l'estimation la plus précise possible. Le problème est que les doubles ne peuvent pas gérer l'ajout de nombres vraiment petits à des nombres comparativement énormes. Tels que 4 + 1E-200 se traduira juste en 4.0. Même si h était juste 1E-16, 4 + 1E16 vous donnera la bonne valeur mais en maths, c'est inexact car tout ce qui se passe après la 16ème place est perdu et l'arrondi ne peut pas se faire correctement. J'ai entendu la règle générale pour les doubles est 1E-8 ou 1E-7. Le problème avec ceci est que les grands nombres ne fonctionneront pas comme 2E231 + 1E-8 sera juste 2E23, le 1E-8 sera perdu en raison des problèmes de taille.Java estimer une dérivée à un point
f'(x)=(f(x+h)-f(x))/h as x approaches 0
Lorsque je test f (x) = x^2 au point 4 si f '(4), il doit être exactement 8 Je comprends maintenant que je vais probablement jamais obtenir exactement 8. mais Je le plus précis semble être autour de 1E-7 ou 1E8 la chose drôle est 1E-9 tous les à 1E-11 donnent la même réponse. Voici une liste des h de et les résultats pour f(x)=x^2 at x=4
1E-7 8.000000129015916
1E-8 7.999999951380232
1E-9 8.000000661922968
1E-10 8.000000661922968
1E-11 8.000000661922968
1E-12 8.000711204658728
Voici mes questions:
- Quelle est la meilleure façon de choisir h, de toute évidence faire sens 1E-8 ou 1E-7, mais comment Puis-je choisir un h basé sur x, de sorte qu'il fonctionnera avec n'importe quel nombre de taille même si x est 3.14E203 ou 2E-231.
- Combien de décimales de précision devrais-je prendre en compte? Avez-vous une idée de la façon dont Texas Instruments le fait, la TI 83, 84, et Inspire peuvent numériquement comprendre des dérivées à 12 décimales ou précision et presque toujours avoir raison, mais la précision maximale de leurs nombres est de 12 chiffres de toute façon ces calculateurs ne sont pas CAS, donc ils ne dérivent pas réellement
- Logiquement, il y a un nombre entre 1E-7 et 1E-8 qui me donnera un résultat plus précis, y a-t-il un moyen de trouver ce nombre, ou à au moins s'approcher de lui.
RÉPONDU
Merci beaucoup BobG. L'application est actuellement prévue pour être sous 2 formes, une application PC en ligne de commande. Et une application Android. Vous serez mentionné dans les remerciements spéciaux à des parties de la page À propos de. Si vous souhaitez que ce soit open source, je ne publie pas de liens vers le site du projet tant que je n'ai pas trouvé de très gros bugs. En ce moment je l'ai appelé Mathulator, mais le nom changera probablement parce qu'il y a déjà un copyright dessus et cela semble stupide. Je n'ai aucune idée quand le candidat de release courra, au moment où je n'ai aucune idée quand il sera stable. Mais ce sera très puissant si je peux mettre en œuvre tout ce que je veux aussi. Merci encore. Bonne programmation.
Je reçois une décimale plus acurate avec la moyenne de 1E-7 et 1E-8. Ce qui sort pour être 5.4999999999999996E-8, obtenant un résultat de 8.000000080569821 –
Voir aussi [Numerical Differentiation] (http://en.wikipedia.org/wiki/Numerical_differentiation). – trashgod