résout le problème du réseau de tuyaux
[x,pi] = pipe_network(g)
graphe (liste)
vecteur ligne des valeurs des flots sur les arcs
vecteur ligne des potentiels sur les sommets
pipe_network
renvoie les valeurs des flots et
des potentiels pour le problème du réseau de tuyaux (problème de
flots avec deux lois de Kirchhoff). Le graphe doit être
orienté. Le problème doit être soluble (la somme des demandes
des sommets doit être égale à 0).
Les résistances sur les arcs sont données par le champ
g.edges.data.weight
de la structure de
graphe. S'il nest pas présent dans la structure de donnée ce
champ peut être ajouté et affecté par la fonction add_edge_data. Les valeurs des
résistances doivent être strictement positives.
Les demandes sur les noeuds sont données par le champ
g.nodes.data.demand
de la structure de
graphe. S'il nest pas présent dans la structure de donnée ce
champ peut être ajouté et affecté par la fonction add_node_data. La somme des
demandes des sommets doit être égale à 0.
Le problème est résolu à l'aide d'une factorisation LU creuse.
ta=[1 1 2 2 3 3 4 4 5 5 5 5 6 6 6 7 7 15 15 15 15 15 15 15 8 9 10 11 12 13 14]; he=[10 13 9 14 8 11 9 11 8 10 12 13 8 9 12 8 11 1 2 3 4 5 6 7 16 16 16 16 16 16 16]; g=make_graph('foo',1,16,ta,he); g.nodes.graphics.x=[42 615 231 505 145 312 403 233 506 34 400 312 142 614 260 257]; g.nodes.graphics.y=[143 145 154 154 147 152 157 270 273 279 269 273 273 274 50 376]; g.nodes.graphics.diam(15:16)=30; g=add_node_data(g,'demand',[0 0 0 0 0 0 0 0 0 0 0 0 0 0 -100 100]); w = [1 3 2 6 4 7 8 1 2 2 2 4 7 8 9 2 3 5 7 3 2 5 8 2 5 8 6 4 3 5 6]; g=add_edge_data(g,'weight',w); g.nodes.graphics.display='demand'; g.edges.graphics.display='weight'; show_graph(g); [x,pi] = pipe_network(g) g=add_edge_data(g,'flow',round(100*x)/100); g.edges.graphics.display='flow'; show_graph(g); | ![]() | ![]() |