Creation d'un matrice et sa resolution en VBA

Fermé
Cédric - 25 mars 2008 à 09:28
 meda - 5 juin 2008 à 19:39
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
A voir également:

1 réponse

aidez moi
j'ai besoin d'un programme qui simule les RDP avec visual basic sous excel
0