Beispiel #1
0
 public void SkopiujDo(Macierz kopia)
 {
     for (int i = 0; i < kopia.rozmiarMacierzy; i++)
     {
         for (int j = 0; j < kopia.rozmiarMacierzy; j++)
         {
             kopia.macierz[i, j] = macierz[i, j];
         }
     }
 }
        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);
        }
Beispiel #3
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);
        }
        public static void CzyDobrzeObliczyloWektor(Macierz test, Wektor X)
        {
            double[] wynik = new double[test.rozmiarMacierzy];

            for (int i = 0; i < test.rozmiarMacierzy; i++)
            {
                for (int j = 0; j < test.rozmiarMacierzy; j++)
                {
                    wynik[i] += test.macierz[i, j] * X.wektor[j];
                }
            }

            string path = Path.GetFullPath("test.txt");
            string text = "";

            Console.WriteLine();
            Console.WriteLine();
            for (int i = 0; i < test.rozmiarMacierzy; i++)
            {
                Console.WriteLine(wynik[i]);
                text = Convert.ToString(wynik[i]) + "\r\n";
                System.IO.File.AppendAllText(@path, text);
            }
        }
Beispiel #5
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();
            }
        }
        public static Wektor GenerujMonte(Macierz m)
        {
            Wektor wynik = new Wektor(m.rozmiarMacierzy);

            bool   choice = true;
            Random r      = new Random();

            int iloscWykonan = 10000;

            wynik.WyzerujWektor();
            int tak, nie, nw, s1, s2;

            double[] wektor = new double[m.iloscAgentow];
            double[] kopia  = new double[m.iloscAgentow];

            for (int ktoraStruktura = 0; ktoraStruktura < m.struktura.Count(); ktoraStruktura++)
            {
                int licznik = 0;


                tak = m.struktura[ktoraStruktura].t;
                nie = m.struktura[ktoraStruktura].n;
                nw  = m.iloscAgentow - tak - nie;

                for (int i = 0; i < m.iloscAgentow; i++)
                {
                    if (i < tak)
                    {
                        wektor[i] = 0;
                    }
                    if (i >= tak && i < tak + nie)
                    {
                        wektor[i] = 1;
                    }
                    if (i >= tak + nie)
                    {
                        wektor[i] = 2;
                    }
                }


                for (int i = 0; i < iloscWykonan; i++)
                {
                    kopia = Skopiuj(wektor, kopia);

                    choice = true;
                    do
                    {
                        s1 = r.Next(m.iloscAgentow);
                        s2 = r.Next(m.iloscAgentow);
                        if (kopia[s1] == 0 && kopia[s2] == 2 || kopia[s1] == 2 && kopia[s2] == 0)
                        {
                            kopia[s1] = 0;
                            kopia[s2] = 0;
                        }
                        else if (kopia[s1] == 0 && kopia[s2] == 1 || kopia[s1] == 1 && kopia[s2] == 0)
                        {
                            kopia[s1] = 2;
                            kopia[s2] = 2;
                        }
                        else if (kopia[s1] == 1 && kopia[s2] == 2 || kopia[s1] == 2 && kopia[s2] == 1)
                        {
                            kopia[s1] = 1;
                            kopia[s2] = 1;
                        }
                        if (!Jest(kopia, 1) && !Jest(kopia, 0))
                        {
                            choice = false;
                        }
                        else if (!Jest(kopia, 1))
                        {
                            licznik++; choice = false;
                        }
                        else if (!Jest(kopia, 0))
                        {
                            choice = false;
                        }
                    } while (choice);
                }

                wynik.wektor[ktoraStruktura] = (double)licznik / (double)iloscWykonan;
            }


            return(wynik);
        }