当前位置:网站首页>Code source de la fonction [analogique numérique] MATLAB allcycles () (non disponible avant 2021a)

Code source de la fonction [analogique numérique] MATLAB allcycles () (non disponible avant 2021a)

2022-07-07 04:40:00 Dream of Grass

Matlaballcycles()Code source de la fonction

Dans ce billet précédentTous les cercles dirigés d'un digraphe sont obtenus par le programme(Anneau dirigé)Et visualiserIl y a unallcyclesFonctions,Cette fonction n'a que2021aC'est vrai.,SimatlabCette fonction ne peut pas être utilisée sans une version plus élevée,Donc pour que tout le monde puisse l'utiliser,J'ai misallcyclesTrouver la fonction intégrée et la partager avec tout le monde.

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

Un peu de fiction

Calculer toutes les périodes dans un digraphe

CYCLES = ALLCYCLES(G)Calculer le digrapheG Tous les cycles de

Tableau de cellules,Parmi euxCYCLES{ i} Est un noeud numérique idVecteur de(SiG

Pas de nom de noeud ) Ou un tableau de cellules d'un vecteur de caractères (SiG

Nom du noeud). CYCLES Chaque cycle commence au plus petit noeud

Index. SiG Est acyclique ,AlorsCYCLESVide. Le cycle est

Ordre de la lexicographie .

[CYCLES, EDGECYCLES] = ALLCYCLES(G) Renvoie également un tableau de cellules

EDGECYCLES,Parmi euxEDGECYCLES{ i} Contient des bords sur la boucle

Cycle{- moi.}DeG.

[… = ALLCYCLES(G, Name, Value) Spécifiez une ou plusieurs valeurs supplémentaires

Utiliser le nom- Options pour les valeurs par rapport aux paramètres . Les options disponibles sont:

MaxNumCycles- Un scalaire spécifiant le nombre maximum

Cycle de sortie.

MaxCycleLength- Un scalaire spécifiant la période maximale

Longueur du cycle en sortie .

MinCycleLength - Un scalaire spécifiant la période minimale

Longueur du cycle en sortie .

原网站

版权声明
本文为[Dream of Grass]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207062213328165.html