Esempio n. 1
0
        public void GaussPartialPivotTimeTest(int numberOfAgents, int count)
        {
            MatrixGenerator mg = new MatrixGenerator(numberOfAgents);

            MyMatrix <double> macierz      = new MyMatrix <double>(mg.size, mg.size);
            MyMatrix <double> macierzKopia = new MyMatrix <double>(mg.size, mg.size);

            double[] wektor      = new double[mg.size];
            double[] wektorKopia = new double[mg.size];

            //przygotowanie macierzy i wektorów
            macierz      = mg.GenerateMatrix();
            macierzKopia = mg.GenerateMatrix();
            wektor       = GenerateVector(mg.size);
            wektorKopia  = GenerateVector(mg.size);

            //liczenie czasu
            double[] czasy   = new double[count];
            double   suma    = 0.0;
            double   srednia = 0.0;

            for (int i = 0; i < count; i++)
            {
                var watchDouble = Stopwatch.StartNew();
                macierz.GaussPartialPivot(wektor);
                watchDouble.Stop();
                var elapsedMsDouble = watchDouble.ElapsedMilliseconds;
                czasy[i] = elapsedMsDouble;

                for (var j = 0; j < macierz.Rows(); j++)
                {
                    for (var k = 0; k < macierz.Columns(); k++)
                    {
                        macierz[j, k] = macierzKopia[j, k];
                        wektor[j]     = wektorKopia[j];
                    }
                }
                suma += czasy[i];
            }

            srednia = suma / count;

            StreamWriter writer = new StreamWriter("CzasGaussPartialPivot.csv", append: true);

            if (writer != null)
            {
                writer.WriteLine(srednia);
            }
            writer.Close();

            Console.WriteLine("Średni czas GaussPartialPivot" +
                              ": " + srednia + "ms");
        }
Esempio n. 2
0
        public static ApproximationFunction GetApproximation(int polynomialDegree, double[] arguments, double[] values)
        {
            var sUnknowns = polynomialDegree * 2 + 1;
            var sMatrix   = new double[arguments.Length, sUnknowns];
            var sVector   = new double[sUnknowns];

            for (var i = 0; i < arguments.Length; i++)
            {
                for (var j = 0; j < sUnknowns; j++)
                {
                    sMatrix[i, j] = Math.Pow(arguments[i], j);
                    sVector[j]   += sMatrix[i, j];
                }
            }


            var tUnknowns = polynomialDegree + 1;
            var tMatrix   = new double[arguments.Length, sUnknowns];
            var tVector   = new double[sUnknowns];

            for (var i = 0; i < arguments.Length; i++)
            {
                for (var j = 0; j < tUnknowns; j++)
                {
                    tMatrix[i, j] = values[i] * sMatrix[i, j];
                    tVector[j]   += tMatrix[i, j];
                }
            }


            var rMatrix = new double[tUnknowns, tUnknowns];
            var rVector = new double[tUnknowns];
            var offset  = 0;

            for (var i = 0; i < tUnknowns; i++)
            {
                for (var j = 0; j < tUnknowns; j++)
                {
                    rMatrix[i, j] = sVector[j + offset];
                }

                rVector[i] = tVector[i];
                offset    += 1;
            }

            var matrix = new MyMatrix <double>(rMatrix);

            matrix.GaussPartialPivot(rVector);

            return(new ApproximationFunction(rVector, arguments, values));
        }
Esempio n. 3
0
        public MyMatrix <double> GenerateMatrix()
        {
            MyMatrix <double> macierz = new MyMatrix <double>(size, size);

            for (int i = 0; i < macierz.Rows(); i++)
            {
                for (int j = 0; j < macierz.Columns(); j++)
                {
                    macierz[i, j] = GenerateValue(i, j); //generate value
                }
            }

            return(macierz);
        }
Esempio n. 4
0
        public void SeidelTimeTest(int numberOfAgents, int count, double accuracy)
        {
            MatrixGenerator mg = new MatrixGenerator(numberOfAgents);

            MyMatrix <double> macierz = new MyMatrix <double>(mg.size, mg.size);

            double[] wektor = new double[mg.size];


            //przygotowanie macierzy i wektorów
            macierz = mg.GenerateMatrix();
            wektor  = GenerateVector(mg.size);

            //liczenie czasu
            double[] czasy   = new double[count];
            double   suma    = 0.0;
            double   srednia = 0.0;

            for (int i = 0; i < count; i++)
            {
                var watchDouble = Stopwatch.StartNew();
                macierz.SeidelAccuracy(wektor, accuracy);
                watchDouble.Stop();
                var elapsedMsDouble = watchDouble.ElapsedMilliseconds;
                czasy[i] = elapsedMsDouble;

                suma  += czasy[i];
                wektor = GenerateVector(mg.size);
            }

            srednia = suma / count;

            string name = "CzasSeidel" + accuracy + ".csv";

            StreamWriter writer = new StreamWriter(name, append: true);

            if (writer != null)
            {
                writer.WriteLine(srednia);
            }
            writer.Close();

            Console.WriteLine("Średni czas Seidel " + accuracy + ": " + srednia + "ms");
        }