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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager