kobeymane
Messages postés58Date d'inscriptiondimanche 29 janvier 2012StatutMembreDernière intervention29 avril 2012
-
14 févr. 2012 à 14:19
kobeymane
Messages postés58Date d'inscriptiondimanche 29 janvier 2012StatutMembreDernière intervention29 avril 2012
-
16 févr. 2012 à 14:14
Bonjour,
En tant que débutant je veux créer un programme qui calcul l'integrale numérique de sin(x).dx comme première étape puis permettre à l'utilisateur de saisir sa fonction comme il veut.
Le programme contient certainement une faute que je n'arrive pas à la détécter. Il est correcte au niveau de la syntaxe, il s'agit une faute de compilation que je l'ignore.
L'algorithme de ce programme est basé sur le calcul de l'integrale par la méthode des rectangles à point milieu dont le principe est simple:
** Donner les bornes supérieure 'b' et inférieure 'a'.
** Décomposer l'intervale [a,b] en des petits éléments de surface 'dx', ici c'est h (voir programme ci dessous).
** Pour chaque élément de surface calculer l'aire compris dans le rectangle de largeur dx et hauteur f(x) par l'expression mathématique de cette méthode.
** Effectuer la somme de ces petites surfaces pour obtenir finalement la surface délimitée par la droite x=a, x=b et la courbe f(x) qui est bien l'integrale de f(x)dx entre a et b.
L'interface de ce programme est simplement composé de deux textbox pour saisir a et b, d'un boutton calculer et un textbox pour y afficher le résultat.
Voici la totalité du programme:
Public Class Form1
Dim a, b As Single
Dim c, d As String
Dim aire As Double
Public Function integrale(ByVal a As Single, ByVal b As Single)
Dim k, n As Integer
Dim h As Double
n = 10000
aire = 0
h = (b - a) / n
For k = a To b Step h
aire = aire + h * (Math.Sin(k + h) + Math.Sin(k)) / 2
Next k
Return aire
End Function
Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged
'saisie de borne inférieure
c = TextBox2.Text
a = Single.Parse(c)
End Sub
Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
'saisie de la borne supérieure
d = TextBox3.Text
b = Single.Parse(d)
End Sub
Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim z As Decimal
integrale(a, b)
z = aire
TextBox4.Text = CStr(z)
End Sub
End Class
Lors de la compilation,en appuyant sur F5, je saisie les bornes et quand je click sur le bouton calculer, le programme se bloque, je n'arrive pas a avoir le résultat et je n'ai qu'à arrêter le débogage.
Ce programme est la base de calcul de certaines formules dans les mathématiques des signaux.
J'ai vraiment besoin de votre aide. MERCI d'avance.
kobeymane
Messages postés58Date d'inscriptiondimanche 29 janvier 2012StatutMembreDernière intervention29 avril 2012 14 févr. 2012 à 23:06
effectivement j'ai trouvé le conflit integer - double j'ai donc changé k en double ainsi que toute autre faute, mais un problème se pose encore:
je calcule à la main l'integrale de 1 à 2 de sin(x).dx ça donne: 0.99945. mais le programme donne -0.45969
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 16 févr. 2012 à 01:24
Bonjour,
Je ne vois personnellement rien à reprocher (après tes corrections de typage des numériques) au code de ta fonction integrale, dans la mesure où il exécute bien les opérations que tu lui demandes d'exécuter.
Sont-elles, par contre, les opérations qui correspondent au traitement algébrique à faire ? ===>> ça, c'est un aspect hors développement (purement algébrique).
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 16 févr. 2012 à 02:03
d'autre part :
- ton programme donne z 0,95654 avec a 1 et b = 2 - si tu as un z négatif, c'est que b est inférieur à a (et que donc tu as saisi "1" en textbox3 et "2" en textbox2)
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Vous n’avez pas trouvé la réponse que vous recherchez ?
kobeymane
Messages postés58Date d'inscriptiondimanche 29 janvier 2012StatutMembreDernière intervention29 avril 2012 16 févr. 2012 à 13:53
Bonjour,
Dans le cas d'une erreur de saisie, j'ai corrigé le problème en permuttant les valeurs de a et b (dans le cas si l'utilisateur se trompait). il suffit juste de mettre:
If a > b Then
h = a
a = b
b = h
End If
If a = b Then
Return aire
Exit Function
End If
en + j'ai rendu toutes les variable en type Double
Mais je remarque que si je lui donne a=1 et b=2 ça me donne 0.45 puis si je fais a=2 et b=1 selon la modification normalement il y aura pas problème, mais je vois que les valeurs ne sont pas identiques, c'est bizzare !!?
kobeymane
Messages postés58Date d'inscriptiondimanche 29 janvier 2012StatutMembreDernière intervention29 avril 2012 16 févr. 2012 à 14:14
le cas ou a=b donc la fonction retourne aire=0 sa valeur d'initialisation.
Malgré cette petite amélioration je n'ai pas les valeurs extactes des intégrales en cas d'erreur ni dans le cas normale et en plus lorsque je fais a=0 le programme se bloque, c'était ça mon problème depuis le début. Merci de m'aider