begin process at 2010 07 29 16:04:36
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Math & Algorithmes

 > PIVOT DE GAUSS

PIVOT DE GAUSS


 Information sur la source

Note :
6 / 10 - par 1 personne
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Math & Algorithmes Classé sous :python, pivot, gauss, matrice, maths Niveau :Débutant Date de création :30/03/2009 Date de mise à jour :30/03/2009 20:32:39 Vu :4 130

Auteur : linkid

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note


 Description

Ce script permet d'effectuer un pivot de Gauss en ligne (ou en colonne avec la transposée).

Il intègre également deux autres fonctions : l'une pour déterminer le rang de la matrice, l'autre pour obtenir sa transposée.

Source

  • #!/usr/bin/python
  • #-*-coding: utf-8 -*-
  • # Auteur : Linkid
  • def pivot(tab):
  • line, col = len(tab), len(tab[0]) ## on considere que tab a deux dimensions et est non vide
  • i, j = 0, 0
  • while j < col and i < line:
  • ## tri inverse de tab
  • tab.sort(reverse=1)
  • #print tab, 'tri',
  • ## recherche d'un pivot
  • k = i+1
  • max = i ## Pivot
  • while k < line:
  • if ( abs( tab[k][j] ) > abs( tab[max][j] ) ):
  • max = k
  • k = k+1
  • #print max
  • ## l'algo en lui-meme
  • if tab[max][j] != 0:
  • ## reduction du coef pivot a 1
  • k = j
  • piv = tab[max][j]
  • while k < col:
  • tab[max][k] = tab[max][k] * 1. / piv
  • k = k+1
  • #print tab
  • ## operations du pivot de Gauss
  • k = 0
  • while k < line:
  • if k != max:
  • t = 0
  • ca = tab[k][j] ## coef de la colonne pivot j de la ligne k modifiee
  • while t < col:
  • tab[k][t] = tab[k][t] - ca * tab[max][t]
  • #print tab[k][t], ca, tab[max][t]
  • t = t+1
  • k = k+1
  • i = i+1
  • j = j+1
  • #print tab, 'fin'
  • tab.sort(reverse=1) ## peu important et ajoute un peu de complexite
  • return tab
  • def transpose(tab):
  • col = len(tab[0])
  • t = []
  • li = 0
  • while li < col:
  • t.append([])
  • li = li+1
  • for l in tab:
  • k = 0
  • while k < col:
  • t[k].append(l[k])
  • k = k+1
  • return t
  • def rang(tab):
  • tab = transpose(tab)
  • tab = pivot(tab)
  • line, col = len(tab), len(tab[0])
  • rg = 0
  • for k in tab:
  • if k != [0]*col:
  • rg += 1
  • return rg
  • if __name__ == "__main__":
  • a = [[1, 1, 1, 1], [1, -1, 1, -1], [-1, 1, -1, 1]] ## Test
  • b = [[0, 0, 0], [-2, 1, -1], [2, 0, 2]] ## Test
  • print rang(b) ## Test
#!/usr/bin/python
#-*-coding: utf-8 -*-

#       Auteur : Linkid

def pivot(tab):
	line, col = len(tab), len(tab[0]) ## on considere que tab a deux dimensions et est non vide
	i, j = 0, 0
	
	while j < col and i < line:
		## tri inverse de tab
		tab.sort(reverse=1)
		#print tab, 'tri',
		## recherche d'un pivot
		k = i+1
		max = i ## Pivot
		while k < line:
			if ( abs( tab[k][j] ) > abs( tab[max][j] ) ):
				max = k
			k = k+1
		#print max
		
		
		## l'algo en lui-meme
		if tab[max][j] != 0:
			## reduction du coef pivot a 1
			k = j
			piv = tab[max][j]
			while k < col:
				tab[max][k] = tab[max][k] * 1. / piv
				k = k+1
			#print tab
			
			## operations du pivot de Gauss
			k = 0
			while k < line:
				if k != max:
					t = 0
					ca = tab[k][j] ## coef de la colonne pivot j de la ligne k modifiee
					while t < col:
						tab[k][t] = tab[k][t] - ca * tab[max][t]
						#print tab[k][t], ca, tab[max][t]
						t = t+1
				k = k+1
			i = i+1
		j = j+1
		#print tab, 'fin'
	tab.sort(reverse=1) ## peu important et ajoute un peu de complexite
	return tab


def transpose(tab):
	col = len(tab[0])
	t = []
	li = 0
	while li < col:
		t.append([])
		li = li+1
	for l in tab:
		k = 0
		while k < col:
			t[k].append(l[k])
			k = k+1
	return t


def rang(tab):
	tab = transpose(tab)
	tab = pivot(tab)
	line, col = len(tab), len(tab[0])
	rg = 0
	for k in tab:
		if k != [0]*col:
			rg += 1
	return rg


if __name__ == "__main__":
	a = [[1, 1, 1, 1], [1, -1, 1, -1], [-1, 1, -1, 1]] ## Test
	b = [[0, 0, 0], [-2, 1, -1], [2, 0, 2]] ## Test
	print rang(b) ## Test

 Conclusion

Ce script est intéressant pour les calculs matriciels et donc pour les résolutions d'équations (suites, ...).

Je vais bientôt ajouter une fonction permettant d'avoir l'inverse de la matrice de départ si inversible elle est, puis une seconde pour le noyau et l'image de la matrice.
À suivre...


 Historique

30 mars 2009 20:23:10 :
Ajout de mot clef.
30 mars 2009 20:24:01 :
Ajout de mots clés.
30 mars 2009 20:32:39 :
Ajout du code

 Sources du même auteur

CHANGEMENT DE CASSE
Source avec Zip NOMBRES DE KAPREKAR
Source avec Zip BÉZOUT OU ALGORITHME D'EUCLIDE ÉTENDU

 Sources de la même categorie

CALCUL LIST DE NOMBRES PREMIERS par White541
TROUVER TOUT LES QUADRILATÉRES POSSIBLES AVEC N POINTS ALEAT... par Buenol
Source avec Zip GÉNÉRATION D'UN LABYRINTHE AVEC RECHERCHE DU CHEMIN LE PLUS ... par mehdicherti
Source avec Zip Source avec une capture DIVISIONS AVEC PRÉCISION RÉGLABLE par Clempython
Source avec Zip Source avec une capture LE CALCULATOR DE RAYGOLD VERSION 3.1 par raygold

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture [PYTHON] JEU DU PENDU par The_tito
Source avec Zip Source avec une capture EQUATION STANDARD DE LA DROITE par calogerogigante
SIMPLE COMPARATEUR IPV4 EN PYTHON par erebos
Source avec Zip CALCULATRICE SIMPLICISTE SOUS TKINTER par elnabo
Source avec Zip Source avec une capture UN CLASSIC SOKOBAN par blackgrimly

Commentaires et avis

Commentaire de Julien39 le 28/06/2009 08:07:47 6/10

Le pivot de Gauss !!! Ca me rappelle mes premiers exos de programmation, et toutes les fois ou je me suis arraché les cheveux sur ce code!

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

tutoriaux python [ par slachz ] voilà un tuto FR tres remplie en python (il existe en bouquin mais est telechargeable gratuitement) :http://www.ulg.ac.be/cifen/inforef/swi/python.htm installation python [ par champagnef ] Bonjour,je suis nouveau sur python. J'apprends (en amateur intéressé) avec le cours de G. Swinnen et autres tuto.Je suis sur Mac Os X.3.5 et je pense Projet Python: Lecteur de flux RSS. [ par Marvin ] Amis codeurs, bien le bonjour (ou plutot bonsoir car il est 00:33 ( GTM + 1h ) ) ,J'ai en tête depuis déja quelques jours, de créer un lecteur de flux Paramétrage de python [ par deguelatore ] salut à tous. Je voulai vous demandez si on peut se débarrasser du mode interactif de python?? Vous savez les 3 flèches (&gt;&gt;&gt;).C'est juste pas Tk vs wx [ par bonac ] Bonjour,Je doit faire une assez grosse application en python, le problème est que je ne connaissait pas python (du moins de nom) le mois dernier. Cett Help : Python/DB/CGI [ par Chill_Sik ] Bonjour à tous, voila qqjours que je me casse les dents sur un petit problème alors je me décide a appeler "au secour" car on ne sait jamais que certa WebCam [ par DoudouBidou ] Après plusieurs recherche je n'ai pas trouvé de script python capable de diffusé une webcam sur un réseaudonc je lance le débat, est-il possible de ré dll avec python? [ par LokR ] Salut tout le monde!je me pose une kestion, je pense pas que ce soit possible mais d'un autre coté je pensais pas kon puisse faire d' *.exe avec pytho aide pour xchat svp [ par Jamu ] Salut a tous Je debute sur xchat et le python ben je connais pas,j'ai chercher des tuto sur google mais j'ai trouvé que des tuto de python en général les variables vu par Plone... [ par onlybjork ] Bonjour.Je suis designer, et dans le cadre d'une intégration de charte sous plone, j'ai besoin d'incrémenter tout simplement une variable. Seulement,


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales