2010-12-06 1 views
2

Nous avons donc une fonction comme (pow(e,(-a*x)))/(sqrt(x))a, e sont const flottants. nous avons quelques float eps = pow (10, (- 4)). Nous devons trouver à partir de laquelle x intégrale de cette fonction de ce x à l'infini est inférieur à eps? Nous ne pouvons pas utiliser les fonctions pour la fonction d'intégration par défaut spécial juste standart math comme les opérateurs. le point est d'atteindre la vitesse maximale d'évaluation.Comment savoir d'où (x) l'intégrale d'une fonction (de ce point à l'infini) commence à être inférieure à certains eps?

+0

Yep - ça ressemble à des devoirs de l'école - mais croyez-moi ce n'est pas = ( – Rella

+0

int eps = 10^(- 4) semble un peu étrange ... – Vladimir

+0

Vous semblez être assez égaré. 'Int' variables ne peuvent pas représente les nombres décimaux, et '^' n'est pas exponentiation dans C. Vous ** devez ** utiliser les fonctions de 'math.h' juste pour exponentialiser.' math.h' ne fournit rien à distance près d'une fonction "solve integral" –

Répondre

0

Hmm, personne ne semble comprendre la question. La question est: donné une fonction f, trouver le plus petit x tel que Integral _ x^+ inf f (x) < eps. C'est la question. Donc, fondamentalement, nous essayons x = 0, puis x = 0.1 puis x = 0.2 ... jusqu'à ce que l'intégrale, à toutes fins utiles, s'annule. Par exemple, compte tenu de la courbe en cloche pour le QI des programmeurs sur SO, à quel IQ l'intelligence cumulative des programmeurs ayant un QI plus élevé est-elle infime? Si nous choisissons x = 100, nous savons qu'au moins la moitié des programmeurs auront un QI plus élevé que 100, si nous en sélectionnons 120, combien en reste-t-il? Qu'en est-il de 200? Si nous avons 10 000 programmeurs ici et eps = 1/10000, nous demandons essentiellement ce que QI les meilleurs 0,01% des contributeurs SO ont. La question est: quelle est la manière la plus efficace de trouver ce nombre, étant donné que rien n'est connu de f autre que celui qui diminue assez rapidement pour que l'intégrale de x à l'infini se rapproche de zéro lorsque x approche l'infini?

La réponse générale est: vous devez commencer par une sorte de deviner. Si le résultat est trop important, doublez votre estimation et continuez jusqu'à ce que vous répondiez à l'exigence. Ensuite, revenez à la dernière valeur que vous aviez (qui ne l'a pas fait) et faites une coupure binaire pour trouver le plus petit x satisfaisant l'exigence.

Pour faire une bonne estimation est difficile. Une façon consiste à utiliser une approximation de Chebychev de la fonction, à l'intégrer analytiquement, à résoudre le problème avec le polynôme résultant et à utiliser la solution comme hypothèse de départ. L'hypothèse est que toutes les fonctions ressemblent à des polynômes d'un ordre suffisamment élevé dans une plage donnée.

+0

cela a été répondu assez facilement ci-dessus. Pourquoi ne pensez-vous pas que la réponse de Joséphine était correcte? – Dov

1

Pour calculer cette intégrale, vous devez calculer Error function. Si vous utilisez gcc vous pouvez trouver la fonction erf(...) dans math.h, mais il ne faut pas de paramètres pour obtenir une précision exacte. Mais vous pouvez évaluer la valeur de la fonction Erreur en utilisant simplement la série de Taylor. Avec des eps donnés, il est possible de calculer le nombre exact de termes de la série.

6

Si vous effectuez la substitution u u = sqrt (x), votre intégrale deviendra 2 * intégrale e^(- au^2) du. Avec une substitution de plus, vous pouvez la réduire à une normale standard. Une fois que vous l'avez sous forme normale standard, cela se réduit à calculer erf (x). Les substitutions peuvent être faites abstraitement pour tout a, et les résultats codés en dur pour la simplicité et la rapidité.

Questions connexes