a[0][i] = MathUtil.trapz(ColorUtil.XYZ_WAVELENGTHS, ColorUtil.X_BAR.combine(basis, Tuple.PRODUCT_OPERATOR));
a[1][i] = MathUtil.trapz(ColorUtil.XYZ_WAVELENGTHS, ColorUtil.Y_BAR.combine(basis, Tuple.PRODUCT_OPERATOR));
a[2][i] = MathUtil.trapz(ColorUtil.XYZ_WAVELENGTHS, ColorUtil.Z_BAR.combine(basis, Tuple.PRODUCT_OPERATOR));
}
LinearMatrix3 band2xyz = new LinearMatrix3(
a[0][0], a[0][1], a[0][2],
a[1][0], a[1][1], a[1][2],
a[2][0], a[2][1], a[2][2]);
double factor = 1.0 / band2xyz.times(new Vector3(1, 1, 1)).y();
return band2xyz.times(LinearMatrix3.scaleMatrix(factor)).inverse();
}