begin process at 2008 07 06 02:59:39
1 205 441 membres
21 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : ca bug [ Algorithme / Maths ] (alejandro20)

ca bug le 10/04/2008 12:15:24

alejandro20
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

Re : ca bug le 10/04/2008 13:19:08

oommeeggaa3d
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é :-)

Re : ca bug le 10/04/2008 17:52:05

alejandro20
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

Re : ca bug le 10/04/2008 17:53:22

alejandro20
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


Classé sous : end, bug, exp, if, then

Participer à cet échange

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS