⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fun_sigma.asv

📁 无标度网络的生成模型
💻 ASV
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%计算优化影响因子sigma,这里可以计算无向图的Sigma,但是不能计算有向图的
%% 输入:网络G=(V,E),ni个节点,m条边; 网络内各个节点的质量(向量)
%% 输出:二维矩阵,【熵,影响因子】
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [Flt_H] = Fun_Sigma( Relation, Lin_Mass)

%% 转换成0表示两个节点之间没有连边
Int_Num = size(Relation ,1);
Net =Relation;
for i=1:Int_Num
    for j= 1: Int_Num
        if Relation(i, j) == Inf
            Net(i,j) = 0;
        end 
    end 
end 

%% 计算图中各个节点的度,得到一个行向量
Row_Degree =  sum( Net, 1);

%%计算图的距离矩阵
Net = Fun_Distance (Relation);

%%各个节点的质量设为1,影响范围为所有的节点都有影响。
% Lin_Mass = ones(1,Int_Num);
Num_EffectRange = Inf;
Sigma= 0.002;
j=1;
while Sigma < 10   %%算到Sigma<6就可以了,如果需要画图,再多算一点。
for i = 1: Int_Num
   Lin_H(i) = Fun_ComputePotential (Mat_Distance(:),i, Sigma, Lin_Mass,Num_EffectRange); 
   %(距离行向量,需要计算的目的节点号,影响因子,质量向量,影响范围)
end  
Flt_H(j,1)= Fun_H(Lin_H);  
Flt_H(j,2)=Sigma;
j=j+1;
Sigma= Sigma+0.01;
end 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 计算图中某一某一节点i的势函数
%%输入:距离矩阵的第i行Mat_DistanceLine, 节点总数Num_Node, 需要计算的节点i——Num_ObjectNode,
%%影响因子Num_Sigma,质量矩阵Mat_Mass, 有效值范围 Num_EffectRange;
%%输出:图中节点i的势值;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [Num_ObjectNodePotential] = Fun_ComputePotential (Mat_DistanceLine, Num_ObjectNode, Num_Sigma,Lin_Mass,Num_EffectRange)


%%对变量进行初始化;
Num_Node = size( Mat_DistanceLine, 2);
Num_ObjectNodePotential = 0;
Num_line = Num_Node;
Lin_ObjectNodePotentail = zeros(1,Num_line);


    %%%%%%%%%%%%%%%%% 计算单个节点对目标节点产生的势值,并将其存入临时矩阵中
for i = 1:Nodes
    
    %% 若节点与目标节点之间的距离大于制定影响范围,则对该节点产生的势值为0,否则计算对该节点的势值
    if Mat_DistanceLine( i) > Num_EffectRange
       Lin_ObjectNodePotential( i) = 0;
    else
        Num_AMidValue = Mat_DistanceLine( i)  / Num_Sigma; 
        Lin_ObjectNodePotential( i) = Lin_Mass(i)* exp( (-1) * Num_AMidValue * Num_AMidValue);
    end
end 

for i = 1 : Nodes
    Num_ObjectNodePotential = Num_ObjectNodePotential + Lin_ObjectNodePotential( i);
end        
    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 该函数计算图 点i到到点j的最短路径
%%输入:图的链接矩阵;
%%输出:距离矩阵
%%By Xiao Lp, 2007-07-06
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [b] = Fun_Distance(Edge);

N=size(Edge,1); %%节点个数

%%floyd 
b=Edge+Edge';
path=zeros(length(b));

for k=1:N
   for i=1:N
      for j=1:N
         if b(i,j)>b(i,k)+b(k,j)
            b(i,j)=b(i,k)+b(k,j);
            path(i,j)=k;
         end
      end
   end
end

b=b/2;

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %% 计算势熵H
% %% 输入:势向量
% %% 输出:势熵
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 function [Flt_H] = Fun_H( Lin_Potential)

Int_Num = size(Lin_Potential ,2);
Flt_Z= 0;

%%计算归一化因子Z——Flt_Z
for i = 1:Int_Num
    Flt_Z = Lin_Potential(i) + Flt_Z;
end 

Lin_H = zeros(1,Int_Num);
Flt_H = 0;
for i = 1:Int_Num
    Lin_H(i) = (-1) * (Lin_Potential(i) / Flt_Z) * log( Lin_Potential(i) / Flt_Z);
end
for  i = 1:Int_Num
    Flt_H = Flt_H + Lin_H(i);
end 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -