13.08.2013 Views

?????????????? ?????? ? ????????? ?????????? ??????? ?????

?????????????? ?????? ? ????????? ?????????? ??????? ?????

?????????????? ?????? ? ????????? ?????????? ??????? ?????

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

he=[3 2 2 4 1 1 ]; // конечные узлы ветвей, по порядку, начиная с 1-й ветви<br />

maxv=max(ta); // определение максимального номера узла<br />

g = make_graph('cep1',1,maxv,ta,he); //создание направленного графа<br />

g1= make_graph('cep2',0,maxv,ta,he); //создание ненаправленного графа<br />

g('node_x') = [200 100 150 250 ]; //ввод х-координат узлов<br />

g('node_y') = [200 200 100 100 ]; //ввод у-координат узлов<br />

show_graph(g); //отображение графа<br />

a=graph_2_mat(g,'node−arc'); //формирование ненулевых элементов узловой матрицы<br />

A=full(a); //формирование полной формы узловой матрицы<br />

node = node_number(g); // определение числа узлов графа<br />

t=min_weight_tree(node,g1); //формирование дерева графа<br />

arc = arc_number(g); //определение числа ветвей графа<br />

at(1:node−1, 1:arc)=A(1:node−1, : ); // узловая часть расширенной матрицы Аt<br />

hord=setdiff(1:arc, t); //формирование списка хорд<br />

size_hord = size(hord); // определение числа хорд<br />

for i=1:size_hord(2) at(node−1+i,hord(i))=1; end; //формирование полной матрицы Аt<br />

at //вывод матрицы Аt в диалоговое окно Scilab<br />

c=at^(-1) //вычисление и вывод матрицы С в диалоговое окно Scilab<br />

Для введенного графа сформированные матрицы Аt и С получились следующими:<br />

2<br />

1<br />

3<br />

2<br />

3<br />

1<br />

4<br />

5<br />

6<br />

4<br />

Аt=<br />

! 0. 0. 1. 0. - 1. - 1. !<br />

! 1. - 1. - 1. 0. 0. 0. !<br />

! - 1. 1. 0. 1. 0. 0. !<br />

! 0. 1. 0. 0. 0. 0. !<br />

! 0. 0. 0. 1. 0. 0. !<br />

! 0. 0. 0. 0. 0. 1. !<br />

C=<br />

! 0. 0. - 1. 1. 1. 0. !<br />

! 0. 0. 0. 1. 0. 0. !<br />

! 0. - 1. - 1. 0. 1. 0. !<br />

! 0. 0. 0. 0. 1. 0 !<br />

! - 1. - 1. - 1. 0. 1. - 1. !<br />

! 0. 0. 0. 0. 0. 1. !<br />

Как видно из полученных результатов, программа сформировала другой<br />

состав матриц. Это связано с тем, что количество вариантов построения<br />

дерева и соответственно контуров, может быть достаточно<br />

большим. Выбор того или иного варианта определяется особенностями<br />

алгоритма, в данном случае встроенной функцией построения дерева<br />

пакета SciLab: min_weight_tree. В любом случае проверить правильность<br />

сформированных матриц можно косвенно, результат умножения С на Аt<br />

должен дать единичную матрицу: С·Аt=1.<br />

Построить дерево можно отдельным алгоритмом, приведенным ниже.<br />

Данный SciLab-алгоритм является модификацией фортрановской программы,<br />

приведенной в [12]. Исходными данными являются два списка:<br />

ta – список начальных узлов ветвей и he – список конечных узлов ветвей.<br />

clear ;<br />

ta= [2 3 1 3 4 4 ]; // начальные узлы ветвей, по порядку, начиная с 1-й ветви<br />

he=[3 2 2 4 1 1 ]; // конечные узлы ветвей, по порядку, начиная с 1-й ветви<br />

//определение размеров массивов<br />

razmer = size( ta); JKV= razmer (2);<br />

max1=max( ta); max2=max(he); KP=max(max1,max2);<br />

IW=KP+2 *JKV; NEXT(IW)=0;<br />

64

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!