当前位置:网站首页>【數模】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
-一個指定最小周期的標量
輸出中的周期長度。
边栏推荐
- Fix the problem that the highlight effect of the main menu disappears when the easycvr Video Square is clicked and played
- Web3 社区中使用的术语
- Nanopineo use development process record
- MySQL forgot how to change the password
- mpf2_ Linear programming_ CAPM_ sharpe_ Arbitrage Pricin_ Inversion Gauss Jordan_ Statsmodel_ Pulp_ pLU_ Cholesky_ QR_ Jacobi
- 【线段树实战】最近的请求次数 + 区域和检索 - 数组可修改+我的日程安排表Ⅰ/Ⅲ
- Intel and Xinbu technology jointly build a machine vision development kit to jointly promote the transformation of industrial intelligence
- How do test / development programmers get promoted? From nothing, from thin to thick
- How to conduct website testing of software testing? Test strategy let's go!
- SQL where multiple field filtering
猜你喜欢
案例大赏:英特尔携众多合作伙伴推动多领域AI产业创新发展
Dab-detr: dynamic anchor boxes are better queries for Detr translation
AI 落地新题型 RPA + AI =?
Common methods of list and map
The request request is encapsulated in uni app, which is easy to understand
计数排序基础思路
This "advanced" technology design 15 years ago makes CPU shine in AI reasoning
Vscode 如何使用内置浏览器?
Win11控制面板快捷键 Win11打开控制面板的多种方法
EasyCVR视频广场点击播放时,主菜单高亮效果消失问题的修复
随机推荐
浙江大学周亚金:“又破又立”的顶尖安全学者,好奇心驱动的行动派
Master the secrets of software security testing methods, and pinch the security test report with your hands
[multi threading exercise] write a multi threading example of the producer consumer model.
英特尔与信步科技共同打造机器视觉开发套件,协力推动工业智能化转型
buildroot的根文件系统提示“depmod:applt not found”
DFS and BFS concepts and practices +acwing 842 arranged numbers (DFS) +acwing 844 Maze walking (BFS)
Fix the problem that the highlight effect of the main menu disappears when the easycvr Video Square is clicked and played
[team learning] [phase 34] Baidu PaddlePaddle AI talent Creation Camp
leetcode 53. Maximum Subarray 最大子数组和(中等)
关于01背包个人的一些理解
AI landing new question type RPA + AI =?
AI 落地新题型 RPA + AI =?
Vscode 如何使用内置浏览器?
Practice Guide for interface automation testing (middle): what are the interface testing scenarios
Deeply cultivate the developer ecosystem, accelerate the innovation and development of AI industry, and Intel brings many partners together
ESG Global Leaders Summit | Intel Wang Rui: coping with global climate challenges with the power of science and technology
树与图的深度优先遍历模版原理
Why does WordPress open so slowly?
Intel and Xinbu technology jointly build a machine vision development kit to jointly promote the transformation of industrial intelligence
How do test / development programmers get promoted? From nothing, from thin to thick