Ca bug

cs_alejandro20 Messages postés 3 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 10 avril 2008 - 10 avril 2008 à 12:15
cs_alejandro20 Messages postés 3 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 10 avril 2008 - 10 avril 2008 à 17:53
bonjour,
voila j'essaye de creer une interface pour calculer le zero par dichotomie d'une fonction ln ou exp
le probleme c que je cherche a verifier f(a)*f(b)<0 qlq soit a et b
en gros je cherche une fonctionn aleatoire qui pourrait me donner des entiers négatifs et positifs a et b :
et en plus a la fin j'obtiens un encadrement avec mes valeurs initialisées c et d (1 et 4)
je suis debutante soyez indulgent
merci d'avance
je suis en galere, ca marche pas
Public Class calculzero

Dim c, d As Decimal

Dim epsilon As Decimal
Dim a, b, x, m As Decimal

Private Sub cmdcalculzero_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcalculzero.Click
a = Val(projet1.txta.Text)
b = Val(projet1.txtb.Text)

epsilon = Val(txtepsilon.Text)

Dim f_m, f_d As Double
Dim f_c As Double
c = 1
d = 4
If projet1.optln.Checked = True Then
f_c = (a * Math.Log(c) + b)
f_d = (a * Math.Log(d) + b)
f_m = (a * Math.Log(m) + b)
ElseIf projet1.optexp.Checked = True Then

f_c = (a * Math.Exp(c) + b)
f_m = (a * Math.Exp(m) + b)
f_d = (a * Math.Exp(d) + b)
End If
Do While f_c * f_d > 0

Randomize()
c = CInt(Int((50 * Rnd()) + 1))
d = CInt(Int((-50 * Rnd()) + 1))
Loop

Do While (c - d) > 2 * epsilon
m = (c + d) / 2
If projet1.optln.Checked = True Then
f_m = (a * Math.Log(m) + b)
ElseIf projet1.optexp.Checked = True Then
f_m = (a * Math.Exp(m) + b)
End If


If f_c * f_m > 0 Then
c = m
Else
d = m
End If
Loop



If c < d Then
txtresultatzero.Text = c & " < k < " & d
Else
txtresultatzero.Text = d & " < k < " & c
End If
End Sub

Private Sub cmdquittercalculzero_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdquittercalculzero.Click
Me.Close()
End Sub
End Class

3 réponses

oommeeggaa3d Messages postés 97 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 3 septembre 2010
10 avril 2008 à 13:19
tu pourrais commenter un peu ton code ?

ah au fait, le dichotomie pour trouver le zero d'une fonction Exponentielle, à mon avis, c'est pas gagné :-)
0
cs_alejandro20 Messages postés 3 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 10 avril 2008
10 avril 2008 à 17:52
oui pas faux pour exp!!!!!!
je c pas ou ca bug
merci d'avance !!
Public Class calculzero
    Dim i As Integer
    Dim c, d As Decimal
    Dim MilieuInterval As Decimal
    Dim epsilon As Decimal
    Dim a, b, x, m As Decimal

    Private Sub cmdcalculzero_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcalculzero.Click
        a = Val(projet1.txta.Text)
        b = Val(projet1.txtb.Text)
       
        epsilon = Val(txtepsilon.Text)
        a = Val(projet1.txta.Text) ' lecture des valeurs entrées par l'utilisateur dans une autre feuille projet1'
        b = Val(projet1.txtb.Text)

        epsilon = Val(txtepsilon.Text)

        Dim f_m, f_d As Double
        Dim f_c As Double
        'Je sais pas si il faut initialiser c et d et m pour que ca marche'

        f_c = (a * Math.Log(c) + b)
        f_d = (a * Math.Log(d) + b)
        f_m = (a * Math.Log(m) + b)

        Do While f_c * f_d > 0 ' il faut trouver deux nombres c et d tel que f_c*f_d<0 car comme ln est continue entre les deux il y aura le zero"
            Dim changement_signe As Integer
            Randomize()
            changement_signe = Rnd() * (-1) + 1 'on aura 0 ou 1 au hasard
            If changement_signe = 0 Then
                c = CInt(Int((100 * Rnd() + 1)))
                d = CInt(Int((100 * Rnd() + 1)))
            Else : c = CInt(Int((100 * Rnd() + 1))) * (-1)
                d = CInt(Int((100 * Rnd() + 1))) * (-1)
            End If

        Loop
        f_c = (a * Math.Log(c) + b)
        f_d = (a * Math.Log(d) + b)

        Do While (c - d) > 2 * epsilon ' precision de l'encadrement'
            m = (c + d) / 2 ' determination du milieu de l'intervalle [c,d] pour un encadrement plus precis'

            f_m = (a * Math.Log(m) + b)

            If f_c * f_m > 0 Then
                c = m
            Else
                d = m
            End If
        Loop

        If c < d Then
            txtresultatzero.Text = c & " < k < " & d ' affichage de l'encadrement trouvé'
        Else
            txtresultatzero.Text = d & " < k < " & c
        End If
    End Sub

    Private Sub cmdquittercalculzero_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdquittercalculzero.Click
        Me.Close()
    End Sub
End Class
0
cs_alejandro20 Messages postés 3 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 10 avril 2008
10 avril 2008 à 17:53
oui pas faux pour exp!!!!!!
je c pas ou ca bug
merci d'avance !!
Public Class calculzero
    Dim epsilon As Decimal
    Dim a, b, x, m As Decimal

    Private Sub cmdcalculzero_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcalculzero.Click
      
        a = Val(projet1.txta.Text) ' lecture des valeurs entrées par l'utilisateur dans une autre feuille projet1'
        b = Val(projet1.txtb.Text)

        epsilon = Val(txtepsilon.Text)

        Dim f_m, f_d As Double
        Dim f_c As Double
        'Je sais pas si il faut initialiser c et d et m pour que ca marche'

        f_c = (a * Math.Log(c) + b)
        f_d = (a * Math.Log(d) + b)
        f_m = (a * Math.Log(m) + b)

        Do While f_c * f_d > 0 ' il faut trouver deux nombres c et d tel que f_c*f_d<0 car comme ln est continue entre les deux il y aura le zero"
            Dim changement_signe As Integer
            Randomize()
            changement_signe = Rnd() * (-1) + 1 'on aura 0 ou 1 au hasard
            If changement_signe = 0 Then
                c = CInt(Int((100 * Rnd() + 1)))
                d = CInt(Int((100 * Rnd() + 1)))
            Else : c = CInt(Int((100 * Rnd() + 1))) * (-1)
                d = CInt(Int((100 * Rnd() + 1))) * (-1)
            End If

        Loop
        f_c = (a * Math.Log(c) + b)
        f_d = (a * Math.Log(d) + b)

        Do While (c - d) > 2 * epsilon ' precision de l'encadrement'
            m = (c + d) / 2 ' determination du milieu de l'intervalle [c,d] pour un encadrement plus precis'

            f_m = (a * Math.Log(m) + b)

            If f_c * f_m > 0 Then
                c = m
            Else
                d = m
            End If
        Loop

        If c < d Then
            txtresultatzero.Text = c & " < k < " & d ' affichage de l'encadrement trouvé'
        Else
            txtresultatzero.Text = d & " < k < " & c
        End If
    End Sub

    Private Sub cmdquittercalculzero_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdquittercalculzero.Click
        Me.Close()
    End Sub
End Class
0
Rejoignez-nous