当前位置:网站首页>【数模】Matlab allcycles()函数的源代码(2021a之前版本没有)
【数模】Matlab allcycles()函数的源代码(2021a之前版本没有)
2022-07-06 22:13: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
-一个指定最小周期的标量
输出中的周期长度。
边栏推荐
- Practice Guide for interface automation testing (middle): what are the interface testing scenarios
- ESG Global Leaders Summit | Intel Wang Rui: coping with global climate challenges with the power of science and technology
- 树与图的深度优先遍历模版原理
- Digital chemical plants realize the coexistence of advantages of high quality, low cost and fast efficiency
- Common methods of list and map
- 日常工作中程序员最讨厌哪些工作事项?
- Digital chemical plant management system based on Virtual Simulation Technology
- Intel David tuhy: the reason for the success of Intel aoten Technology
- 高薪程序员&面试题精讲系列120之Redis集群原理你熟悉吗?如何保证Redis的高可用(上)?
- How to solve the problem of adding RTSP device to easycvr cluster version and prompting server ID error?
猜你喜欢
DFS和BFS概念及实践+acwing 842 排列数字(dfs) +acwing 844. 走迷宫(bfs)
SSM+jsp实现仓库管理系统,界面那叫一个优雅
[team learning] [34 sessions] Alibaba cloud Tianchi online programming training camp
Optimization of channel status offline of other server devices caused by easycvr cluster restart
Intel and Xinbu technology jointly build a machine vision development kit to jointly promote the transformation of industrial intelligence
Fix the problem that the highlight effect of the main menu disappears when the easycvr Video Square is clicked and played
Kivy tutorial of setting the size and background of the form (tutorial includes source code)
How do test / development programmers get promoted? From nothing, from thin to thick
mpf2_ Linear programming_ CAPM_ sharpe_ Arbitrage Pricin_ Inversion Gauss Jordan_ Statsmodel_ Pulp_ pLU_ Cholesky_ QR_ Jacobi
Win11图片打不开怎么办?Win11无法打开图片的修复方法
随机推荐
NanopiNEO使用开发过程记录
kivy教程之设置窗体大小和背景(教程含源码)
一图看懂!为什么学校教了你Coding但还是不会的原因...
Camera calibration (I): robot hand eye calibration
Digital chemical plant management system based on Virtual Simulation Technology
Complimentary tickets quick grab | industry bigwigs talk about the quality and efficiency of software qecon conference is coming
namespace基础介绍
The easycvr platform is connected to the RTMP protocol, and the interface call prompts how to solve the error of obtaining video recording?
C # use Siemens S7 protocol to read and write PLC DB block
What if win11 pictures cannot be opened? Repair method of win11 unable to open pictures
How to open win11 remote desktop connection? Five methods of win11 Remote Desktop Connection
Formation continue en robotique (automatisation) - 2022 -
[untitled]
Common methods of list and map
未婚夫捐5亿美元给女PI,让她不用申请项目,招150位科学家,安心做科研!
sscanf,sscanf_ S and its related usage "suggested collection"
[knife-4j quickly build swagger]
Both primary and secondary equipment numbers are 0
POJ training plan 2253_ Frogger (shortest /floyd)
微信能开小号了,拼多多“砍一刀”被判侵权,字节VR设备出货量全球第二,今日更多大新闻在此