当前位置:网站首页>【數模】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
-一個指定最小周期的標量
輸出中的周期長度。
边栏推荐
- Detect when a tab bar item is pressed
- [ArcGIS tutorial] thematic map production - population density distribution map - population density analysis
- The worse the AI performance, the higher the bonus? Doctor of New York University offered a reward for the task of making the big model perform poorly
- See Gardenia minor
- [knife-4j quickly build swagger]
- Organize five stages of actual attack and defense drill
- Introduction to the PureMVC series
- [team learning] [phase 34] Baidu PaddlePaddle AI talent Creation Camp
- 九章云极DataCanvas公司获评36氪「最受投资人关注的硬核科技企业」
- The easycvr platform is connected to the RTMP protocol, and the interface call prompts how to solve the error of obtaining video recording?
猜你喜欢
Network Security Learning - Information Collection
A detailed explanation of head pose estimation [collect good articles]
九章云极DataCanvas公司获评36氪「最受投资人关注的硬核科技企业」
acwing 843. n-皇后问题
Easycvr cannot be played using webrtc. How to solve it?
Vscode 如何使用内置浏览器?
kivy教程之设置窗体大小和背景(教程含源码)
Practice Guide for interface automation testing (middle): what are the interface testing scenarios
接口自动化测试实践指导(中):接口测试场景有哪些
Camera calibration (I): robot hand eye calibration
随机推荐
EasyCVR集群重启导致其他服务器设备通道状态离线情况的优化
DFS and BFS concepts and practices +acwing 842 arranged numbers (DFS) +acwing 844 Maze walking (BFS)
Detect when a tab bar item is pressed
两个div在同一行,两个div不换行「建议收藏」
ACL2022 | 分解的元学习小样本命名实体识别
Data security -- 12 -- Analysis of privacy protection
九章云极DataCanvas公司蝉联中国机器学习平台市场TOP 3
sscanf,sscanf_ S and its related usage "suggested collection"
赠票速抢|行业大咖纵论软件的质量与效能 QECon大会来啦
EasyCVR集群版本添加RTSP设备提示服务器ID错误,该如何解决?
[on automation experience] the growth path of automated testing
mpf2_ Linear programming_ CAPM_ sharpe_ Arbitrage Pricin_ Inversion Gauss Jordan_ Statsmodel_ Pulp_ pLU_ Cholesky_ QR_ Jacobi
Practice Guide for interface automation testing (middle): what are the interface testing scenarios
Ssm+jsp realizes the warehouse management system, and the interface is called an elegant interface
Organize five stages of actual attack and defense drill
MySQL null value processing and value replacement
一图看懂!为什么学校教了你Coding但还是不会的原因...
[coded font series] opendyslexic font
Five years of automated testing, and finally into the ByteDance, the annual salary of 30W is not out of reach
How to open win11 remote desktop connection? Five methods of win11 Remote Desktop Connection