# Computes the fastest distributed linear averaging (FDLA) edge weights

Jump to: Source code Text output Plots Library index

    function [ w, cvx_optval ] = fdla( A )

    % [W,S] = FDLA(A) gives a vector of the fastest distributed linear averaging
    % edge weights for a graph described by the incidence matrix A (n x m).
    % Here n is the number of nodes and m is the number of edges in the graph;
    % each column of A has exactly one +1 and one -1.
    %
    % The FDLA edge weights are given by the SDP:
    %
    %   minimize    s
    %   subject to  -s*I <= I - L - (1/n)11' <= s*I
    %
    % where the variables are edge weights w in R^m and s in R.
    % Here L is the weighted Laplacian defined by L = A*diag(w)*A'.
    % The optimal value is s, and is returned in the second output.
    %
    % For more details see the references:
    % "Fast linear iterations for distributed averaging" by L. Xiao and S. Boyd
    % "Convex Optimization of Graph Laplacian Eigenvalues" by S. Boyd
    %
    % Written for CVX by Almir Mutapcic 08/29/06

    [n,m] = size(A);
    I = eye(n,n);
    J = I - (1/n) * ones(n,n);
    cvx_begin sdp
        variable w(m,1)   % edge weights
        variable s        % epigraph variable
        variable L(n,n) symmetric
        minimize( s )
        subject to
            L == A * diag(w) * A';
            J - L <= +s * I;
            J - L >= -s * I;
    cvx_end