当前位置:网站首页>【數模】Matlab allcycles()函數的源代碼(2021a之前版本沒有)
【數模】Matlab allcycles()函數的源代碼(2021a之前版本沒有)
2022-07-07 04:40:00 【Dream of Grass】
Matlaballcycles()
函數的源代碼
在之前的這篇博文裏用程序求出有向圖的所有有向圈(有向環)並可視化中用到了一個allcycles
函數,這個函數只有2021a才有,如果matlab版本不高就用不了這個函數,所以為了方便大家使用,我把allcycles
的內置函數找到然後分享給大家。
function [cycles, edgecycles] = allcycles(G, varargin)
% ALLCYCLES Compute all cycles in digraph
% CYCLES = ALLCYCLES(G) computes all the cycles in digraph G. CYCLES is a
% cell array in which CYCLES{
i} is a vector of numeric node IDs (if G
% does not have node names) or a cell array of character vectors (if G
% has node names). Each cycle in CYCLES begins with the smallest node
% index. If G is acyclic, then CYCLES is empty. The cycles are in
% lexicographical order.
%
% [CYCLES, EDGECYCLES] = ALLCYCLES(G) also returns a cell array
% EDGECYCLES in which EDGECYCLES{
i} contains the edges on the cycle
% CYCLES{
i} of G.
%
% [...] = ALLCYCLES(G, Name, Value) specifies one or more additional
% options using name-value pair arguments. The available options are:
%
% 'MaxNumCycles' - A scalar that specifies the maximum number
% of cycles in the output.
% 'MaxCycleLength' - A scalar that specifies the maximum cycle
% length of cycles in the output.
% 'MinCycleLength' - A scalar that specifies the minimum cycle
% length of cycles in the output.
%
% See also ISDAG, HASCYCLES, CYCLEBASIS, ALLPATHS
% Copyright 2020-2021 The MathWorks, Inc.
%
% Reference:
% Johnson, Donald B. "Finding all the elementary circuits of a directed
% graph." SIAM Journal on Computing 4.1 (1975): 77-84.
[maxNumCycles, maxCycleLength, minCycleLength] = parseInputs(varargin{
:});
if maxCycleLength < minCycleLength
cycles = cell(0, 1);
edgecycles = cell(0, 1);
return
end
try
if nargout < 2
cycles = allSimpleCycles(G.Underlying, maxNumCycles, maxCycleLength,...
minCycleLength);
else
[cycles, edgecycles] = allSimpleCycles(G.Underlying, maxNumCycles,...
maxCycleLength, minCycleLength);
end
catch e
if e.identifier == "MATLAB:nomem"
error(message('MATLAB:graphfun:allcycles:nomem'));
else
rethrow(e);
end
end
[names, hasNodeNames] = getNodeNames(G);
names = names.';
if hasNodeNames
for i = 1:size(cycles, 1)
cycles{
i} = names(cycles{
i});
end
end
end
function [maxNumCycles, maxCycleLength, minCycleLength] = parseInputs(varargin)
names = {
'MaxNumCycles', 'MaxCycleLength', 'MinCycleLength'};
maxNumCycles = Inf;
maxCycleLength = Inf;
minCycleLength = 1;
for i = 1:2:numel(varargin)
opt = validatestring(varargin{
i}, names);
if i+1 > numel(varargin)
error(message('MATLAB:graphfun:allcycles:KeyWithoutValue', opt));
end
switch opt
case 'MaxNumCycles'
maxNumCycles = varargin{
i+1};
validateattributes(maxNumCycles, {
'numeric'}, {
'scalar', 'real', 'nonnegative', 'integer'}, '', 'MaxNumCycles')
case 'MaxCycleLength'
maxCycleLength = varargin{
i+1};
validateattributes(maxCycleLength, {
'numeric'}, {
'scalar', 'real', 'positive', 'integer'}, '', 'MaxCycleLength')
case 'MinCycleLength'
minCycleLength = varargin{
i+1};
validateattributes(minCycleLength, {
'numeric'}, {
'scalar', 'real', 'positive', 'integer'}, '', 'MinCycleLength')
end
end
end
做一點點小說明
計算有向圖中的所有周期
CYCLES
= ALLCYCLES
(G
)計算有向圖G中的所有周期
單元格數組,其中CYCLES
{ i
}是一個數值節點id的向量(如果G
沒有節點名稱)或字符向量的單元格數組(如果G
節點名稱)。 CYCLES
中的每個周期都從最小的節點開始
索引。 如果G是無環的,那麼CYCLES為空。 周期在
辭典編纂的秩序。
[CYCLES
, EDGECYCLES
] = ALLCYCLES
(G
)也返回一個單元格數組
EDGECYCLES
,其中EDGECYCLES
{ i
}包含循環上的邊
周期{我}的G。
[… = ALLCYCLES
(G
, Name
, Value
)指定一個或多個附加值
使用名稱-值對參數的選項。 可用選項有:
MaxNumCycles
-一個指定最大數目的標量
輸出的周期。
MaxCycleLength
-一個指定最大周期的標量
輸出中的周期長度。
MinCycleLength
-一個指定最小周期的標量
輸出中的周期長度。
边栏推荐
- C#使用西门子S7 协议读写PLC DB块
- 组织实战攻防演练的5个阶段
- Vscode 如何使用内置浏览器?
- 案例大赏:英特尔携众多合作伙伴推动多领域AI产业创新发展
- 一度辍学的数学差生,获得今年菲尔兹奖
- 接口自动化测试实践指导(中):接口测试场景有哪些
- 测试/开发程序员怎么升职?从无到有,从薄变厚.......
- Digital chemical plants realize the coexistence of advantages of high quality, low cost and fast efficiency
- Both primary and secondary equipment numbers are 0
- acwing 843. N-queen problem
猜你喜欢
九章云极DataCanvas公司蝉联中国机器学习平台市场TOP 3
Vscode 如何使用内置浏览器?
This "advanced" technology design 15 years ago makes CPU shine in AI reasoning
DFS and BFS concepts and practices +acwing 842 arranged numbers (DFS) +acwing 844 Maze walking (BFS)
C#使用西门子S7 协议读写PLC DB块
DFS和BFS概念及实践+acwing 842 排列数字(dfs) +acwing 844. 走迷宫(bfs)
程序员上班摸鱼,这么玩才高端!
The root file system of buildreoot prompts "depmod:applt not found"
EasyCVR无法使用WebRTC进行播放,该如何解决?
Easycvr cannot be played using webrtc. How to solve it?
随机推荐
[system management] clear the icon cache of deleted programs in the taskbar
acwing 843. n-皇后问题
Zero knowledge private application platform aleo (1) what is aleo
JS form get form & get form elements
EasyCVR集群版本添加RTSP设备提示服务器ID错误,该如何解决?
Network Security Learning - Information Collection
九章云极DataCanvas公司摘获「第五届数字金融创新大赛」最高荣誉!
Win11远程桌面连接怎么打开?Win11远程桌面连接的五种方法
Implementation of JSTL custom function library
The root file system of buildreoot prompts "depmod:applt not found"
【实践出真理】import和require的引入方式真的和网上说的一样吗
ESG全球领导者峰会|英特尔王锐:以科技之力应对全球气候挑战
什么是Web3
1.19.11. SQL client, start SQL client, execute SQL query, environment configuration file, restart policy, user-defined functions, constructor parameters
广告归因:买量如何做价值衡量?
英特尔David Tuhy:英特尔傲腾技术成功的原因
软件测试之网站测试如何进行?测试小攻略走起!
軟件測試之網站測試如何進行?測試小攻略走起!
[untitled]
Golang calculates constellations and signs based on birthdays