ce code permet de retourner la matrice inverse d'une matrice donnée en paramètre en utilisant la méthode des déterminant.
Source / Exemple :
Public Sub Inverse(ma() As Double, mb() As Double, Erreur As Boolean)
Dim m1() As Double, m2() As Double, d As Double
ReDim m1(UBound(ma, 1), UBound(ma, 2))
ReDim m2(UBound(ma, 1), UBound(ma, 2))
If ((Not (UBound(ma, 1) = UBound(ma, 2))) Or (Determinant(ma, UBound(ma, 1)) = 0)) Then
Erreur = True
Else
d = (1 / Determinant(ma, UBound(ma, 1)))
Transpose ma, m2
Coffacteur m2, m1
ProduitScalaire d, m1, mb
Erreur = False
End If
End Sub
Public Sub ProduitScalaire(a As Double, ma() As Double, mb() As Double)
Dim i As Integer, j As Integer
ReDim mb(UBound(ma, 1), UBound(ma, 2))
For i = 0 To (UBound(ma, 1) - 1)
For j = 0 To (UBound(ma, 2) - 1)
mb(i, j) = ma(i, j) * a
Next
Next
End Sub
Public Sub Det_aux(ma() As Double, mb() As Double, l As Integer, c As Integer)
Dim i As Integer, j As Integer, d As Integer, E As Integer
E = 0
ReDim mb(UBound(ma, 1) - 1, UBound(ma, 2) - 1)
For i = 0 To (UBound(ma, 1) - 1)
d = 0
If (i <> l) Then
For j = 0 To (UBound(ma, 2) - 1)
If (j <> c) Then
mb(E, d) = ma(i, j)
d = d + 1
End If
Next
E = E + 1
End If
Next
End Sub
Public Function Expo(n As Integer) As Double
If ((n Mod 2) = 0) Then
Expo = 1
Else
Expo = -1
End If
End Function
Public Function Determinant(m() As Double, l As Integer) As Double
Dim i As Integer, j As Integer, ii As Integer, jj As Integer
Dim m2() As Double, X As Double, Y As Double
X = 0
If (l = 2) Then
Determinant = (m(0, 0) * m(1, 1)) - (m(0, 1) * m(1, 0))
Else
For i = 0 To (l - 1)
Det_aux m, m2, 0, i
Y = Determinant(m2, (l - 1))
X = X + (Expo(i) * m(0, i) * Y)
Next
Determinant = X
End If
End Function
Public Sub Coffacteur(MatD() As Double, MatR() As Double)
Dim i As Integer, j As Integer, Temp() As Double, Det As Double
ReDim MatR(UBound(MatD, 1), UBound(MatD, 2))
If ((UBound(MatD, 1) = 2) And (UBound(MatD, 1) = 2)) Then
MatR(0, 0) = Expo(0) * (MatD(1, 1))
MatR(0, 1) = Expo(1) * (MatD(0, 1))
MatR(1, 0) = Expo(1) * (MatD(1, 0))
MatR(1, 1) = Expo(0) * (MatD(0, 0))
Else
For i = 0 To (UBound(MatD, 1) - 1)
For j = 0 To (UBound(MatD, 2) - 1)
Det_aux MatD, Temp, i, j
MatR(i, j) = Expo(i + j) * Determinant(Temp, UBound(Temp, 1))
Next
Next
End If
End Sub
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.