2013-04-18 48 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 盧西奧