Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function circuit(s, t, E)
- % numeracja rezystorow wedle kolejnosci na wejsciu
- % zalozenie, ze zaden nie zostanie podany dwa razy
- A = importdata('graf.txt');
- [t1, ~] = size(A);
- A(t1+1,1) = s;
- A(t1+1,2) = t;
- A(t1+1,3) = -1 * abs(E);
- [x1, ~] = size(A);
- numG = 0; % liczba wierzcholkow
- for i=1:x1
- for j=1:2
- numG = max(numG, A(i,j));
- end
- end
- % G(i,j) - opory pomiedzy punktami (i,j)
- G = zeros(numG, numG);
- % gr = graph;
- % wczytanie danych do macierzy sasiedztw wazonych
- for i=1:x1
- G(A(i,1), A(i,2)) = A(i,3);
- G(A(i,2), A(i,1)) = A(i,3);
- % gr = addedge(gr, A(i,1), A(i,2), A(i,3));
- end
- % plot(gr);
- disp(G);
- mI = [];
- mE = [];
- for i=1:numG
- if i ~= s && i ~= t
- for j=1:numG
- % prad plynie z mniejszego numerem wezla do wiekszego
- % numerem wezla
- if G(i,j) > 0
- if j>i
- mI(i,edge_id(A,i,j)) = 1; % G(i,j);
- else
- mI(i,edge_id(A,i,j)) = -1 % * G(i,j);
- end
- mE(i) = 0;
- end
- end
- end
- end
- disp(mI);
- disp(mE);
- edgeMap = A( : , 1:2 );
- cyclelist = searchCycles(edgeMap);
- cyclecount = length(cyclelist);
- [offset, ~] = size(mI);
- for i=1:cyclecount
- mE(i+offset) = 0;
- for j=1:length(cyclelist{i})
- path = cyclelist{i};
- first_node = path(j);
- if j == length(cyclelist{i})
- second_node = path(1); % zawrotka na poczatek listy
- else
- second_node = path(j+1);
- end
- if G(first_node,second_node) > 0
- if second_node>first_node
- mI(i+offset,edge_id(A,first_node,second_node)) = G(first_node,second_node);
- else
- mI(i+offset,edge_id(A,first_node,second_node)) = -1 * G(first_node,second_node);
- end
- end
- if G(first_node,second_node) < 0
- if first_node == s
- mE(i+offset) = E;
- else
- mE(i+offset) = -E;
- end
- end
- end
- end
- [XX, R] = linsolve(mI, mE.');
- XX
- circ = graph;
- for i=1:t1
- circ = addedge(circ, A(i,1), A(i,2), abs(XX(i)));
- end
- % krawedz nie moze miec grubosci zero, stad 1e-10 dodane do kazdej
- % grubosci krawedzi
- LWidths = 5*(circ.Edges.Weight+1e-10)/max(circ.Edges.Weight);
- plot(circ,'EdgeLabel',circ.Edges.Weight,'LineWidth',LWidths)
- end
Add Comment
Please, Sign In to add comment