日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

复杂网络MATLAB工具箱

發布時間:2023/12/9 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 复杂网络MATLAB工具箱 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
冪律分布: 連續型:以f(x)表示某一數量指標的發生次數,若f(x)=f(x)-a,就稱為冪律分布。 離散型:若p(k)為離散型隨機變量的概率分布,若p(k)~ck-(a+1),則稱p(k)為冪律分布。 p(k)=c/k-a, logp(k)=logc-alogk 在雙對數坐標系下,該分部呈現為一條斜率為負冪指數的直線。 基本規律總結起來:只有少數節點才會被經常使用,大部分的節點很少被使用。 一個網絡的度分布服從冪律分布,直觀上看就是少部分節點度極大,與許多節點相連,而大部分節點度都比較小,這種網絡就叫做無標度網絡
復雜網絡MATLAB工具包
http://www.levmuchnik.net/常用的一些關于復雜網絡的MATLAB程序。 http://www.levmuchnik.net/Content/Networks/NetworkPackageTutorial.html?復雜網絡包的教程 http://www.levmuchnik.net/Content/Networks/ComplexNetworksPackage.html#Download? 復雜網絡MATLAB工具包的下載

教程1:
http://www.levmuchnik.net/Content/Networks/Tutorials/Tutorial_1/NetworkPackageTutorial_1.html
展示了如何生成一個隨機無標度網絡圖,基本結構分析,包括度分布、聚類系數等。觀察兩種類型的攻擊對網絡的影響:隨機攻擊(所有的幾點有相同的概率從網絡中刪除)、有目標地選擇連接度最大的節點(節點度最大的節點從網絡中刪除)。 第二中情況下,網絡幾乎很快崩潰,第一種情況好一些。
教程1的相關MATLAB程序:
%%?Tutorial?01 %?The?following?scripts?is?a?first?phase?of?the?Complex?Networks?Package?tutorial. %?It?demonstrates?genration?of?random?scale-free?network?and?some?basic?analysis?of?it.
%%?Genrate?the?network:生成一個網絡 NumberOfNodes?=?10000;?%?Number?of?nodes節點的個數 Alpha?=?-2.2;???%?Alpha?of?the?scale-free?graph無標度網絡的冪律指數 %define?node?degree?distribution:定義節點度分布 XAxis??=?unique(round(logspace(0,log10(NumberOfNodes),25))); YAxis??=?unique(round(logspace(0,log10(NumberOfNodes),25))).^(Alpha+1); %?create?the?graph?with?the?required?node?degree?distribution:根據所需節點度分布創建 Graph?=?mexGraphCreateRandomGraph(NumberOfNodes,XAxis,YAxis,1);

%%?Some?basic?statistics:一些基本特性
%Number?of?nodes?in?graph:圖的節點的個數 disp(sprintf('Number?of?Nodes:?%d',GraphCountNumberOfNodes(Graph))); %Number?of?links?in?graph:圖的連邊的個數 disp(sprintf('Number?of?Links:?%d',GraphCountNumberOfLinks(Graph))); %Average?degree:平均度 Degrees?=?GraphCountNodesDegree(Graph); disp(sprintf('Average?Node?Degree:?%2.2f',mean(Degrees(:,2)))); %Find?fraction?of?reciprocal?links:找出相互連接的部分 Reciprocal?=?GraphCountUnderectionality(Graph); disp(sprintf('Fraction?of?reciprocal?links:?%2.2f%%',Reciprocal.DoubleConnectivityFraction*100)); %?Clustering?coefficient:聚類系數 CC?=?mexGraphClusteringCoefficient(Graph); disp(sprintf('Average?Clustering?Coefficient:?%3.3f%%',CC.C));
%%?Node?Degree?Distribution:度分布(度分布是復雜網絡的最重要的一個需要分析的屬性) h1?=?figure; %?incoming:入度 [y?x]?=?hist(Degrees(:,2),unique(Degrees(:,2))); loglog(x,y/sum(y),'*r'); hold?on %?outgoing:出度 [y?x]?=?hist(Degrees(:,3),unique(Degrees(:,3))); loglog(x,y/sum(y),'dg'); %?expected?distribution:預期的分布 loglog(XAxis,YAxis/sum(YAxis),':b');
xlabel('k,Degree'); ylabel('P(k)'); title('Node?Degree?Distribution'); legend({'Incoming','Outgoing','Expected'});
%%??Clustering?Coefficient?Distribution:聚類系數分布(高聚類特性是現實世界中無標度網絡的另一個重要特性) h2=?figure; %?direct CCin?=?mexGraphClusteringCoefficient(Graph,[],'direct'); [y?x]?=?hist(CCin.NodeClusteringCoefficient,linspace(0,1,25)); plot(x(x>0),y(x>0)/sum(y),'*r'); hold?on; %?inverse CCout?=?mexGraphClusteringCoefficient(Graph,[],'inverse'); [y?x]?=?hist(CCout.NodeClusteringCoefficient,linspace(0,1,25)); plot(x(x>0),y(x>0)/sum(y),'dg') xlabel('CC,?clustering?coefficient'); ylabel('P(CC)'); title('Clustering?coefficient?distribution?(CC>0)'); legend({'Direct','Inverse'}); %%??Clustering?Coefficient?Dependence?of?Degree:聚類系數與度之間的關系(一個節點的聚類系數和節點度之間有什么關系?節點的平均聚類系數與度之間的關系分析) h3?=?figure; %?direct loglog(CCin.k,CCin.Ck,'*r'); hold?on; %?inverse loglog(CCout.k,CCout.Ck,'dg');
xlabel('k,?Degree'); ylabel('<CC(k)>,?clustering?coefficient'); title('Average?clustering?coefficient?as?a?function?of?degree'); legend({'Direct','Inverse'});
%%?Components組件(找出所有的強連接組件,) %?remove?random?node?untill?the?graph?breaks?apart:隨機刪除節點直到圖分裂

%%? TempGraph=Graph; NodesToRemovePerStep?=1; NumbersOfNodes?=?[]; NumbersOfLinks?=?[]; NumbersOfComponents?=?[]; LargestClusterSizes?=?[]; SecondLargestClusterSizes?=?[];
RemainingNodes?=?1:NumberOfNodes;
while?~isempty(RemainingNodes) ????NodeIndecesToRemove?=?unique(round(rand(NodesToRemovePerStep,1)*(numel(RemainingNodes)-1))+1); ????NodesToRemove?=?RemainingNodes(NodeIndecesToRemove); ????RemainingNodes?=?setdiff(RemainingNodes,NodesToRemove); ????TempGraph?=?mexGraphNodeRemove(TempGraph,NodesToRemove); ????NumbersOfNodes(end+1)?=?GraphCountNumberOfNodes(TempGraph); ????NumbersOfLinks(end+1)?=?GraphCountNumberOfLinks(TempGraph); ????if?NumbersOfLinks(end)>0 ????????Components?=?mexGraphConnectedComponents(TempGraph); ????????NumbersOfComponents(end+1)?=?numel(Components); ????????ComponentsSizes?=?sort(cellfun('length',Components),'descend');???????? ????????if?~isempty(ComponentsSizes) ????????????LargestClusterSizes(end+1)?=?ComponentsSizes(1); ????????else ????????????LargestClusterSizes(end+1)?=?0; ????????end ????????if?numel(ComponentsSizes)>1 ????????????SecondLargestClusterSizes(end+1)?=?ComponentsSizes(2); ????????else ????????????SecondLargestClusterSizes(end+1)?=?0; ????????end ????else ????????NumbersOfComponents(end+1)?=?0; ????????LargestClusterSizes(end+1)?=?0; ????????SecondLargestClusterSizes(end+1)?=?0; ????end end h4?=?figure; plot(NumbersOfComponents,'r'); hold?on; h5?=?figure; plot(NumbersOfNodes,'r'); hold?on; h6?=?figure; plot(NumbersOfLinks,'r'); hold?on; h7?=?figure; plot(SecondLargestClusterSizes,'r'); hold?on; h8=figure; plot(LargestClusterSizes,'r'); hold?on;
%%?remove?most?connected?nodes?(with?heighest?outgoing?degree):刪除出度最大的節點 TempGraph=Graph; NodesToRemovePerStep?=1; NumbersOfNodes?=?[]; NumbersOfLinks?=?[]; NumbersOfComponents?=?[]; LargestClusterSizes?=?[]; SecondLargestClusterSizes?=?[];
RemainingNodes?=?1:NumberOfNodes;
while?~isempty(TempGraph.Data) ????Degrees?=?GraphCountNodesDegree(TempGraph); ????[OutDegrees?SortOrder]=sort(?Degrees(:,3),'descend'); ????NodesToRemove?=?Degrees(SortOrder(1:min([numel(SortOrder)?NodesToRemovePerStep]))); ????TempGraph?=?mexGraphNodeRemove(TempGraph,NodesToRemove); ????NumbersOfNodes(end+1)?=?GraphCountNumberOfNodes(TempGraph); ????NumbersOfLinks(end+1)?=?GraphCountNumberOfLinks(TempGraph); ????if?NumbersOfLinks(end)>0 ????????Components?=?mexGraphConnectedComponents(TempGraph); ????????NumbersOfComponents(end+1)?=?numel(Components); ????????ComponentsSizes?=?sort(cellfun('length',Components),'descend'); ????????if?~isempty(ComponentsSizes) ????????????LargestClusterSizes(end+1)?=?ComponentsSizes(1); ????????else ????????????LargestClusterSizes(end+1)?=?0; ????????end ????????if?numel(ComponentsSizes)>1 ????????????SecondLargestClusterSizes(end+1)?=?ComponentsSizes(2); ????????else ????????????SecondLargestClusterSizes(end+1)?=?0; ????????end ????else ????????NumbersOfComponents(end+1)?=?0; ????????LargestClusterSizes(end+1)?=?0; ????????SecondLargestClusterSizes(end+1)?=?0; ????end end figure(h4) plot(NumbersOfComponents,'g'); xlabel('Step'); ylabel('Number?of?components'); legend({'Random','Targeted'}); figure(h5) plot(NumbersOfNodes,'g'); xlabel('Step'); ylabel('Number?of?Nodes'); legend({'Random','Targeted'}); figure(h6) plot(NumbersOfLinks,'g'); xlabel('Step'); ylabel('Number?of?Links'); legend({'Random','Targeted'}); figure(h7); plot(SecondLargestClusterSizes,'g'); xlabel('Step'); ylabel('Cluster?Size'); title('Size?of?SECOND?largest?cluster'); legend({'Random','Targeted'}); figure(h8); plot(LargestClusterSizes,'g'); xlabel('Step'); ylabel('Cluster?Size'); title('Size?of?largest?cluster'); legend({'Random','Targeted'});
運行教程1的MATLAB程序: 圖1:Node Degree Distribution度分布

圖2:聚類系數分布

圖3:聚類系數的依賴度
圖4:大量的集群出現相變 圖5:節點的數量的變化 圖6:連邊的數量的變化 圖7:第二大集群的峰值表明相變 圖8:最大聚類的規模的變化

教程2: Susceptible-Infected model(SI模型) http://www.levmuchnik.net/Content/Networks/Tutorials/Tutorial_2/NetworkPackageTutorial_2.html


總結

以上是生活随笔為你收集整理的复杂网络MATLAB工具箱的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。