begin process at 2012 02 05 00:15:06
  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 :7 560

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

Source avec Zip BASE64 ENCRYPT/DECRYPT PYTHON BY MAXOU56800 par Maxou56800
Source avec Zip Source avec une capture TRIANGULATION par mecrosoft
Source avec Zip Source avec une capture COURBE DE BEZIER par mecrosoft
Source avec Zip Source avec une capture CALCUL D'AIRE D'UN TRIANGLE [INTERFACE GRAPHIQUE] par SeventhSon
Source avec Zip Source avec une capture SUITE DE FIBONACCI [INTERFACE GRAPHIQUE] par SeventhSon

 Sources en rapport avec celle ci

Source avec Zip TPYCODE, TRADUCTEUR DE CODE par jonathan33350
Source avec une capture JEU DU SERPENT (SNAKE) par zarash
Source avec Zip Source avec une capture TRIANGULATION par mecrosoft
Source avec Zip Source avec une capture COURBE DE BEZIER par mecrosoft
Source avec Zip Source avec une capture PROGRAMMATION par grephit

Commentaires et avis

Commentaire de Julien39 le 28/06/2009 08:07:47 administrateur CS 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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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,671 sec (4)

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