no way to compare when less than two revisions
Différences
Ci-dessous, les différences entre deux révisions de la page.
— | teaching:progappchim:calcul_matriciel_2012 [2013/11/29 12:33] (Version actuelle) – créée villersd | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Calul matriciel ====== | ||
+ | <sxh python; title : calcul_matriciel.py> | ||
+ | # | ||
+ | # -*- coding: UTF-8 -*- | ||
+ | # | ||
+ | # | ||
+ | #pour operation matriciel verification mathématique : http:// | ||
+ | # | ||
+ | # | ||
+ | # travail de CD, ba2 chimie 2011-2012 | ||
+ | |||
+ | from Tkinter import * | ||
+ | |||
+ | from sys import * | ||
+ | |||
+ | def is_number(s): | ||
+ | try: | ||
+ | float(s) | ||
+ | return True | ||
+ | except ValueError: | ||
+ | return False | ||
+ | |||
+ | def Supp_lc(m, | ||
+ | " | ||
+ | Mlin=len(M) | ||
+ | result=[] | ||
+ | Rep=[] | ||
+ | for i in range(Mlin): | ||
+ | if i!=m: | ||
+ | for j in range(Mlin): | ||
+ | if j!=n: | ||
+ | result.append(M[i][j]) | ||
+ | #Ajoute les éléments tant qu'ils ne sont pas sur la m ième | ||
+ | # ligne ou n ième colonne | ||
+ | for k in range(0,len (result), | ||
+ | Rep.append(result[k: | ||
+ | #Scinde la liste " | ||
+ | return Rep | ||
+ | |||
+ | |||
+ | def Det(A): | ||
+ | " retourne le déterminat de la matrice A" | ||
+ | if len(A)==1: | ||
+ | return A[0][0] | ||
+ | else: | ||
+ | s=0 | ||
+ | j=0 | ||
+ | while j< | ||
+ | B=Supp_lc(j, | ||
+ | if j%2==0: #(-1)^(i+j) * Det(" | ||
+ | # et on considère toujours i=0 donc dépend juste de j | ||
+ | s=s+A[j][0]*Det(B) | ||
+ | else: | ||
+ | s=s-A[j][0]*Det(B) | ||
+ | j=j+1 | ||
+ | return s | ||
+ | |||
+ | |||
+ | def invmat(A): | ||
+ | "Donne l' | ||
+ | d=Det(A) | ||
+ | if d==0: | ||
+ | return 'La Matrice n\'est pas inversible' | ||
+ | else: | ||
+ | B=Mul_coff(1./ | ||
+ | inv=Trans_matrix(B) | ||
+ | return inv | ||
+ | |||
+ | |||
+ | def Comat(A): | ||
+ | "Donne la comatrice d'une matrice A" | ||
+ | N=len (A) | ||
+ | k=0 | ||
+ | com=[None]*N | ||
+ | while k<N: | ||
+ | com[k]=[0]*N | ||
+ | l=0 | ||
+ | while l<N: | ||
+ | B=Supp_lc(k, | ||
+ | if (k+l)%2==0: | ||
+ | com[k][l]=(Det(B)) | ||
+ | else: | ||
+ | com[k][l]=((-1)*Det(B)) | ||
+ | l=l+1 | ||
+ | k=k+1 | ||
+ | return com | ||
+ | |||
+ | |||
+ | def Trans_matrix(n): | ||
+ | """ | ||
+ | s=[] | ||
+ | for i in range(len(n[0])): | ||
+ | t=[] | ||
+ | for j in range(len(n)): | ||
+ | t.append(n[j][i]) | ||
+ | s.append(t) | ||
+ | return s | ||
+ | |||
+ | |||
+ | def Mul_coff(a, | ||
+ | """ | ||
+ | s = [] | ||
+ | for i in range(len(l)): | ||
+ | t =[] | ||
+ | for j in range(len(l[0])): | ||
+ | t.append( a* l[i][j]) | ||
+ | s.append(t) | ||
+ | return s | ||
+ | |||
+ | |||
+ | def Dif_matrix(h, | ||
+ | """ | ||
+ | if len(h)==len(l) and len(h[0])==len(l[0]): | ||
+ | s = [] | ||
+ | for i in range(len(h)): | ||
+ | t =[] | ||
+ | for j in range(len(l[0])): | ||
+ | t.append( h[i][j] - l[i][j]) | ||
+ | s.append(t) | ||
+ | return s | ||
+ | else: | ||
+ | print "Les tailles de vos matrices ne sont pas aqéquates" | ||
+ | |||
+ | | ||
+ | def Sum_matrix(h, | ||
+ | """ | ||
+ | if len(h)==len(l) and len(h[0])==len(l[0]): | ||
+ | s = [] | ||
+ | for i in range(len(h)): | ||
+ | t =[] | ||
+ | for j in range(len(l[0])): | ||
+ | t.append( h[i][j] + l[i][j]) | ||
+ | s.append(t) | ||
+ | return s | ||
+ | else: | ||
+ | print "Les tailles de vos matrices ne sont pas aqéquates" | ||
+ | |||
+ | |||
+ | def Mul_matrix(h, | ||
+ | """ | ||
+ | if len(h[0]) == len(l): | ||
+ | s = [] #nouvelle matrice retournée | ||
+ | for i in range(len(h)): | ||
+ | t = [] #création de ligne qu'on ajoutera ensuite à " | ||
+ | for j in range(len(l[0])): | ||
+ | res = 0 # résultat, chaque fois remis à 0 pour éviter des valeurs fausses | ||
+ | for k in range(len(h[0])): | ||
+ | res += h[i][k] * l[k][j] | ||
+ | t.append(res) | ||
+ | s.append(t) | ||
+ | return s | ||
+ | else: | ||
+ | print "Les tailles de vos matrices ne sont pas aqéquates" | ||
+ | | ||
+ | |||
+ | def opentop (): | ||
+ | """ | ||
+ | dim = entr1.get() | ||
+ | if is_number(dim) and float(dim) > 0: | ||
+ | fen02 = Tk() | ||
+ | fen02.title(" | ||
+ | var=IntVar() | ||
+ | | ||
+ | r1=Radiobutton(fen02, | ||
+ | r2=Radiobutton(fen02, | ||
+ | r3=Radiobutton(fen02, | ||
+ | r4=Radiobutton(fen02, | ||
+ | r5=Radiobutton(fen02, | ||
+ | r6=Radiobutton(fen02, | ||
+ | r7=Radiobutton(fen02, | ||
+ | r8=Radiobutton(fen02, | ||
+ | |||
+ | r1.grid(row=1, | ||
+ | r2.grid(row=2, | ||
+ | r3.grid(row=3, | ||
+ | r4.grid(row=4, | ||
+ | r5.grid(row=5, | ||
+ | r6.grid(row=6, | ||
+ | r7.grid(row=7, | ||
+ | r8.grid(row=8, | ||
+ | |||
+ | fen02.mainloop() | ||
+ | | ||
+ | else: | ||
+ | image = None #valeur nulle pour objets autres que des nombres | ||
+ | while not image: | ||
+ | entree = entr1.get() | ||
+ | image = is_number(entree) | ||
+ | fen01.mainloop() | ||
+ | return image | ||
+ | |||
+ | |||
+ | def affiche (): | ||
+ | fen03 = Tk() | ||
+ | fen03.title(' | ||
+ | ni=int(entr1.get()) | ||
+ | nj=int(entr1.get()) | ||
+ | for i in range (ni): | ||
+ | for j in range (nj): | ||
+ | entries=Entry(fen03) | ||
+ | entries.grid(row=i, | ||
+ | Zones1.append(entries) | ||
+ | bou3= Button (fen03, text=" | ||
+ | bou3.grid(row=i+1, | ||
+ | fen03.mainloop() | ||
+ | | ||
+ | def affiche1(): | ||
+ | fen03 = Tk() | ||
+ | fen03.title(' | ||
+ | ni=int(entr1.get()) | ||
+ | nj=int(entr1.get()) | ||
+ | for i in range (ni): | ||
+ | for j in range (nj): | ||
+ | entries=Entry(fen03) | ||
+ | entries.grid(row=i, | ||
+ | Zones4.append(entries) | ||
+ | bou3= Button (fen03, text=" | ||
+ | bou3.grid(row=i+1, | ||
+ | fen03.mainloop() | ||
+ | | ||
+ | def affiche2(): | ||
+ | fen03 = Tk() | ||
+ | fen03.title(' | ||
+ | ni=int(entr1.get()) | ||
+ | nj=int(entr1.get()) | ||
+ | for i in range (ni): | ||
+ | for j in range (nj): | ||
+ | entries=Entry(fen03) | ||
+ | entries.grid(row=i, | ||
+ | Zones2.append(entries) | ||
+ | bou3= Button (fen03, text=" | ||
+ | bou3.grid(row=i+1, | ||
+ | fen03.mainloop() | ||
+ | | ||
+ | def affiche3(): | ||
+ | fen03 = Tk() | ||
+ | fen03.title(' | ||
+ | ni=int(entr1.get()) | ||
+ | nj=int(entr1.get()) | ||
+ | for i in range (ni): | ||
+ | for j in range (nj): | ||
+ | entries=Entry(fen03) | ||
+ | entries.grid(row=i, | ||
+ | Zones3.append(entries) | ||
+ | bou3= Button (fen03, text=" | ||
+ | bou3.grid(row=i+1, | ||
+ | fen03.mainloop() | ||
+ | | ||
+ | def affiche4(): | ||
+ | fen03 = Tk() | ||
+ | fen03.title(' | ||
+ | ni=int(entr1.get()) | ||
+ | nj=int(entr1.get()) | ||
+ | for i in range (ni): | ||
+ | for j in range (nj): | ||
+ | entries=Entry(fen03) | ||
+ | entries.grid(row=i, | ||
+ | Zones5.append(entries) | ||
+ | bou3= Button (fen03, text=" | ||
+ | bou3.grid(row=i+1, | ||
+ | entr.append(fen03) | ||
+ | fen03.mainloop() | ||
+ | | ||
+ | def affiche5(): | ||
+ | fen03 = Tk() | ||
+ | fen03.title(' | ||
+ | ni=int(entr1.get()) | ||
+ | nj=int(entr1.get()) | ||
+ | for i in range (ni): | ||
+ | for j in range (nj): | ||
+ | entries=Entry(fen03) | ||
+ | entries.grid(row=i, | ||
+ | Zones6.append(entries) | ||
+ | bou3= Button (fen03, text=" | ||
+ | bou3.grid(row=i+1, | ||
+ | fen03.mainloop() | ||
+ | | ||
+ | def affiche6(): | ||
+ | fen03 = Tk() | ||
+ | fen03.title(' | ||
+ | ni=int(entr1.get()) | ||
+ | nj=int(entr1.get()) | ||
+ | for i in range (ni): | ||
+ | for j in range (nj): | ||
+ | entries=Entry(fen03) | ||
+ | entries.grid(row=i, | ||
+ | Zones7.append(entries) | ||
+ | bou3= Button (fen03, text=" | ||
+ | bou3.grid(row=i+1, | ||
+ | fen03.mainloop() | ||
+ | | ||
+ | def affiche7(): | ||
+ | fen03 = Tk() | ||
+ | fen03.title(' | ||
+ | ni=int(entr1.get()) | ||
+ | nj=int(entr1.get()) | ||
+ | for i in range (ni): | ||
+ | for j in range (nj): | ||
+ | entries=Entry(fen03) | ||
+ | entries.grid(row=i, | ||
+ | Zones8.append(entries) | ||
+ | bou3= Button (fen03, text=" | ||
+ | bou3.grid(row=i+1, | ||
+ | fen03.mainloop() | ||
+ | |||
+ | |||
+ | |||
+ | def det(): | ||
+ | s = [] | ||
+ | n =int(entr1.get()) | ||
+ | for i in range(n): | ||
+ | t = [] | ||
+ | for j in range(n): | ||
+ | t.append(float(Zones1[n*i+j].get())) | ||
+ | s.append(t) | ||
+ | fen04=Tk() | ||
+ | r = Det(s) | ||
+ | chaine2=Label (fen04, text= " | ||
+ | chaine2.grid() | ||
+ | |||
+ | def comatr (): | ||
+ | s = [] | ||
+ | n =int(entr1.get()) | ||
+ | for i in range(n): | ||
+ | t = [] | ||
+ | for j in range(n): | ||
+ | t.append(float(Zones4[n*i+j].get())) | ||
+ | s.append(t) | ||
+ | fen04=Tk() | ||
+ | r = Comat(s) | ||
+ | for i in range (len(r)): | ||
+ | for j in range (len(r[0])): | ||
+ | b = Label(fen04, | ||
+ | b.grid(row=i, | ||
+ | | ||
+ | def inv (): | ||
+ | s = [] | ||
+ | n =int(entr1.get()) | ||
+ | for i in range(n): | ||
+ | t = [] | ||
+ | for j in range(n): | ||
+ | t.append(float(Zones2[n*i+j].get())) | ||
+ | s.append(t) | ||
+ | fen04=Tk() | ||
+ | r = invmat(s) | ||
+ | if type(r) is str: | ||
+ | b = Label(fen04, | ||
+ | b.grid(row=i, | ||
+ | else: | ||
+ | for i in range (len(r)): | ||
+ | for j in range (len(r[0])): | ||
+ | b = Label(fen04, | ||
+ | b.grid(row=i, | ||
+ | | ||
+ | def transf(): | ||
+ | s = [] | ||
+ | n =int(entr1.get()) | ||
+ | for i in range(n): | ||
+ | t = [] | ||
+ | for j in range(n): | ||
+ | t.append(float(Zones3[n*i+j].get())) | ||
+ | s.append(t) | ||
+ | fen04=Tk() | ||
+ | r = Trans_matrix(s) | ||
+ | for i in range (len(r)): | ||
+ | for j in range (len(r[0])): | ||
+ | b = Label(fen04, | ||
+ | b.grid(row=i, | ||
+ | | ||
+ | def choix(): | ||
+ | fen04=Tk() | ||
+ | fen04.title(" | ||
+ | entr2=Entry(fen04) | ||
+ | entr2.grid(row=0, | ||
+ | entr.append(entr2) | ||
+ | bou5=Button (fen04, text = " | ||
+ | bou5.grid(row=1, | ||
+ | fen04.mainloop() | ||
+ | def mult(): | ||
+ | s = [] | ||
+ | n =int(entr1.get()) | ||
+ | a = entr[1].get() | ||
+ | if is_number(a): | ||
+ | for i in range(n): | ||
+ | t = [] | ||
+ | for j in range(n): | ||
+ | t.append(float(Zones5[n*i+j].get())) | ||
+ | s.append(t) | ||
+ | fen04=Tk() | ||
+ | r = Mul_coff(float(a), | ||
+ | for i in range (len(r)): | ||
+ | for j in range (len(r[0])): | ||
+ | b = Label(fen04, | ||
+ | b.grid(row=i, | ||
+ | else: | ||
+ | image = None | ||
+ | while not image: | ||
+ | entree = entr[1].get() | ||
+ | image = is_number(entree) | ||
+ | entr[0].mainloop() | ||
+ | return image | ||
+ | | ||
+ | def matrice2(): | ||
+ | fen04 = Tk() | ||
+ | fen04.title(' | ||
+ | ni=int(entr1.get()) | ||
+ | nj=int(entr1.get()) | ||
+ | for i in range (ni): | ||
+ | for j in range (nj): | ||
+ | entries=Entry(fen04) | ||
+ | entries.grid(row=i, | ||
+ | Zones9.append(entries) | ||
+ | bou4= Button (fen04, text=" | ||
+ | bou4.grid(row=i+1, | ||
+ | fen04.mainloop() | ||
+ | | ||
+ | def matrice3(): | ||
+ | fen04 = Tk() | ||
+ | fen04.title(' | ||
+ | ni=int(entr1.get()) | ||
+ | nj=int(entr1.get()) | ||
+ | for i in range (ni): | ||
+ | for j in range (nj): | ||
+ | entries=Entry(fen04) | ||
+ | entries.grid(row=i, | ||
+ | Zones10.append(entries) | ||
+ | bou4= Button (fen04, text=" | ||
+ | bou4.grid(row=i+1, | ||
+ | fen04.mainloop() | ||
+ | | ||
+ | def matrice4(): | ||
+ | fen04 = Tk() | ||
+ | fen04.title(' | ||
+ | ni=int(entr1.get()) | ||
+ | nj=int(entr1.get()) | ||
+ | for i in range (ni): | ||
+ | for j in range (nj): | ||
+ | entries=Entry(fen04) | ||
+ | entries.grid(row=i, | ||
+ | Zones11.append(entries) | ||
+ | bou4= Button (fen04, text=" | ||
+ | bou4.grid(row=i+1, | ||
+ | fen04.mainloop() | ||
+ | | ||
+ | def soust(): | ||
+ | s = [] | ||
+ | z = [] | ||
+ | n =int(entr1.get()) | ||
+ | for i in range(n): | ||
+ | t = [] #correspont à chacune des lignes de la matrice créée | ||
+ | p = [] #qu'on ajoute peu à peu à s pour construire la matrice | ||
+ | for j in range(n): | ||
+ | t.append(float(Zones6[n*i+j].get())) | ||
+ | p.append(float(Zones9[n*i+j].get())) | ||
+ | s.append(t) | ||
+ | z.append(p) | ||
+ | fen05=Tk() | ||
+ | r = Dif_matrix(s, | ||
+ | for i in range (len(r)): | ||
+ | for j in range (len(r[0])): | ||
+ | b = Label(fen05, | ||
+ | b.grid(row=i, | ||
+ | | ||
+ | def add(): | ||
+ | s = [] | ||
+ | z=[] | ||
+ | n =int(entr1.get()) | ||
+ | for i in range(n): | ||
+ | t = [] | ||
+ | p = [] | ||
+ | for j in range(n): | ||
+ | t.append(float(Zones7[n*i+j].get())) | ||
+ | p.append(float(Zones10[n*i+j].get())) | ||
+ | s.append(t) | ||
+ | z.append(p) | ||
+ | fen05=Tk() | ||
+ | r = Sum_matrix(s, | ||
+ | for i in range (len(r)): | ||
+ | for j in range (len(r[0])): | ||
+ | b = Label(fen05, | ||
+ | b.grid(row=i, | ||
+ | | ||
+ | def multip(): | ||
+ | s = [] | ||
+ | z=[] | ||
+ | n =int(entr1.get()) | ||
+ | for i in range(n): | ||
+ | t = [] | ||
+ | p = [] | ||
+ | for j in range(n): | ||
+ | t.append(float(Zones8[n*i+j].get())) | ||
+ | p.append(float(Zones11[n*i+j].get())) | ||
+ | s.append(t) | ||
+ | z.append(p) | ||
+ | fen05=Tk() | ||
+ | r = Mul_matrix(s, | ||
+ | for i in range (len(r)): | ||
+ | for j in range (len(r[0])): | ||
+ | b = Label(fen05, | ||
+ | b.grid(row=i, | ||
+ | | ||
+ | Zones = [] #tableau contenant des adresses memoires | ||
+ | Zones1 =[] #des positions des cases de la matrice sur la fenêtre | ||
+ | Zones2 =[] | ||
+ | Zones3 =[] | ||
+ | Zones4 =[] | ||
+ | Zones5 =[] | ||
+ | Zones6 =[] | ||
+ | Zones7 =[] | ||
+ | Zones8 =[] | ||
+ | Zones9 = [] | ||
+ | Zones10= [] | ||
+ | Zones11= [] | ||
+ | entr=[] | ||
+ | |||
+ | fen01 = Tk() | ||
+ | fen01.title(" | ||
+ | chaine1 = Label (fen01, text = " | ||
+ | chaine1.grid(row =0) | ||
+ | entr1= Entry(fen01) | ||
+ | entr1.grid(row =0, column =1) | ||
+ | bou1=Button(fen01, | ||
+ | bou1.grid(row=2, | ||
+ | fen01.mainloop() | ||
+ | |||
+ | </ |