matrix exponential function

concurrent and serial implementation
The idiomatic eye builds the data slice first. There is a 3x3 eye func in the test files which will conflict with the func you have here. If you need it, delete that and add the generic version into the main code:

    func eye(n int) *Dense {
        d := make([]float64, n*n)
        for i := 0; i < n*n; i += n + 1 {
            d[i] = 1
        }
        eye := NewDense(n, n, d)
    }