/// <summary>
        /// The fill.
        /// </summary>
        /// <param name="matrix">
        /// The matrix.
        /// </param>
        public void Fill(IOpenMatrix matrix)
        {
            double temp = matrix.ValueList.Cast<double>().Sum();

            for (int i = 0; i < ValueList.Count; i++)
            {
                ValueList[i] = (temp == 0) ? 0 : ((double)matrix.ValueList[i]) / temp;
            }
        }
        /// <summary>
        /// The fill.
        /// </summary>
        /// <param name="matrix">
        /// The matrix.
        /// </param>
        public void Fill(IOpenMatrix matrix)
        {
            double temp = 0;
            for (int i = 0; i < matrix.ValueList.Count; i++)
            {
                temp += ((IOpenMatrix)matrix.ValueList[i]).Value;
            }

            for (int i = 0; i < ValueList.Count; i++)
            {
                ((IWritableMatrix)ValueList[i]).Value = (temp == 0) ? 0 : ((IOpenMatrix)matrix.ValueList[i]).Value / temp;
                ((IProbabilityMatrix)ValueList[i]).Fill((IOpenMatrix)matrix.ValueList[i]);
            }
        }