コード例 #1
0
        private void JacobianIteration(MatrixEquasion <Double> eq, Matrix <Double> oldMatrix, Matrix <Double> newMatrix, int i)
        {
            IMatrixDataType <Double> x = new MatrixDouble(0);

            for (int j = 0; j < eq.A.ColCount; j++)
            {
                if (i != j)
                {
                    x = (x.Add(eq.A.ValueMatrix[i][j].Multiply(oldMatrix.ValueMatrix[j][0])));
                }
            }
            x = x.Multiply(MatrixDouble.MINUSONE);
            x = x.Add(eq.B.ValueMatrix[i][0]);
            x = x.Divide(eq.A.ValueMatrix[i][i]);

            newMatrix.ValueMatrix[i][0] = x;
        }
コード例 #2
0
        private void GaussSeidelIteration(MatrixEquasion <Double> eq, Matrix <Double> newVector, int i)
        {
            IMatrixDataType <double> x = new MatrixDouble(0);

            for (int j = 0; j < eq.A.ColCount; j++)
            {
                if (i != j)
                {
                    x = (x.Add(eq.A.ValueMatrix[i][j].Multiply(newVector.ValueMatrix[j][0])));
                }
            }
            x = x.Multiply(MatrixDouble.MINUSONE);
            x = x.Add(eq.B.ValueMatrix[i][0]);
            x = x.Divide(eq.A.ValueMatrix[i][i]);

            newVector.ValueMatrix[i][0] = x;
        }
コード例 #3
0
        public Result Perform(MatrixEquasion <double> eq)
        {
            int NOfEquasions = 0;

            for (int i = 0; i <= NOfAgents; i++)
            {
                for (int j = 0; j <= NOfAgents - i; j++)
                {
                    NOfEquasions++;
                }
            }

            MatrixDouble[][] raw = new MatrixDouble[NOfEquasions][];
            for (int i = 0; i < NOfEquasions; i++)
            {
                raw[i] = new MatrixDouble[1];
            }


            Stopwatch st = new Stopwatch();

            int iteration = 0;

            st.Start();
            for (int i = 0; i <= NOfAgents; i++)
            {
                for (int j = 0; j <= NOfAgents - i; j++)
                {
                    raw[iteration][0] = new MatrixDouble(GetProbability(i, j));
                    iteration++;
                }
            }
            st.Stop();

            Matrix <double> probVector = new Matrix <double>(raw);
            double          error      = Matrix <double> .GetNormOfDiffrence(eq.A.Multiply(probVector), eq.B);

            long time = st.ElapsedMilliseconds;

            return(new Result("MonteCarlo", error, time, 100000, probVector));
        }