2010-11-03 3 views
0

Je veux implémenter une fonction dans java qui trouve les points nuls de la fonction sinus. Je sais comment faire cela mais je ne comprends pas vraiment la définition suivante de ce problème:Trouver des points nuls de la fonction sinusale

Implémentez une fonction qui recherche des points nuls dans la fonction sinus dans un intervalle entre a et b. L'intervalle de recherche [limite inférieure, limite supérieure] doit être réduit de moitié jusqu'à ce que la limite inférieure et la limite supérieure soient à moins de 0,0001 l'une de l'autre.

alt text

Pourquoi réduire de moitié l'intervalle? Des idées?

+0

l'intersection avec x ligne de péché? –

+0

devoirs? exigence de base d'un projet SW? Si vous avez des devoirs, ajoutez l'étiquette 'devoirs '. –

+4

@ org.life.java - Trouver les racines est ce qu'il cherche. "null points" est le résultat d'une traduction mot à mot du terme allemand "Nullstelle" (anglais: root). –

Répondre

5

Il semble que l'on vous demande d'implémenter un binary search et vous avez probablement besoin de |b-a| < pi pour qu'il y ait une racine unique dans l'intervalle. Btw ceux-ci sont appelés "sinus" et "root" (ou "zéro") en anglais. L'idée est que la fonction (sinus) évaluée aux extrémités de votre intervalle donnera une réponse positive et une réponse négative (si les deux sont positifs ou les deux sont négatifs, alors elle échoue). Comme le sinus est continu, il doit y avoir un point de valeur zéro entre les deux (théorème de valeur intermédiaire). Vérifiez le milieu de votre intervalle. Si c'est positif, réduisez-vous de votre intervalle à l'intervalle entre l'extrémité négative et le milieu. Sinon, réduisez-vous à l'autre moitié. Répétez ceci jusqu'à ce que vous soyez dans la proximité souhaitée du zéro.

+0

que voulez-vous dire par b/w? qu'est-ce que w? –

+0

désolé, cela signifiait "entre" – Jonathan

1

Astuce: vous pouvez vous attendre au moins une racine dans l'intervalle si

(A) sgn(f(lower_limit) != sgn(f(upper_limit)) 

Si cette condition A est vrai: réduire de moitié l'intervalle, IAW:

{[min,max]} -> {[min, (max-min)/2] , ](max-min)/2,max]} 

et vérifier les deux sous intervalles.

juste l'essayer sur le papier (utilisez l'intrigue, réduire de moitié les interfals et essayer de comprendre, quel intervalle est un candidat pour un « conteneur racine »)

0

Sinus est définie par sa fréquence. les passages à zéro se trouvent aux périodes 0,5 et 1 du sinus. c'est-à-dire sin * pi et * 2pi pour la fonction de code sinus ordinaire. Donc, entre A et B, les passages par zéro sont tous les points plus petits que A qui sont égaux à la période == 1 et 0.1, en utilisant le module pour ignorer des valeurs comme 2, 2.5, etc

Questions connexes