2013-04-18 50 views
1

我使用Matlab的SimBiology工具箱生成biograph(它们只是图表)。Matlab SimBiology - 允许自我连接节点

当我试图包括连接到本身就是一个节点,例如:

g = [ 
     0 1 0; 
     1 0 1; 
     0 0 1; % This one connects to itself. 
    ] 

我得到以下警告消息:

Warning: Self connecting nodes are not allowed, ignoring the diagonal of CM. 

正如我的数据集,包括一些自我连接节点,我想知道这是否是一个可配置的功能。

谢谢!

+1

1:好问题。但大多数算法忽略自行循环...我想知道为什么你需要它们。 –

+0

@Eitan - 很高兴你问过!我的模型是科学期刊参考文献之间的关系。我图中的节点是科学期刊,jourA和jourB之间的有向顶点的权重是jourB必须记录的引用数量(例如 - 过去一年的所有文章)。正如一些文章引用发表在他们自己的杂志上的文章,我得到循环:)这确实可能不是传记的经典用法...... –

+0

据我所见,只要循环不是自发的,循环,因为自循环意味着顶点指向自身。在你的情况下,这不可能发生,因为一篇文章不能引用它自己。我对吗? –

回答

2

不幸的是,自传不能有自连接的边缘。如果您的目的仅用于可视化,则可以添加一些带有空标签的节点。这里是一个小的图形和两个自连接节点的示例:

cm = [0 1 1 0 0;1 0 0 1 1;1 0 1 0 0;0 0 0 0 1;1 0 1 0 1]; 
ids = {'M30931','L07625','K03454','M27323','M15390'}; 

sc = find(diag(cm)); 
cm = cm-diag(diag(cm)); 
n = size(cm,1); 
m = numel(sc); 
cm(n+m,n+m)=0; 
cm(sub2ind([n+m,n+m],[sc;(1:m)'+n],[(1:m)'+n;sc]))=1; 
ids((1:m)+n) = {' '}; 

bg = biograph(cm); 
for i = 1:numel(bg.Nodes) 
    bg.Nodes(i).Label = ids{i}; 
    if i>n 
     bg.Nodes(i).Shape = 'circle'; 
    end 
end 
view(bg) 

HTH 卢西奥