当前位置:网站首页>【數模】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
-一個指定最小周期的標量
輸出中的周期長度。
边栏推荐
- Thesis landing strategy | how to get started quickly in academic thesis writing
- Win11远程桌面连接怎么打开?Win11远程桌面连接的五种方法
- EasyCVR视频广场点击播放时,主菜单高亮效果消失问题的修复
- Zhou Yajin, a top safety scholar of Zhejiang University, is a curiosity driven activist
- acwing 843. n-皇后问题
- The root file system of buildreoot prompts "depmod:applt not found"
- kivy教程之设置窗体大小和背景(教程含源码)
- Why does WordPress open so slowly?
- Web3 社区中使用的术语
- JetBrain Pycharm的一系列快捷键
猜你喜欢
EasyCVR集群重启导致其他服务器设备通道状态离线情况的优化
[knife-4j quickly build swagger]
C#使用西门子S7 协议读写PLC DB块
In cooperation with the research team of the clinical trial center of the University of Hong Kong and Hong Kong Gangyi hospital, Kexing launched the clinical trial of Omicron specific inactivated vacc
What if the win11 screenshot key cannot be used? Solution to the failure of win11 screenshot key
这项15年前的「超前」技术设计,让CPU在AI推理中大放光彩
[team learning] [phase 34] Baidu PaddlePaddle AI talent Creation Camp
mpf2_线性规划_CAPM_sharpe_Arbitrage Pricin_Inversion Gauss Jordan_Statsmodel_Pulp_pLU_Cholesky_QR_Jacobi
各路行业大佬称赞的跨架构开发“神器”,你get同款了吗?
mpf2_ Linear programming_ CAPM_ sharpe_ Arbitrage Pricin_ Inversion Gauss Jordan_ Statsmodel_ Pulp_ pLU_ Cholesky_ QR_ Jacobi
随机推荐
每人每年最高500万经费!选人不选项目,专注基础科研,科学家主导腾讯出资的「新基石」启动申报
日常工作中程序员最讨厌哪些工作事项?
【自动化经验谈】自动化测试成长之路
Optimization of channel status offline of other server devices caused by easycvr cluster restart
EasyCVR视频广场点击播放时,主菜单高亮效果消失问题的修复
广告归因:买量如何做价值衡量?
Unit test asp Net MVC 4 Application - unit testing asp Net MVC 4 apps thoroughly
Thesis landing strategy | how to get started quickly in academic thesis writing
Acl2022 | decomposed meta learning small sample named entity recognition
Wechat can play the trumpet. Pinduoduo was found guilty of infringement. The shipment of byte VR equipment ranks second in the world. Today, more big news is here
九章云极DataCanvas公司摘获「第五届数字金融创新大赛」最高荣誉!
namespace基础介绍
Camera calibration (I): robot hand eye calibration
NanopiNEO使用开发过程记录
acwing 843. n-皇后问题
程序员上班摸鱼,这么玩才高端!
AI landing new question type RPA + AI =?
In cooperation with the research team of the clinical trial center of the University of Hong Kong and Hong Kong Gangyi hospital, Kexing launched the clinical trial of Omicron specific inactivated vacc
Golang compresses and decompresses zip files
接口自动化测试实践指导(中):接口测试场景有哪些