Soyez le premier à donner votre avis sur cette source.
Vue 25 840 fois - Téléchargée 1 162 fois
'* ------------------------------------------------------------- '| La procédure magique :D '| '|Cette procédure permet de résoudre le polynôme '|F = 0 de n'importe quel degrès tel que :: '| i '| F = S[ Coef(i) * X ^ i ] = 0 '| 0 '|i = nombre de coefficents , S[] représente la somme '| '|Coef() est le tableau regroupant tous les coefficient du '|polynôme, Coef(0) est la constante '|mini est la borne inférieur de l'intervalle de la recherche '|maxi est la borne supérieur de l'intervalle de la recherche '|Resultat() est le tableau regroupant toutes les racines '| '| [ X(0),Y(0) ] - [ X(1),Y(1) ] représente un bout de segment (D) '|de la courbe (C) '|Pas est la taille de l'intervalle de recherche divisé par 1000 '|dPas est un intervalle de recherche de plus en plus petit '|Epsilon est la longueur minimale de l'intervalle de recherche, c'est donc la précision de l'approximation Dim X(1), Y(1), Pas, dPas, Epsilon, I, min, max As Double Dim K, J As Byte ReDim Resultat(0) min = mini max = maxi '|On définit Epsilon, la précision est donc de 0.00000000001 Epsilon = 10 ^ -10 '|On calcule le Pas de la recherche Pas = (max - min) / 1000 Debut: '|On place le point gauche du segment D sur la borne minimale de recherche '|(Attention min<>mini, sauf au début) X(1) = min '|On définit Y(1) = F(X(1)) For J = 0 To UBound(Coef): Y(1) = Y(1) + Coef(J) * X(1) ^ J: Next '|On scan la courbe sur l'intervalle For I = min To max Step Pas '|On définit dPas comme la moitié de Pas, on a ainsi 2 segment dPas = Pas / 2 For K = 1 To 2 '|On positionne les points du segment D X(0) = X(1) X(1) = X(0) + K * dPas Y(0) = Y(1): Y(1) = 0 '|On calcule la position Y du polynôme au point X(1) For J = 0 To UBound(Coef): Y(1) = Y(1) + Coef(J) * X(1) ^ J: Next '|On calcule l'interserction entre la droite passant par le '|segment D et la droite Y=0 Resultat(n) = IIf((Y(1) / Y(0) - 1) <> 0, X(0) - (X(1) - X(0)) / (Y(1) / Y(0) - 1), mini - 1) '|Si l'intersection se situe dans la zone de recherche dPas '|( en effet X(1)-X(0) = dPas ) If Resultat(n) >= X(0) And Resultat(n) <= X(1) Then '|Si dPas a atteint la valeur minimale de l'intervalle, cad '| si la valeur de Résultat(n) est proche à Epsilon près If dPas <= Epsilon Then '|Le nouveau minimum de recherche se situe à '|la nouvelle racine trouvée min = Resultat(n) '|On agrandit le tableau de recherche de racine n = n + 1 ReDim Preserve Resultat(n) '|On retourne au début et on refait un scan '|mais dans l'intervalle [ Resultat(n),max ] GoTo Debut Else '|dPas n'est pas assez précis, donc on le divise par 2 et '|on recommence car on sait qu'il y'a une racine dans le coin dPas = dPas / 2 X(1) = X(0): Y(1) = Y(0) K = 1 End If End If Next Next End Sub
merci.
elmeiche.noury@caramail.com
c'est un grand travail , mais si tu ésaye de calculer les racinnes avec la méthode de NewtonRavsonne c'est encore mieux.
faite une aperçu à mon source "RÉSOLUTION D'ÉQUATION DE 3 ÉME DEGRÉ AVEC LA MÉTHODE DE NEWTON"
c'est un trés bon travail
elmeiche.noury@caramail.com
je vous remercier monsieur.
A+
Je pense que cette facon de trouver les racines vaut le coup d'etre vu, si j'ai le temps je ferais un benchmark entre les 2 fonctions!
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.