liftApply(complexFunction) {
        let t = this.times(0);
        for (let {val, vec} of this.eigenDecomposition()) {
            //noinspection JSUnusedAssignment
            let fVal = complexFunction(val);
            //noinspection JSUnusedAssignment
            let part = vec.times(vec.adjoint());
            t = t.plus(part.times(fVal));
        }
        return t;
    }
Lifts a numeric function so that it applies to matrices by using the eigendecomposition and applying the function
to the eigenvalue coefficients.
@param {!function(!Complex) : !Complex} complexFunction
@returns {!Matrix}