View Raw SPL
/*****************************************************************************
*                                                                            *
*   KRON.SPL     Copyright (C) 2002 DSP Development Corporation              *
*                               All Rights Reserved                          *
*                                                                            *
*   Author:      Randy Race                                                  *
*                                                                            *
*   Synopsis:    Computes Kronecker tensor product                           *
*                                                                            *
*   Revisions:   13 Aug 2002  RRR  Creation                                  *
*                                                                            *
*****************************************************************************/

#include 

#if @HELP_KRON

    KRON

    Purpose: Returns the Kronecker tensor product of two arrays

    Syntax:  KRON(a, b)

                  a -  An array.

                  b -  An array.

    Returns: An array.

    Example:
             a = {{ 1,  2},
                  {-1, -2}}

             b = {{10, 20},
                  {30, 40},
                  {50, 60}}

             c = kron(a, b)

             c == {{ 10,  20,   20,   40},
                   { 30,  40,   60,   80},
                   { 50,  60,  100,  120},
                   {-10, -20,  -20,  -40},
                   {-30, -40,  -60,  -80},
                   {-50, -60, -100, -120}}
    Remarks:
             For m = numrows(a) and n = numcols(b), kron(a, b) returns
             the array formed by the following product:

             {{a[1, 1] * b, a[1, 2] * b, ... a[1, n] * b},
              {a[2, 1] * b, a[2, 2] * b, ... a[2, n] * b},

                                ...

              {a[m, 1] * b, a[m, 2] * b, ... a[m, n] * b}}

    See Also:
             *^
             ^^
             Hankel
             Toeplitz
#endif



/* Kronecker tensor product */
kron(a, b)
{
        local ma, na, mb, nb, t, ia, ib, ja, jb, k;

        if (argc < 2) error("kron - input arrays required");

        if (not(isarray(a))) a = castseries(a);
        
        if (not(isarray(b))) b = castseries(b);

        (ma, na) = size(a);
        (mb, nb) = size(b);

        t  = 0..(ma * mb - 1);
        ia = fix(t / mb) + 1;
        ib = rem(t, mb) + 1;

        t  = 0..(na * nb - 1);
        ja = fix(t / nb) + 1;
        jb = rem(t, nb) + 1;

        k  = a[ia, ja] * b[ib, jb];
        
        return(k);
}