Easy Octave Algorithm 2

Easy Octave Algorithm 2

$\def\A{\mathscr{A}}\def\B{\mathscr{B}}\def\C{\mathscr{C}}$

This page contains an Octave version of Algorithm 2, on page 57 of the B-series book. This function is intended to run equally well on Matlab, SciLab, as well as Octave.

Let

\begin{align} \A(x) &= \sum_{i=1}^{\infty} a_i x^i,\\ \B(x) &= \sum_{i=1}^{\infty} b_i x^i,\\ \C(x) &= \sum_{i=1}^{\infty} c_i x^i, \end{align}

where

\begin{align} a_i &\text{ is the number of trees of order $i$},\\ b_i &\text{ is the number of unrooted trees of order $i$},\\ c_i &\text{ is the number of non-superflous unrooted trees of order $i$}. \end{align}

Algorithm 2 calculates the coefficients in $\B$ and $\C$ using the formulae

\begin{align} \B(x)&= \A(x)-\tfrac12\big(\A(x)^2-\A(x^2)\big),\\ \C(x) &= \A(x)-\tfrac12\big(\A(x)^2+\A(x^2)\big). \end{align}

Octave function definition

function [Utrees,  UNtrees] = alg2(pmax)
  Ntrees=alg1(pmax)
  Xtrees=0 * Ntrees
  Ytrees=0 * Ntrees
  for i=1: pmax - 1
    for j=1: pmax - i
      Xtrees(i+j)=Xrees(i+j)+Ntrees(i)*Ntrees(j)
    end
  end
  for i=1: pmax/2
    Ytrees(2*i)=Ntrees(i)
  end
  Utrees=Utrees-(Xtrees-Ytrees)/2
  UNtrees=Utrees-(Xtrees+Ytrees)/2
end

$\to$ B-series book
$\to$ Homepage