Creation d'un matrice et sa resolution en VBA
Cédric
-
meda -
meda -
Bonjour,
Je suis en train d'ecrire une macro qui a pour but de resoudre une matrice specifique grace a la methode du pivot de gauss. Ceci dit ca fait 2 semaine que je buche sur le sujet et 1 semaine que j'ai commencer a ecrire le programme car je ne savais pas du tout comment me servir de VBA afin d'aborder le probleme.
Voici l'idée derriere cette macro, dans une premiere page "données" j'ai l'insertion d'un nombre "n" qui est le nombre d'entrer de d'angles et de poids qui se trouvent respectivement sur la ligne 7 et 8 de la page "données".
La macro ecrit ensuite la matrice qui me permet de resoudre le probleme dans la page "matrice"
Dans la page "inverse" est la ou tout se passe. C'est ici que je voudrai que la triangulation de la matrice se fasse.
Selon certains exemples ca marche bien ( je ne sais pas si le resultat est bon, mais du moins il garde la "forme" ) et d'autres ou le dernier 1 est remplacer par un 0 ... :S
Enfin, sur la page "sortie" j'ai les inconnues qui sont liste...
Apres 1 semaine d'ecriture, j'ai l'impression que le programme effectue ce que je lui demande, c'est a dire d'effectuer une resolution par pivot de gauss, mais a voir certains resultats j'ai du me tromper 'une autre foi' ou sinon c'est mon raisonnement qui est a coté de la plaque. Je vous fourni la macro tel que je l'ai ecrite.
Sub maçon()
'lecture des parametre
N = Sheets("données").Cells(5, 2)
Sheets("données").Cells(1, 1) = N
f = Sheets("données").Cells(10, 2)
Sheets("données").Cells(1, 2) = f
'mise a 0 des fiches "matrice", "inverse" et "sortie"
Sheets("matrice").Cells.ClearContents
Sheets("matrice").Cells.ClearFormats
Sheets("inverse").Cells.ClearContents
Sheets("inverse").Cells.ClearFormats
Sheets("sortie").Cells.ClearContents
Sheets("sortie").Cells.ClearFormats
'creation de la matrice
For i = 1 To (2 * N + 2)
For j = 1 To (2 * N + 2)
Sheets("matrice").Cells(i, j) = 0
Next j
Next i
Sheets("matrice").Cells(1, 1) = f
Sheets("matrice").Cells(1, 2) = -1
i = 2 * N + 2
j = 2 * N + 1
Sheets("matrice").Cells(i, j) = f
Sheets("matrice").Cells(i, j + 1) = -1
For i = 1 To N
j = 2 * i
k = i + 1
Sheets("matrice").Cells(j, j - 1) = -Sin(Sheets("données").Cells(7, k))
Sheets("matrice").Cells(j, j) = -Cos(Sheets("données").Cells(7, k))
Sheets("matrice").Cells(j, j + 1) = Sin(Sheets("données").Cells(7, k + 1))
Sheets("matrice").Cells(j, j + 2) = Cos(Sheets("données").Cells(7, k + 1))
Sheets("matrice").Cells(j + 1, j - 1) = Cos(Sheets("données").Cells(7, k))
Sheets("matrice").Cells(j + 1, j) = -Sin(Sheets("données").Cells(7, k))
Sheets("matrice").Cells(j + 1, j + 1) = -Cos(Sheets("données").Cells(7, k + 1))
Sheets("matrice").Cells(j + 1, j + 2) = Sin(Sheets("données").Cells(7, k + 1))
Next i
'inverse et resolution de la matrice par la methode du pivot de GAUSS
Sheets("inverse").Cells(1, 2 * N + 3) = 0
Sheets("inverse").Cells(2 * N + 2, 2 * N + 3) = 0
For i = 1 To N + 1
j = 2 * i
Sheets("inverse").Cells(j, 2 * N + 3) = 0
Sheets("inverse").Cells(j + 1, 2 * N + 3) = Sheets("données").Cells(8, 1 + i)
Next i
For i = 1 To (2 * N + 2)
For j = 1 To (2 * N + 2)
Sheets("inverse").Cells(i, j) = 0
Next j
Next i
Sheets("inverse").Cells(1, 1) = f
Sheets("inverse").Cells(1, 2) = -1
i = 2 * N + 2
j = 2 * N + 1
Sheets("inverse").Cells(i, j) = f
Sheets("inverse").Cells(i, j + 1) = -1
For i = 1 To N
j = 2 * i
k = i + 1
Sheets("inverse").Cells(j, j - 1) = -Sin(Sheets("données").Cells(7, k))
Sheets("inverse").Cells(j, j) = -Cos(Sheets("données").Cells(7, k))
Sheets("inverse").Cells(j, j + 1) = Sin(Sheets("données").Cells(7, k + 1))
Sheets("inverse").Cells(j, j + 2) = Cos(Sheets("données").Cells(7, k + 1))
Sheets("inverse").Cells(j + 1, j - 1) = Cos(Sheets("données").Cells(7, k))
Sheets("inverse").Cells(j + 1, j) = -Sin(Sheets("données").Cells(7, k))
Sheets("inverse").Cells(j + 1, j + 1) = -Cos(Sheets("données").Cells(7, k + 1))
Sheets("inverse").Cells(j + 1, j + 2) = Sin(Sheets("données").Cells(7, k + 1))
Next i
For k = 1 To N * 2 + 1
pivot = Sheets("inverse").Cells(k, k)
For i = k To N * 2 + 2
num0 = Sheets("inverse").Cells(i, k)
For j = k To N * 2 + 3
If i = k Then
Sheets("inverse").Cells(i, j) = Sheets("inverse").Cells(i, j) / pivot
Else
Sheets("inverse").Cells(i, j) = Sheets("inverse").Cells(i, j) - num0 * Sheets("inverse").Cells(k, j)
End If
Next j
Next i
Next k
'resolutions des "N" et "T"
For k = 2 * N + 1 To 1 Step -1
For j = 2 * N + 2 To k Step -1
If j <> k Then
Sheets("sortie").Cells(k, 1) = -Sheets("inverse").Cells(k, j) * Sheets("sortie").Cells(j, 1) + Sheets("sortie").Cells(k, 1)
Else
Sheets("sortie").Cells(k, 1) = Sheets("inverse").Cells(j, 2 * N + 3) / Sheets("inverse").Cells(j, j) + Sheets("sortie").Cells(k, 1)
End If
Next j
Next k
End Sub
Je suis en train d'ecrire une macro qui a pour but de resoudre une matrice specifique grace a la methode du pivot de gauss. Ceci dit ca fait 2 semaine que je buche sur le sujet et 1 semaine que j'ai commencer a ecrire le programme car je ne savais pas du tout comment me servir de VBA afin d'aborder le probleme.
Voici l'idée derriere cette macro, dans une premiere page "données" j'ai l'insertion d'un nombre "n" qui est le nombre d'entrer de d'angles et de poids qui se trouvent respectivement sur la ligne 7 et 8 de la page "données".
La macro ecrit ensuite la matrice qui me permet de resoudre le probleme dans la page "matrice"
Dans la page "inverse" est la ou tout se passe. C'est ici que je voudrai que la triangulation de la matrice se fasse.
Selon certains exemples ca marche bien ( je ne sais pas si le resultat est bon, mais du moins il garde la "forme" ) et d'autres ou le dernier 1 est remplacer par un 0 ... :S
Enfin, sur la page "sortie" j'ai les inconnues qui sont liste...
Apres 1 semaine d'ecriture, j'ai l'impression que le programme effectue ce que je lui demande, c'est a dire d'effectuer une resolution par pivot de gauss, mais a voir certains resultats j'ai du me tromper 'une autre foi' ou sinon c'est mon raisonnement qui est a coté de la plaque. Je vous fourni la macro tel que je l'ai ecrite.
Sub maçon()
'lecture des parametre
N = Sheets("données").Cells(5, 2)
Sheets("données").Cells(1, 1) = N
f = Sheets("données").Cells(10, 2)
Sheets("données").Cells(1, 2) = f
'mise a 0 des fiches "matrice", "inverse" et "sortie"
Sheets("matrice").Cells.ClearContents
Sheets("matrice").Cells.ClearFormats
Sheets("inverse").Cells.ClearContents
Sheets("inverse").Cells.ClearFormats
Sheets("sortie").Cells.ClearContents
Sheets("sortie").Cells.ClearFormats
'creation de la matrice
For i = 1 To (2 * N + 2)
For j = 1 To (2 * N + 2)
Sheets("matrice").Cells(i, j) = 0
Next j
Next i
Sheets("matrice").Cells(1, 1) = f
Sheets("matrice").Cells(1, 2) = -1
i = 2 * N + 2
j = 2 * N + 1
Sheets("matrice").Cells(i, j) = f
Sheets("matrice").Cells(i, j + 1) = -1
For i = 1 To N
j = 2 * i
k = i + 1
Sheets("matrice").Cells(j, j - 1) = -Sin(Sheets("données").Cells(7, k))
Sheets("matrice").Cells(j, j) = -Cos(Sheets("données").Cells(7, k))
Sheets("matrice").Cells(j, j + 1) = Sin(Sheets("données").Cells(7, k + 1))
Sheets("matrice").Cells(j, j + 2) = Cos(Sheets("données").Cells(7, k + 1))
Sheets("matrice").Cells(j + 1, j - 1) = Cos(Sheets("données").Cells(7, k))
Sheets("matrice").Cells(j + 1, j) = -Sin(Sheets("données").Cells(7, k))
Sheets("matrice").Cells(j + 1, j + 1) = -Cos(Sheets("données").Cells(7, k + 1))
Sheets("matrice").Cells(j + 1, j + 2) = Sin(Sheets("données").Cells(7, k + 1))
Next i
'inverse et resolution de la matrice par la methode du pivot de GAUSS
Sheets("inverse").Cells(1, 2 * N + 3) = 0
Sheets("inverse").Cells(2 * N + 2, 2 * N + 3) = 0
For i = 1 To N + 1
j = 2 * i
Sheets("inverse").Cells(j, 2 * N + 3) = 0
Sheets("inverse").Cells(j + 1, 2 * N + 3) = Sheets("données").Cells(8, 1 + i)
Next i
For i = 1 To (2 * N + 2)
For j = 1 To (2 * N + 2)
Sheets("inverse").Cells(i, j) = 0
Next j
Next i
Sheets("inverse").Cells(1, 1) = f
Sheets("inverse").Cells(1, 2) = -1
i = 2 * N + 2
j = 2 * N + 1
Sheets("inverse").Cells(i, j) = f
Sheets("inverse").Cells(i, j + 1) = -1
For i = 1 To N
j = 2 * i
k = i + 1
Sheets("inverse").Cells(j, j - 1) = -Sin(Sheets("données").Cells(7, k))
Sheets("inverse").Cells(j, j) = -Cos(Sheets("données").Cells(7, k))
Sheets("inverse").Cells(j, j + 1) = Sin(Sheets("données").Cells(7, k + 1))
Sheets("inverse").Cells(j, j + 2) = Cos(Sheets("données").Cells(7, k + 1))
Sheets("inverse").Cells(j + 1, j - 1) = Cos(Sheets("données").Cells(7, k))
Sheets("inverse").Cells(j + 1, j) = -Sin(Sheets("données").Cells(7, k))
Sheets("inverse").Cells(j + 1, j + 1) = -Cos(Sheets("données").Cells(7, k + 1))
Sheets("inverse").Cells(j + 1, j + 2) = Sin(Sheets("données").Cells(7, k + 1))
Next i
For k = 1 To N * 2 + 1
pivot = Sheets("inverse").Cells(k, k)
For i = k To N * 2 + 2
num0 = Sheets("inverse").Cells(i, k)
For j = k To N * 2 + 3
If i = k Then
Sheets("inverse").Cells(i, j) = Sheets("inverse").Cells(i, j) / pivot
Else
Sheets("inverse").Cells(i, j) = Sheets("inverse").Cells(i, j) - num0 * Sheets("inverse").Cells(k, j)
End If
Next j
Next i
Next k
'resolutions des "N" et "T"
For k = 2 * N + 1 To 1 Step -1
For j = 2 * N + 2 To k Step -1
If j <> k Then
Sheets("sortie").Cells(k, 1) = -Sheets("inverse").Cells(k, j) * Sheets("sortie").Cells(j, 1) + Sheets("sortie").Cells(k, 1)
Else
Sheets("sortie").Cells(k, 1) = Sheets("inverse").Cells(j, 2 * N + 3) / Sheets("inverse").Cells(j, j) + Sheets("sortie").Cells(k, 1)
End If
Next j
Next k
End Sub
A voir également:
- Creation d'un matrice et sa resolution en VBA
- Creation compte gmail - Guide
- Création site web - Guide
- Création d'un compte google - Guide
- Media creation tool - Télécharger - Systèmes d'exploitation
- Creation compte vinted - Guide