-
Notifications
You must be signed in to change notification settings - Fork 0
/
Structures_N.py
60 lines (48 loc) · 1.9 KB
/
Structures_N.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/python
###############################################################################
# #
# STRUCTURES DE DONNEES NECESSAIRES A LA RESOLUTION DES EQUATIONS DU RESEAU #
# #
# Structures_N : matrices normales #
# #
###############################################################################
# Matrices issues de la topologie du reseau
#
# A : matrice d'incidence noeuds-arcs du graphe : M(m,n)
# Ar : sous-matrice de A correspondant aux reservoirs : M(mr,n)
# Ad : sous-matrice complementaire de Ar pour A : M(md,n)
# AdT : plus grande sous-matrice carree inversible de Ad : M(md,md)
# AdI : matrice inverse de AdT : M(md,md)
# AdC : sous-matrice complementaire de AdT pour Ad : M(md,n-md)
# B : matrice d'incidence arcs-cycles du graphe : M(n,n-md)
#
# Debit admissible
#
# q0 : vecteur des debits admissibles des arcs : M(n,1)
from numpy import dot
from numpy import eye
from numpy import zeros
from numpy.linalg import inv
##### Probleme_R : probleme realiste
from Probleme_R import *
##### Matrice d'incidence et sous-matrices associees
# Matrice d'incidence noeuds-arcs du graphe
A = zeros((m, n))
for i in range(m):
A[i, orig == i] = -1
A[i, dest == i] = +1
# Partition de A suivant le type des noeuds
Ar = A[:mr,:]
Ad = A[mr:m,:]
# Sous-matrice de Ad associee a un arbre et inverse
AdT = Ad[:,:md]
AdI = inv(AdT)
# Sous matrice de Ad associee a un coarbre
AdC = Ad[:,md:n]
# Matrice d'incidence arcs-cycles
B = zeros((n, n-md))
B[:md,:] = -dot(AdI, AdC)
B[md:,:] = eye(n-md)
##### Vecteur des debits admissibles
q0 = zeros(n)
q0[:md] = dot(AdI,fd)