?????????????? ?????? ? ????????? ?????????? ??????? ?????
?????????????? ?????? ? ????????? ?????????? ??????? ?????
?????????????? ?????? ? ????????? ?????????? ??????? ?????
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