public static int Test_UnitVectorProduct_ToInt()
        {
            UnitVectorSpace uvs = new UnitVectorSpace(4); //Order four Unit Vector Space
            UnitVector      e1  = uvs["e1"];              //order 4 e1 unit operator

            e1.IsRowOrColumn = RowColumn.Row;

            UnitVector e2 = uvs["e2"]; // order 4 e2 unit vector
            int        dp = e1 * e2;   //product of Unit Vectors

            UnitVector e2prime = new UnitVector("e2", 4, RowColumn.Row);

            int dp2 = e2prime * e2;

            string latex = "e'_{1}e_{2} = " + dp.ToString() + @"\;,e'_{2}e_{2} = " + dp2.ToString();

            HtmlOutputMethods.WriteLatexEqToHtmlAndLaunch(latex, "Test_UnitVectorProduct_ToInt.html"); //display Latex via mathjax


            return(0);
        }
        public static UnitVector operator*(UnitVector uv, ElementaryMatrix em)
        {
            UnitVector retVal = new UnitVector(0);

            retVal.Clear();
            if (uv.Order != em.Rows)
            {
                throw new Exception("Vector length must be same as number of columns and rows of matrix");
            }

            for (int rowCount = 0; rowCount < em.Rows; rowCount++)
            {
                int SumOfRow = 0;
                for (int colCount = 0; colCount < em.Columns; colCount++)
                {
                    SumOfRow += (em.InternalRep[rowCount, colCount] * uv[colCount]);
                }

                retVal.Add(SumOfRow);
            }

            return(retVal);
        }
        public static int Test_UnitVector_Multiply_ElementaryMatrix()
        {
            /*
             * e'r * Eij = e'r * ei * e'j = &ri *e'j where & = Kronecker delta
             *
             */
            StringBuilder    sb  = new StringBuilder();
            ElementaryMatrix E12 = new ElementaryMatrix(4, 4, "E12");      // 4 x 4 ElementaryMatrix
            UnitVector       e1  = new UnitVector("e1", 4);                //Order four unit vector e1
            UnitVector       e2  = new UnitVector("e2", 4, RowColumn.Row); //Order four row unit vector e2
            UnitVector       er  = new UnitVector("e3", 4, RowColumn.Row); //Order four unit row vector e3 our er above

            /*
             * i = 1, j = 2, r = 3
             */

            sb.Append(@"e'_rE_{ij} = e'_re_ie'_j = \delta_{r j}e'j \\");
            //Test matrix unit vector * Elementary Matrix,  er * Eij
            UnitVector uvE1 = er * E12;

            sb.Append(@"e'_3E_{12} = " + uvE1.ToLatex() + @"\;");

            //Test e'r * ei * e'j
            UnitVector uvE2 = er * e1 * e2;

            sb.Append(@"e'_3e_1e'_2 = " + uvE2.ToLatex() + @"\;");

            //Test &ri * e'j
            UnitVector uvE3 = UnitVector.KroneckerDelta(3, 1) * e2;

            sb.Append(@" \delta_{3 1}e_2 = " + uvE3.ToLatex() + @" \tag{1}");

            HtmlOutputMethods.WriteLatexEqToHtmlAndLaunch(sb.ToString(), "Test_UnitVector_Multiply_ElementaryMatrix.html"); //display Latex via mathjax

            return(0);
        }
        public static int Test_ElementaryMatrix_Multiply_UnitVector()
        {
            /*
             * Eij * er = ei*e'j*er = &jr *ei where & = Kronecker delta
             *
             */
            StringBuilder    sb  = new StringBuilder();
            ElementaryMatrix E12 = new ElementaryMatrix(4, 4, "E12");      // 4 x 4 ElementaryMatrix
            UnitVector       e1  = new UnitVector("e1", 4);                //Order four unit vector e1
            UnitVector       e2  = new UnitVector("e2", 4, RowColumn.Row); //Order four row unit vector e2
            UnitVector       er  = new UnitVector("e3", 4);                //Order four unit vector e3 our er above

            /*
             * i = 1, j = 2, r = 3
             */

            //Test matrix * unit vector, Eij * er
            UnitVector uvE1 = E12 * er;

            sb.Append(@"E_{12}e_3 = " + uvE1.ToLatex() + @"\;");

            //Test e1* e'j * er
            UnitVector uvE2 = e1 * e2 * er;

            sb.Append(@"e_1e'_2e_3 = " + uvE2.ToLatex() + @"\;");

            //Test &jr * ei
            UnitVector uvE3 = UnitVector.KroneckerDelta(2, 3) * e1;

            sb.Append(@" \delta_{2 3}e_1 = " + uvE3.ToLatex());

            HtmlOutputMethods.WriteLatexEqToHtmlAndLaunch(sb.ToString(), "Test_ElementaryMatrix_Multiply_UnitVector.html"); //display Latex via mathjax


            return(0);
        }