Home Reference Source Repository

src/diag.js

/**
 * Create diagonal matrix from vector
 * 
 * @param {Array} d
 * @returns {Array}
 * @example 
 * 
 * diag([1, 2])
 * // [[1, 0], 
 * //  [0, 2]]
 */
export default function diag (d) {
  var i, i1, j, n = d.length, A = Array(n), Ai
  for (i = n - 1; i >= 0; i--) {
    Ai = Array(n)
    i1 = i + 2
    for (j = n - 1; j >= i1; j -= 2) {
      Ai[j] = 0
      Ai[j - 1] = 0
    }
    if (j > i) { Ai[j] = 0; }
    Ai[i] = d[i]
    for (j = i - 1; j >= 1; j -= 2) {
      Ai[j] = 0
      Ai[j - 1] = 0
    }
    if (j === 0) { Ai[0] = 0; }
    A[i] = Ai
  }
  return A
}