Forum Liberty Basic France
• Index
• Projets open source » Système d'équations linéaires - mode console Résolution par la méthode de Gauss-jordan
Libertynaute Inactif
Groupe: Visiteur
En mode "console" ou "texte".
Résolution d'un système de 10 équations à 10 inconnues en 15 millisecondes
en LB404 ou JB.
GUI en gestation, qui sera plus petit car il faudrait 110 textbox pour cet exemple-ci,
pcq il y a 1 colonne supplémentaire pour les termes indépendants.
La limite autorisée est à 100 textbox.
Code :
Edité par Visiteur Le 20/12/2011 à 16h51
Résolution d'un système de 10 équations à 10 inconnues en 15 millisecondes
en LB404 ou JB.
GUI en gestation, qui sera plus petit car il faudrait 110 textbox pour cet exemple-ci,
pcq il y a 1 colonne supplémentaire pour les termes indépendants.
La limite autorisée est à 100 textbox.
Code :
'GAUSS-JORDAN_XL - système de 10 équations linéaires et 10 inconnues
'LB404 et JB 20 décembre 2011
'résolution d'un système d'équations linéaires par la méthode
'd'élimination de Gauss-Jordan
[PROBLEME]
'---solutions: x1 = 1, x2 =2, x3 = 3, x4 = -1, x5 = -2,
'--- x6 = -3, x7 = 5, x8 = -10, x9 = 12, x10 = -7
PRINT "Systeme de 10 equations et 10 inconnues:"
PRINT
PRINT "x1 - x2 + 2x3 - x4 + x5 + x6 - x7 + x8 - x9 + x10 = -33"
PRINT
PRINT "3x1 + 2x2 + x3 + x4 - x5 - x6 + 2x7 - x8 + x9 - 2x10= 60"
PRINT
PRINT "2x1 - 3x2 - 2x3 - 2x4 - 3x5 - 2x6 - 3x7 + 2x8 - 3x9 + 3x10= -88"
PRINT
PRINT "4x1 - x2 - 3x3 + 3x4 + 2x5 + 4x6 + x7 - 2x8 + 3x9 + 4x10= 7"
PRINT
PRINT "-6x1 + 5x2 - x3 + 4x4 - 6x5 - 3x6 - 2x7 + 3x8 + 2x9 - 3x10 = 23"
PRINT
PRINT "-5x1 + x2 + x3 + x4 + x5 + x6 + 3x7 - 3x8 - 2x9 -4x10 = 43"
PRINT
PRINT "x1 + x2 + x3 + x4 + x5 + x6 + 4x7 + 4x8 + 4x9 + x10 = 21"
PRINT
PRINT "-2x1 - 2x2 - 3x3 - 4x4 - 5x5 + 6x6 + 7x7 - 8x8 - 5x9 + x10 = 29"
PRINT
PRINT "x1 + x2 + x3 - 2x4 - 2x5 - 2x6 + 3x7 + 3x8 + 3x9 - 2x10 = 53"
PRINT
PRINT"2x1 - 2x2 + 3x3 + 4x4 - 5x5 + 6x6 - 7x7 + 8x8 - 3x9 +2x10 = -170"
PRINT: PRINT
[MATRICE]
'---créer la matrice des n coefficients et des termes indépendants
'---(en A(n , n+1) et l'afficher
x = 1
n = 10
DIM A(n+1, n+1) 'pour les coefficients + indépendants
DATA 1, -1, 2, -1, 1, 1, -1, 1, -1, 1, -33
DATA 3, 2, 1, 1, -1, -1, 2, -1, 1, -2, 60
DATA 2, -3, -2, -2, -3, -2, -3, 2, -3, 3, -88
DATA 4, -1, -3, 3, 2, 4, 1, -2, 3, 4, 7
DATA -6, 5, -1, 4, -6, -3, -2, 3, 2, -3, 23
DATA -5, 1, 1, 1, 1, 1, 3, -3, -2, -4, 43
DATA 1, 1, 1, 1, 1, 1, 4, 4, 4, 1, 21
DATA -2, -2, -3, -4, -5, 6, 7, -8, -5, 1, 29
DATA 1, 1, 1, -2, -2, -2, 3, 3, 3, -2, 53
DATA 2, -2, 3, 4, -5, 6, -7, 8, -3, 2, -170
'--- lecture des données
PRINT "Matrice des coefficients et des termes independants:" : PRINT
FOR i = 1 TO n
FOR j = 1 TO n + 1
READ m
A(i, j) = m
PRINT m,
NEXT j
PRINT: PRINT
NEXT i
PRINT
'---vérifier s'il n'y a pas de zéro sur la diagonale des coefficients,
'--- sinon problème insoluble
flag = 0
FOR i = 1 TO n
IF A(i,i) = 0 THEN flag = 1
NEXT i
IF flag = 1 THEN
PRINT "Un coefficient diagonal nul, cas insoluble"
GOTO [Fin]
END IF
[CALCUL]
'---Calcul (en 17 instructions)
'---(i et k indices de lignes, j indice des colonnes)
t1 = TIME$("ms")
'---réduire chaque pivot diagonal A(i,i) à 1
'--- en divisant toute la ligne par A(i,i)
FOR i = 1 TO n
p = A(i, i) 'c'est le "pivot" de Gauss,
'sur la diagonale principale des coefficients
FOR j = 1 TO n + 1
q = A(i, j)
A(i, j) = q / p
NEXT j
'combiner la ligne i avec toutes les autres lignes (donc sauf si k = i)
'en soustrayant de la ligne k, la ligne i multipliée par le coefficient de X(i)
' à la ligne k, càd A(k,i) ;
'la ligne i reste intacte.
FOR k = 1 TO n
p = A(k, i)
IF k <> i THEN
FOR j = 1 TO n + 1
q = A(i, j)
r = A(k, j)
A(k, j) = r - p*q
NEXT j
END IF
NEXT k
NEXT i
'NB: éviter de diviser ou de multiplier les A(i,j) / A(m,n) ou A(i,j) * A(m,n),
' résultats aberrants surtout avec des décimales et deux dimensions
t2 = TIME$("ms")
'--- *** Fin du calcul *** --- voyons la matrice-résultat
[MATRCE_RESULTAT]
PRINT "Apres transformation de Gauss-Jordan :" : PRINT
FOR i = 1 TO n
FOR j= 1 TO n+1
PRINT A(i, j),
NEXT j
PRINT: PRINT
NEXT i
PRINT
[RESULTAT_FINAL]
'---Afficher les valeurs des inconnues 'x(i) = A(i, n+1)
'---Il y a une complication à l'affichage parce que les nombres entiers
'---sont transformés par LB en 'float' en cours de calcul,
'---par les divisions répétées je suppose, et affichent 1.0 au lieu de 1
'---Les corrections meilleures conduisent à des résultats erronés.
PRINT "Solutions des 10 équations à 10 inconnues:"
PRINT
FOR i = 1 TO n
x = A(i, n+1)
x$ = STR$(x)
IF RIGHT$(x$, 2) = ".0" THEN
PRINT "x"; STR$(i); " = ", USING("#####", x)
ELSE
PRINT "x"; STR$(i); " = ", x
END IF
NEXT i
PRINT
PRINT "temps de calcul = "; (t2 - t1); " millisecondes"
'NB: temps de calcul 15 millisecondes sur mon PC très moyen
' on ne compte pas le temps d'affichage,
' seulement le temps de calcul
[Fin]
END
Edité par Visiteur Le 20/12/2011 à 16h51
• Projets open source » Système d'équations linéaires - mode console Résolution par la méthode de Gauss-jordan
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie