1 pièce(s) jointe(s)
Besoin d'aide programmation méthode numérique bissection VB
Bonjour,
j'essaie de programmer la méthode bissection pour trouver les racines d'un fonction non linéaire f(x) sur un intervalle entre 0 et 1.
Pouvez m'aider? voilà ce que j'ai fais mais ca me retourne 0 comme valeur. Je crois que le problème se situe à la façon d'écrire les fonctions dans la boucle?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| Option Explicit On
Option Strict On
Option Infer On
Option Compare Binary
Module Module2
Dim xm As Double
Dim fx1 As Double
Dim fx2 As Double
Dim fxm As Double
Dim compteur As Double
Public r As Double ' Le résultat ( la valeur de x pour f(x)=0 )
Dim e As Double ' L'erreur relative
Sub Methode_bisection(ByVal x1 As Double, ByVal x2 As Double, ByVal n As Double)
e = ((x2 - x1) / (2 ^ n))
compteur = 0
Do While (Math.Abs(x2 - x1)) / (2 * (Math.Abs(xm))) < e
fx1 = 0.15 * (3.7 * (x1 ^ -0.5) / (2)) - (3.4) - (1.2 * (x1 ^ 3))
fx2 = 0.15 * (3.7 * (x2 ^ -0.5) / (2)) - (3.4) - (1.2 * (x2 ^ 3))
fxm = 0.15 * (3.7 * xm ^ -0.5) / (2) - (3.4) - (1.2 * (xm ^ 3))
xm = (x1 + x2) / 2
If fx1 * fx2 < 0 Then
x2 = xm
Else
If fxm * fx2 < 0 Then
x1 = xm
End
End If
compteur = compteur + 1
If compteur > n Then
MsgBox("Divergence")
Exit Sub
End If
End If
Loop
r = xm ' r; le résultat devrait être proche de x= 0,2909815
End Sub
End Module |
Pièce jointe 189002