Bonjour, j'ai un problème dans mon code VBA. Dans cette partie de mon programme,j'essaie d'optimiser une valeur initiale d'un problème C(0,t). Je dispose déja d'une valeur de C(0,t) qui m'a donnée une erreur d'un signe que je ne connais pas et j'aimerais obtenir une autre valeur de C(0,t) qui me donnerait une erreur du signe contraire pour ensuite appliquer une méthode de dichotomie.. J'ai essayé de faire cette algorithme sur VBA seulement, lorsque je lance la macro, excel ne répond plus... J'imagine que je le fais boucler a cause d une erreur dans mon code mais je ne vois pas ou et je n ai aucun message d erreur en compilant...
Mon code ressemble à ceci:
Ma dichotomie est codée de cette facon:
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 ' Check if the error is of the opposite sign ' For the concentrations For i = 1 To n Do Until (ERROR_C(i) / ERROR_C1) < 0 If Abs(ERROR_C(i)) > Abs(ERROR_C(i - 1)) Then C(0, t) = 1.01 * C(0, t) Else: C(0, t) = 0.98 * C(0, t) End If C(1, t) = C(0, t) + deltaz * KM * (Ke * C(0, t) - Cga) / D For z = 2 To NS C(z, t) = deltaz ^ 2 / (D * deltat) * (C(z - 1, t) - C(z - 1, t - 1)) + D / D * (2 * C(z - 1, t) - C(z - 2, t)) Next z ERROR_C(i) = (C(NS, t) - C(NS - 1, t)) / C(NS, t) 'Recalculation of the new error which will be compared to ERROR_C1 Loop Next i
Quelqu un y voit il plus clair que moi et peut il me donner une piste? N hesiter pas a me poser des questions, je n ai surement pas été clair dans mon intitulé...
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 ' Now we are supposed to have LIMIT1/ERROR1 and LIMIT2/ERROR2 for contrations and temperatures so we ' can implement the successive division method. Verify second boundary conditions Line1: C(0, t) = (LIMIT_C1 + LIMIT_C2) / 2 C(1, t) = C(0, t) + deltaz * KM * (Ke * C(0, t) - Cga) / D For z = 2 To NS C(z, t) = deltaz ^ 2 / (D * deltat) * (C(z - 1, t) - C(z - 1, t - 1)) + D / D * (2 * C(z - 1, t) - C(z - 2, t)) Next z ERRORC = (C(NS, t) - C(NS - 1, t)) / C(NS, t) ' Test for the concentrations and new limit If ERRORC > ACCEPTABLE_C Then If ERRORC / ERROR_C1 < 0 Then LIMIT_C2 = C(0, t) ERROR_C2 = ERRORC Else LIMIT_C1 = C(0, t) ERROR_C1 = ERRORC End If GoTo Line1 End If
Merci d'avance
Partager