Excel et les maths
Sur cette page :
- Géométrie, algèbre linéaire
- Calculer un produit scalaire
- Calculer la distance entre deux points
- Calculer les coefficients d'un polynôme de régression
- Arithmétique
- Déterminer si un nombre est premier
- Décomposer un nombre en produit de facteurs premiers
- Fonctions
- Calculer une moyenne pondérée
- Approximation d'une intégrale (méthode de Simpson)
- Approximation des zéros d'une expression (dichotomie)
- Algorithmique
- Calculer les anagrammes d'un mot
Géométrie, algèbre linéaire
Calculer un produit scalaire
Function ProdSca(u As Range, v As Range) As Double 'Calcul du produit scalaire de u par v
'u: Composantes de u sur une ligne ou une colonne,
'v: Composantes de v sur une ligne ou une colonne.
Dim i As Integer Dim nc As Integer Dim ps As Double nc = u.Cells.Count For i = 1 To nc ps = ps + u(i) * v(i) Next i ProdSca = ps End Function
Calculer la distance entre deux points
Function Distance(P As Range, Q As Range) As Double 'Calcul de la distance entre deux points du plan ou de l'espace
'P: coordonnées d'un point entrées sur une ligne ou une colonne,
'Q: coordonnées d'un autre point entrées sur une ligne ou une colonne.
Dim d As Double Dim Nc As Integer Dim Sc As Integer Nc = P.Cells.Count For i = 1 To Nc Sc = Sc + (P(i) - Q(i)) ^ 2 Next i Distance = Sqr(Sc) End Function
Calculer les coefficients d'un polynôme de régression
Il est possible d'ajouter à un graphique une courbe de tendance polynomiale (par la méthode des moindres carrés). Pour utiliser ce polynôme dans une feuille de calcul, il faut calculer les coefficients de celui-ci par une formule. Si le degré du polynôme est fixé, il est possible de passer par la formule DROITEREG. Mais si le degré est quelconque, il est nécessaire de passer par une fonction VBA.
Syntaxe
{=MoindresCarres(rgX;rgY;p)}
rgX : Plage des valeurs en abscisse
rgY : Plage des valeurs en ordonnée
p : Degré du polynôme de régression
La fonction renvoie la matrice {a0;a1;...;ap} de p+1 lignes des coefficients du polynôme P(x) = a0 + a1*x + ... + ap*x^p calculé.
Code de la fonction
Function MoindresCarres(rgX As Range, rgY As Range, p As Integer) Dim n As Integer Dim i As Integer Dim j As Integer Dim M() As Double n = rgX.Cells.Count ReDim M(n - 1, p) For i = 0 To n - 1 For j = 0 To p M(i, j) = rgX(i + 1) ^ j Next Next With WorksheetFunction If rgX.Rows.Count = 1 Then MoindresCarres = .MMult(.MInverse(.MMult(.Transpose(M), M)), .MMult(.Transpose(M), .Transpose(rgY))) Else MoindresCarres = .MMult(.MInverse(.MMult(.Transpose(M), M)), .MMult(.Transpose(M), rgY)) End If End With End Function
Arithmétique
Déterminer si un nombre est premier
Function EstPremier(n As Long) As Boolean 'Renvoie VRAI si n est premier, FAUX sinon.
Dim i As Integer Select Case n Case 1 EstPremier = False Case 2 EstPremier = True Case Else For i = 2 To n ^ 0.5 If n / i = Int(n / i) Then EstPremier = False Exit Function End If Next EstPremier = True End Select End Function
Décomposer un nombre en produit de facteurs premiers
Function DecompositionFacteursPremiers(n As Long) As String 'Décompose un nommbre entier en produit de facteurs premiers
'et renvoie le résultat sous la forme d'une chaine de caractères
'du type "2^3*5^2*7^1".
Dim p As Long Dim e As Integer Dim str As String p = 2 If n = 1 Then DecompositionFacteursPremiers = "Ø" Else While n <> 1 If Int(n / p) = n / p Then n = n / p e = e + 1 Else If e <> 0 Then str = str & p & "^" & e & "*" p = p + 1 e = 0 End If Wend DecompositionFacteursPremiers = str & p & "^" & e End If End Function
Fonctions
Calculer une moyenne pondérée
Une fonction très utile pour les profs qui affectent des coéfficients à différentes matières.
Function moyp(r As Range, p As Range) As Double 'Calcul d'une moyenne pondérée.
'r: tableau des résultats sur une ligne ou une colonne,
'p: tableau des poids sur une ligne ou une colonne.
Dim i As Integer Dim nr As Integer Dim num As Double Dim denom As Double nr = r.Cells.Count For i = 1 To nr num = num + r(i) * p(i) denom = denom + p(i) Next i moyp = num / denom End Function
Approximation d'une intégrale (méthode de Simpson)
La fonction suivante calcule l'intégrale de la fonction f entre a et b par la méthode de Simpson (approximation de f par un polynôme de degré 2).
Syntaxe
=IntegraleSimpson(f;a;b;n)
f : Expression de la fonction de la variable x (sous forme de texte). Exemple : "SIN(x)".
a : Borne inférieure de l'intervalle.
b : Borne supérieure de l'intervalle.
n : Nombre de subdivisions de l'intervalle. Valeur conseillée : 100.
Code de la fonction
Function IntegraleSimpson(f As String, a As Double, b As Double, n As Integer) As Double Dim h As Double Dim k As Integer Dim ak0 As Double, ak1 As Double Dim i As Double Dim f0 As Double, f1 As Double, f2 As Double h = (b - a) / n ak0 = a f0 = Evaluate("+" & Replace(Replace(f, "x", a), ",", ".")) For k = 1 To n ak1 = a + k * h f1 = Evaluate("+" & Replace(Replace(f, "x", Replace(ak0 + h / 2, ",", ".")), ",", ".")) f2 = Evaluate("+" & Replace(Replace(f, "x", Replace(ak1, ",", ".")), ",", ".")) i = i + f0 + 4 * f1 + f2 f0 = f2 ak0 = ak1 Next IntegraleSimpson = i * h / 6 End Function
Approximation des zéros d'une expression (dichotomie)
La fonction suivante permet d'évaluer les valeurs de x pour lesquelles une fonction f continue s'annule.
Syntaxe
=Dichotomie(expr;a;b;Precision)
expr : expression f(x). Par exemple : "LN(x)-1" ou "1+x^2". Les noms des fonctions doivent être inscrits en majuscules (sinon, la fonction ne marche pas si un des noms de fonctions contient un "x").
a, b : encadrement de la racine cherchée. a et b doivent être choisis de façon à ce que la fonction ne s'annule qu'une fois sur l'intervalle [a, b] et que f(a) et f(b) soient de signes contraires.
Precision : précision voulue pour la valeur de la racine (exemple : 0,0001).
La fonction renvoie une valeur approchée avec la précision Precision de la solution de l'équation f(x) = 0 sur l'intervalle [a, b].
Code de la fonction
Function Dichotomie(expr As String, a As Double, b As Double, Precision As Double) Dim e As Integer Dim r0 As Double, r1 As Double If f(expr, b) > f(expr, a) Then e = 1 Else e = -1 End If r0 = a r1 = b While Abs(r1 - r0) > Precision If e * f(expr, (r0 + r1) / 2) > 0 Then r1 = (r0 + r1) / 2 Else r0 = (r0 + r1) / 2 End If Wend Dichotomie = r0 End Function Function f(expr, x) f = Evaluate(Replace(Replace(expr, "x", "(" & x & ")"), ",", ".")) End Function
Algorithmique
Calculer les anagrammes d'un mot
Exécuter la procédure Anagramme inscrit en colonne A toutes les anagrammes du mot de base spécifié. Ainsi, "abc" va donner "abc", "acb", "bac", "bca", "cab" et "cba". Pour un mot de n lettres différentes, il y a n! anagrammes. Si le mot de base contient des lettres identiques, il y aura des doublons dans la colonne A.
Sub Anagramme() Dim s As String s = InputBox("Mot de base ?" & vbCrLf & "(Maximum 8 caractères.)", "Anagramme", "excel") Cells.Clear Permutation s, 0, 0 End Sub Sub Permutation(s As String, c As Integer, ByRef l As Integer) Dim i As Integer For i = 1 To Len(s) - c s = Left(s, c) & PermutCirc(Right(s, Len(s) - c)) If c = Len(s) - 1 Then l = l + 1 Cells(l, 1).Value = s Else Permutation s, c + 1, l End If Next End Sub Function PermutCirc(s) PermutCirc = Right(s, Len(s) - 1) & Left(s, 1) End Function
Mot clef associé à cette page : mathématiques
- Vous devez vous identifier ou créer un compte pour écrire des commentaires
