コード例 #1
0
        public static Wektor Jacobe(Macierz M, Wektor V, int p)
        {
            //Nasz wynik i pomoc do obliczania prezycji
            Wektor X1   = new Wektor(M.rozmiarMacierzy);
            Wektor X2   = new Wektor(M.rozmiarMacierzy);
            double suma = 0;

            X1.WyzerujWektor();
            X2.WyzerujWektor();
            double precyzja = Math.Pow(10, p);   // nasza obliczona precyzja
            int    rozmiar  = M.rozmiarMacierzy; // Rozmiar macierzy wszystkie przypadki


            int z = 0;

            do
            {
                X1.SkopiujDo(X2); //X2=X1;
                // X1.WyswietlWektor();
                for (int i = 0; i < rozmiar; i++)
                {
                    suma = 0.0;

                    for (int j = 0; j < rozmiar; j++)
                    {
                        if (i != j)
                        {
                            suma += M.macierz[i, j] * X2.wektor[j];
                        }
                    }

                    suma *= -1;
                    suma  = suma + V.wektor[i];

                    X1.wektor[i] = (double)(suma / M.macierz[i, i]);
                    //Console.WriteLine("------------------");
                }
                z++;
                // Console.WriteLine(z);
            } while (X1.ObliczBladZ(X2) > precyzja);

            //Blad to roznica wektora X1 i X2



            return(X1);
        }
コード例 #2
0
        public static Wektor Seid(Macierz M, Wektor V, int p) //M=kopia / V=wektor kopia (same 0 i 1 na koncu) / p=precyzja na -10 itp
        {
            //Nasz wynik i pomoc do obliczania prezycji
            Wektor X1    = new Wektor(M.rozmiarMacierzy);
            Wektor X2    = new Wektor(M.rozmiarMacierzy);
            double suma1 = 0;
            double suma2 = 0;

            X1.WyzerujWektor();
            X2.WyzerujWektor();
            double precyzja = Math.Pow(10, p);   // nasza obliczona precyzja
            int    rozmiar  = M.rozmiarMacierzy; // Rozmiar macierzy wszystkie przypadki

            do
            {
                X1.SkopiujDo(X2); //X2=X1

                for (int i = 0; i < rozmiar; i++)
                {
                    suma1 = 0.0;
                    suma2 = 0.0;
                    for (int j = 0; j < i; j++)
                    {
                        suma1 -= (M.macierz[i, j] * X1.wektor[j]);
                    }
                    for (int j = i + 1; j < rozmiar; j++)
                    {
                        suma2 -= (M.macierz[i, j] * X2.wektor[j]);
                    }

                    suma1       += suma2 + V.wektor[i];
                    X1.wektor[i] = suma1 / M.macierz[i, i];
                }
            } while (X1.ObliczBladZ(X2) > precyzja);


            return(X1);
        }
コード例 #3
0
        static void Main(string[] args)
        {
            for (int rozmiar = 19; rozmiar <= 21; rozmiar++)
            {
                Macierz m1 = new Macierz(rozmiar);
                Macierz m2 = new Macierz(rozmiar);
                Wektor  w1 = new Wektor(m1.rozmiarMacierzy);
                Wektor  w2 = new Wektor(m1.rozmiarMacierzy);
                Wektor  X  = new Wektor(m1.rozmiarMacierzy);
                Wektor  Z  = new Wektor(m1.rozmiarMacierzy);

                string    path = Path.GetFullPath("POPRAWNE.txt");
                TimeSpan  ts;
                Stopwatch stopWatch = new Stopwatch();
                string    elapsedTime;

                m1.OdejmijJedynki();
                m1.SkopiujDo(m2);
                // m2.ZapiszDoPliku();

                Gauss gauss = new Gauss(m1.macierz, w1.wektor, m2.macierz, w2.wektor, m1.rozmiarMacierzy);

                Console.WriteLine("MONTE CARLO----------------------------------------");
                X = MonteCarlo.GenerujMonte(m2);
                X.WyswietlWektor();
                //X.ZapiszDoPliku();


                Console.WriteLine("JACOB----------------------------------------");
                Z = Jacob.Jacobe(m2, w1, -6);
                Z.WyswietlWektor();
                System.IO.File.AppendAllText(@path, Convert.ToString(X.ObliczBladZ(Z)) + ";");
                //  X.ZapiszDoPliku();


                Console.WriteLine("JACOB----------------------------------------");
                Z = Jacob.Jacobe(m2, w1, -10);
                Z.WyswietlWektor();
                System.IO.File.AppendAllText(@path, Convert.ToString(X.ObliczBladZ(Z)) + ";");
                //  X.ZapiszDoPliku();


                Console.WriteLine("JACOB----------------------------------------");
                Z = Jacob.Jacobe(m2, w1, -14);
                Z.WyswietlWektor();
                System.IO.File.AppendAllText(@path, Convert.ToString(X.ObliczBladZ(Z)) + ";");
                //  X.ZapiszDoPliku();

                Console.WriteLine("SEIDEL----------------------------------------");
                Z  = Seidel.Seid(m2, w1, -6);
                ts = stopWatch.Elapsed;
                Z.WyswietlWektor();
                System.IO.File.AppendAllText(@path, Convert.ToString(X.ObliczBladZ(Z)) + ";");
                //  X.ZapiszDoPliku();

                Console.WriteLine("SEIDEL----------------------------------------");
                Z  = Seidel.Seid(m2, w1, -10);
                ts = stopWatch.Elapsed;
                Z.WyswietlWektor();
                System.IO.File.AppendAllText(@path, Convert.ToString(X.ObliczBladZ(Z)) + ";");
                //  X.ZapiszDoPliku();

                Console.WriteLine("SEIDEL----------------------------------------");
                Z  = Seidel.Seid(m2, w1, -14);
                ts = stopWatch.Elapsed;
                Z.WyswietlWektor();
                System.IO.File.AppendAllText(@path, Convert.ToString(X.ObliczBladZ(Z)) + ";");
                //  X.ZapiszDoPliku();

                Console.WriteLine("GAUSS Z CZESCIOWYM  WYBOREM ELEMENTU PODSTAWOWEGO----------------------------------------");
                Z = gauss.GaussCWP();
                Z.WyswietlWektor();
                System.IO.File.AppendAllText(@path, Convert.ToString(X.ObliczBladZ(Z)) + ";");
                //  X.ZapiszDoPliku();

                Console.WriteLine("GAUSS BEZ  WYBORU ELEMENTU PODSTAWOWEGO----------------------------------------");
                Z = gauss.GaussBWP();
                Z.WyswietlWektor();
                System.IO.File.AppendAllText(@path, Convert.ToString(X.ObliczBladZ(Z)) + "\r\n");
                // X.ZapiszDoPliku();
            }
        }