Saisie de f(x) et son traitment numérique

kobeymane Messages postés 58 Date d'inscription dimanche 29 janvier 2012 Statut Membre Dernière intervention 29 avril 2012 - 5 févr. 2012 à 01:48
kobeymane Messages postés 58 Date d'inscription dimanche 29 janvier 2012 Statut Membre Dernière intervention 29 avril 2012 - 5 févr. 2012 à 15:04
Bonjour,
Je suis un débutant en vb.net. Je veux élaborer un programme qui calcul l'integrale d'une fonction saisie par l'utilisateur (dans le cadre d'un PFE). Le problème c'est au niveau de la saisie de la fonction: L'utilisateur doit taper une fonction f(x) donc de type string, et lors du calcul j'ai besoin de f(x+h) et f(x) en Decimal. La conversion ne se fait pas.
Voici comment mon programme se présente:

Public Class Form1
Private Sub form1_load()
TextBox1.Text = "" 'f(x)
TextBox2.Text = "" 'a
TextBox3.Text = "" 'b
Label4.Text = "" 'resultat
End Sub


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim inf, sup As Integer
Dim a, b, aire As Decimal
Dim fn As String
Dim n As Integer = 1000000
Dim x, h, i, j As Decimal
aire = 0
x = a

'saisie de la fonction
fn = TextBox1.Text
fn = LCase(fn)
If fn = "" Then
MsgBox("vous devez entrer une fonction au clavier")
Exit Sub
End If

'saisie des bornes: entrer des valeurs numériques
If Not (IsNumeric(TextBox2.Text)) Then
MsgBox("entrer une valeur numérique de la borne inférieure")
Exit Sub

End If

If Not (IsNumeric(TextBox3.Text)) Then
MsgBox("entrer une valeur numérique de la borne supérieure")
Exit Sub

End If

'convertir les texts

inf = CType(TextBox2.Text, Integer) 'a
sup = CType(TextBox3.Text, Integer) 'b
If inf > sup Then
h = inf
inf = sup
sup = h
End If

'calcul de l'integral et affichage du résultat
h = (sup - inf) / n
For x = inf To sup
i = CType(fn + h, Integer)
j = CType(fn, Decimal)
aire = aire + h * (i + j) / 2
x = x + h
Next x
Label4.Text = Math.Round(aire, 2).ToString
End Sub
End Class





Est-il un moyen de corriger le problème? Sinon quelle est la solution?
Grand Merci pour vos réponses

5 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
5 févr. 2012 à 08:21
Salut

pas compris comment tu calcules ton intégral
L'utilisateur doit taper une fonction f(x) donc de type string


je tape e^(sin(x)*cos(x))
et après comment ton code fais ?
tu écris
inf = CType(TextBox2.Text, Integer)

que penses tu convertir ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 févr. 2012 à 08:33
Bonjour, ShayW
je pense :
- qu'il y a là carence d'expression et que kobeymane veut parler du calcul d'intégrale d'une fonction dérivable (intégrale de f entre deux bornes).
- que ce calcul implique principalement des connaissances mathématiques
- que, s'agissant (il le dit lui-même) d'une démarche dans le cadre d'un Projet de De Fin d'Etudes, il n'est pas vraiment raisonnable de faire cette démarche à sa place.



____________________
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 févr. 2012 à 08:41
et je pense qu'il serait bien inspiré de se servir de gougoutruc et d'y rechercher à l'aide des mots que j'ai employés :
intégrale d'une fonction dérivable
En se concentrant sur les liens de vulgarisation des mathématiques (par exemple)


____________________
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
0
kobeymane Messages postés 58 Date d'inscription dimanche 29 janvier 2012 Statut Membre Dernière intervention 29 avril 2012
5 févr. 2012 à 14:38
Bonjour ShayW,
Effectivement comme ucfoutu l'a dit; je vise à calculer une integrale d'une fonction dérivable qui va me servir pour traiter des signaux dans mon projet (outils mathématiques: Transformée de Fourier, de LAPLACE, produit de convolution,... que le calcul integrale représente la base). j'ai cherché les différents algorithmes, et j'ai trouvé que la méthode des rectangles à point milieu est la plus facile qui donne une précision suffisante. Donc j'ai essayé en tant que débutant de traduire cet algorithme dans un programme.

Ce programme va permettre ucfoutu de saisir une fonction f(x) pour que le programme calcul son integrale. lors de ce calcul j'ai besoin de f(x+h) (h représente le "dx") et de f(x) 'en type numérique pour effectuer le calcul' bien que l'utilisateur l'a tapé sous forme de chaine de caractère.

Exemple: Vous taper dans la zone de 'f(x)':ln(x)
pendant la partie de calcule j'ai besoin de
f(x+h)=ln(x+h) en type numéique

Lors de la compilation, un message d'erreur m'informe qu'il est impossible de convertir f(x) en type numérique. J'ai déja un programme que j'ai téléchargé sur le site qui calcul l'integrale mais les algorithmes se different en plus je ne veux pas faire de copier coller dans mon projet

Merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kobeymane Messages postés 58 Date d'inscription dimanche 29 janvier 2012 Statut Membre Dernière intervention 29 avril 2012
5 févr. 2012 à 15:04
voici l'algorithme pour mieux comprendre la démarche:


Considérons donc une fonction continue sur un intervalle [a,b].Intégrer signifie calculer l'aire sous la courbe de la fonction entre x = a et x = b.
La première méthode qui vienne à l'esprit, c'est de découper l'aire entre la courbe f(x), l'axe des x et les droites x a et x b, en une multitude de petits rectangles de largeur faible, appelons la h, et de hauteur f(h). L'aire sous la courbe est obtenue en sommant tous ces petits rectangles

et voici l'implémentation:
C Integration par la methode des rectangles (point milieu)

C Dominique Lefebvre janvier 2007

C

C a = borne inferieure d'integration

C b = borne superieure d'integration

C n = nombre de pas (rectangles)

C aire = surface retournee

SUBROUTINE IntRectangles (fn,a,b,n,aire)

REAL a,b,fn,aire

INTEGER n

EXTERNAL fn

REAL x,h

C Initialisation des variables

aire = 0

x = a

h = (b-a)/n

C Boucle de calcul

DO WHILE (x .LT. b)

aire = aire + h*(fn(x+h)+fn(x))/2

x = x+h

ENDDO

END


et voici le lien pour plus d'explication:
Tapez le texte de l'url ici.
0
Rejoignez-nous