Je suis un debutant en macro VBA. Tout d'abord, je vous remercie de temps que vous aurez à me consacrer .
Je souhaite faire une macro pour un projet à rendre. Cette macro a pour objectif de resoudre par la methode de newthon raphson une equation de degre 4.
J'ai fait la macro (ci joint) par contre il y a une erreur d'execution '6' .
Je vous mets en copie joint l'idee gloable avec la macro (New_Raph) faite aini que l'algorithm (Feuille 1 )
Pour adapter ce genre de méthode Oulala!!!!!!!! dérivée +extrapolation de tangente j'arrête de dire "des Gros mots" pour les non matheux Taylor est aussi impliqué !! le pauvre
Mon avis : ce n'est pas ici que l'on pourra résoudre ton Pb , SAUF si tu passes par une méthode pédagogique nettement plus adaptée dans le langage de tous les VBiste ou EXCEListe de ce forum
Bsr
EH Oui , erreur de débutant d'Excel et de VBA car :
Pour adapter ce genre de méthode Oulala!!!!!!!! dérivée +extrapolation de tangente j'arrête de dire "des Gros mots" pour les non matheux Taylor est aussi impliqué !! le pauvre
Mon avis : ce n'est pas ici que l'on pourra résoudre ton Pb , SAUF si tu passes par une méthode pédagogique nettement plus adaptée dans le langage de tous les VBiste ou EXCEListe de ce forum
dessole peut être que je n'ai pas assez clair dans mes explications qui n'est pas mon point fort ??
Mon problème est que comment faire une une boucle sous condition en VBA.
Avec mon programme fait, j'ai l'impression le calcul ne se fait pas. je rencontre une erreur de type 6 dont je cherche la solution.
Merci pour votre aide et je suis ouvert a vos questions pour votre bonne compréhension.
Premiere passe dans ton code : Le module d'Young est supérieur à la capcité de VBa ==> c'est ce qui bloque (erreur 6)
C'est la seule chose qui semble bloquer ton code (testé avec E = 210)
D'un point de vue mécanicien, je te dirai de travailler dans un système d'unités adéquate, le mmts (millimetre, tonne, seconde).
Ce qui donne :
- E = 210 MPa
- g = 9810 mm/s² (g minuscule / attention au module de Coulomb)
Pour avoir tes valeurs paremetrées par l'utilisateur :
Premiere passe dans ton code : Le module d'Young est supérieur à la capcité de VBa ==> c'est ce qui bloque (erreur 6)
C'est la seule chose qui semble bloquer ton code (testé avec E = 210)
D'un point de vue mécanicien, je te dirai de travailler dans un système d'unités adéquate, le mmts (millimetre, tonne, seconde).
Ce qui donne :
- E = 210 MPa
- g = 9810 mm/s² (g minuscule / attention au module de Coulomb)
Pour avoir tes valeurs paremetrées par l'utilisateur :
Tes variables sont toutes en integer. Certaines devraient être en double.
Dans la formule L0=... la variable InertieI n'existe pas et le dénominateur devrait être parenthésé.
Tu peux envisager de mettre ta procédure en fonction :
VB:
Function New_Raph(Myoung As Double, Inertie As Double, fleche As Double, Ml As Double, Mp As Double, Gamma As Double)
Dim tolerance As Double, Espilon As Integer, MaxIterations As Integer
L0 = (384 * Myoung * Inertie * fleche / (Ml * Gamma)) ^ (0.25)
tolerance = 10 ^ (-7): Epsilon = 1: MaxIterations = 100
For I = 1 To MaxIterations
F_L0 = 5 * L0 ^ 4 + 8 * Mp * L0 ^ 3 - (384 * Myoung * Inertie * fleche / (Ml * Gamma))
F_L0prime = 20 * L0 ^ 3 + 24 * Mp * L0 ^ 2
If (Abs(F_L0prime) < Epsilon) Then
Exit For
Else
L1 = L0 - F_L0 / F_L0prime
End If
If (Abs(L1 - L0) <= tolerance * Abs(L1)) Then
Exit For
End If
L0 = L1
Next
New_Raph = L0
End Function
et tu l'appelleras par =New_Raph(C7;C3;C4;C5;C2;C6)
Tes variables sont toutes en integer. Certaines devraient être en double.
Dans la formule L0=... la variable InertieI n'existe pas et le dénominateur devrait être parenthésé.
Tu peux envisager de mettre ta procédure en fonction :
VB:
Function New_Raph(Myoung As Double, Inertie As Double, fleche As Double, Ml As Double, Mp As Double, Gamma As Double)
Dim tolerance As Double, Espilon As Integer, MaxIterations As Integer
L0 = (384 * Myoung * Inertie * fleche / (Ml * Gamma)) ^ (0.25)
tolerance = 10 ^ (-7): Epsilon = 1: MaxIterations = 100
For I = 1 To MaxIterations
F_L0 = 5 * L0 ^ 4 + 8 * Mp * L0 ^ 3 - (384 * Myoung * Inertie * fleche / (Ml * Gamma))
F_L0prime = 20 * L0 ^ 3 + 24 * Mp * L0 ^ 2
If (Abs(F_L0prime) < Epsilon) Then
Exit For
Else
L1 = L0 - F_L0 / F_L0prime
End If
If (Abs(L1 - L0) <= tolerance * Abs(L1)) Then
Exit For
End If
L0 = L1
Next
New_Raph = L0
End Function
et tu l'appelleras par =New_Raph(C7;C3;C4;C5;C2;C6)
On peut aussi se passer de la méthode de Newton pour résoudre une équation quartique. Grâce au tableur, on peut faire un calcul direct selon une méthode connue depuis quatre siècles...
Bonne journée.
ℝOGER2327 #8380
Dimanche 1[SUP]er[/SUP] As 144 (Nativité de Pantagruel - fête Suprême Tierce) 13 Brumaire An CCXXV, 0,6083h - topinambour
2016-W44-4T01:27:36Z
On peut aussi se passer de la méthode de Newton pour résoudre une équation quartique. Grâce au tableur, on peut faire un calcul direct selon une méthode connue depuis quatre siècles...
Bonne journée.
ℝOGER2327 #8380
Dimanche 1[SUP]er[/SUP] As 144 (Nativité de Pantagruel - fête Suprême Tierce) 13 Brumaire An CCXXV, 0,6083h - topinambour
2016-W44-4T01:27:36Z