DawidS28

circuit.m

Mar 20th, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.86 KB | None | 0 0
  1. function circuit(s, t, E)
  2.  
  3.     % numeracja rezystorow wedle kolejnosci na wejsciu
  4.     % zalozenie, ze zaden nie zostanie podany dwa razy
  5.    
  6.     A = importdata('graf.txt');
  7.     [t1, ~] = size(A);
  8.     A(t1+1,1) = s;
  9.     A(t1+1,2) = t;
  10.     A(t1+1,3) = -1 * abs(E);
  11.    
  12.     [x1, ~] = size(A);
  13.    
  14.     numG = 0; % liczba wierzcholkow
  15.    
  16.     for i=1:x1
  17.         for j=1:2
  18.             numG = max(numG, A(i,j));
  19.         end
  20.     end
  21.    
  22.     % G(i,j) - opory pomiedzy punktami (i,j)
  23.     G = zeros(numG, numG);
  24.    
  25.     % gr = graph;
  26.  
  27.     % wczytanie danych do macierzy sasiedztw wazonych
  28.     for i=1:x1
  29.         G(A(i,1), A(i,2)) = A(i,3);
  30.         G(A(i,2), A(i,1)) = A(i,3);
  31.         % gr = addedge(gr, A(i,1), A(i,2), A(i,3));
  32.     end
  33.    
  34.     % plot(gr);
  35.    
  36.     disp(G);
  37.    
  38.     mI = [];
  39.     mE = [];
  40.    
  41.     for i=1:numG
  42.         if i ~= s && i ~= t
  43.             for j=1:numG
  44.                 % prad plynie z mniejszego numerem wezla do wiekszego
  45.                 % numerem wezla
  46.                 if G(i,j) > 0
  47.                     if j>i
  48.                         mI(i,edge_id(A,i,j)) = 1; % G(i,j);
  49.                     else
  50.                         mI(i,edge_id(A,i,j)) = -1 % * G(i,j);
  51.                     end
  52.                     mE(i) = 0;
  53.                 end
  54.             end
  55.         end
  56.     end
  57.    
  58.     disp(mI);
  59.     disp(mE);
  60.    
  61.     edgeMap = A( : , 1:2 );
  62.     cyclelist = searchCycles(edgeMap);
  63.    
  64.     cyclecount = length(cyclelist);
  65.  
  66.     [offset, ~] = size(mI);
  67.    
  68.     for i=1:cyclecount
  69.         mE(i+offset) = 0;
  70.        
  71.         for j=1:length(cyclelist{i})
  72.             path = cyclelist{i};
  73.             first_node = path(j);
  74.             if j == length(cyclelist{i})
  75.                 second_node = path(1); % zawrotka na poczatek listy
  76.             else
  77.                 second_node = path(j+1);
  78.             end
  79.            
  80.             if G(first_node,second_node) > 0
  81.                  if second_node>first_node
  82.                     mI(i+offset,edge_id(A,first_node,second_node)) = G(first_node,second_node);
  83.                  else
  84.                     mI(i+offset,edge_id(A,first_node,second_node)) = -1 * G(first_node,second_node);
  85.                  end
  86.             end
  87.            
  88.             if G(first_node,second_node) < 0
  89.                 if first_node == s
  90.                     mE(i+offset) = E;
  91.                 else
  92.                     mE(i+offset) = -E;
  93.                 end
  94.             end
  95.         end
  96.     end
  97.    
  98.     [XX, R] = linsolve(mI, mE.');
  99.     XX
  100.  
  101.     circ = graph;
  102.    
  103.     for i=1:t1
  104.         circ = addedge(circ, A(i,1), A(i,2), abs(XX(i)));
  105.     end
  106.    
  107.     % krawedz nie moze miec grubosci zero, stad 1e-10 dodane do kazdej
  108.     % grubosci krawedzi
  109.    
  110.     LWidths = 5*(circ.Edges.Weight+1e-10)/max(circ.Edges.Weight);
  111.     plot(circ,'EdgeLabel',circ.Edges.Weight,'LineWidth',LWidths)
  112. end
Add Comment
Please, Sign In to add comment