Example #1
0
        private void button1_Click(object sender, EventArgs e)
        {
            Matrica A = new Matrica(2, 2);

            A.NapuniMatricu(new double[] { 1, 1, 1, 1 });
            Matrica inverz = null;

            try
            {
                inverz       = A.VratiInverz();
                tbEkran.Text = inverz.ToFormatString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Example #2
0
        public TrapezniPostupak(Matrica _A, Matrica _B, Matrica _X, double _T, double _I, int _korakIspisa, TextBox _tbIspis)
        {
            A           = _A;
            B           = _B;
            X0          = _X;
            T           = _T;
            I           = _I;
            korakIspisa = _korakIspisa;
            tb          = _tbIspis;

            // Ispis matrica
            tb.Text  = "Matrica A: " + nl;
            tb.Text += A.ToFormatString() + nl;
            tb.Text += "Matrica B: " + nl;
            tb.Text += B.ToFormatString() + nl;
            tb.Text += "Početno stanje: " + nl;
            tb.Text += X0.ToFormatString() + nl;
            tb.Text += nl + "* * * * * * * * * Izvođenje algoritma * * * * * * * * *" + nl + nl;
        }
Example #3
0
        public void PokreniAlgoritam()
        {
            Matrica J = Matrica.KreirajJedinicnuMatricu(A.brojRedaka);


            Matrica R = J - (T / 2) * A;

            R = R.VratiInverz();
            Matrica S = R;

            R = R * (J + (T / 2) * A);
            S = S * ((T / 2) * B);

            List <Matrica> listaMatricaX = new List <Matrica>();

            listaMatricaX.Add(X0);
            int indeksZadnjeMatrice = 0;

            double preostaliInterval = I;

            while (Math.Abs(preostaliInterval) >= Math.Pow(10, -6))
            {
                Matrica Xi = R * listaMatricaX[indeksZadnjeMatrice] + S;

                listaMatricaX.Add(Xi);

                indeksZadnjeMatrice++;

                if (indeksZadnjeMatrice % korakIspisa == 0)
                {
                    tb.Text += "T= " + T * indeksZadnjeMatrice + nl + Xi.ToFormatString() + nl + nl;
                }

                preostaliInterval -= T;
            }


            // Kreiranje Matlab datoteke

            System.IO.TextWriter pisac = new System.IO.StreamWriter("Trapezna.m");
            pisac.Write("y=[");

            for (int i = 0; i < listaMatricaX[0].brojRedaka; i++)
            {
                foreach (Matrica m in listaMatricaX)
                {
                    pisac.Write(m[i, 0].ToString().Replace(',', '.') + " ");
                }
                if (i != listaMatricaX[0].brojRedaka - 1)
                {
                    pisac.Write(";");
                }
            }
            pisac.Write("];\nt=[");

            int    brojacZaIspis = 0;
            double krajIntervala = I;

            while (Math.Abs(krajIntervala) > Math.Pow(10, -7))
            {
                pisac.Write((brojacZaIspis * T).ToString().Replace(',', '.') + "  ");
                brojacZaIspis++;
                krajIntervala -= T;
            }
            pisac.Write((brojacZaIspis * T).ToString() + " ");
            pisac.Write("];\n");

            pisac.WriteLine("\nsubplot(3,1,2), plot (t,y); \n xlabel('Vrijeme'); \n ylabel('Vrijednost varijabli stanja');" +
                            " title ('Trapezni postupak', 'FontWeight','bold', 'Color','red'); axis([" + "0 " + I.ToString().Replace(',', '.') + " min(min(y)) max(max(y))])");
            pisac.Close();
        }
Example #4
0
        public void PokreniAlgoritam()
        {
            List <Matrica> listaMatricaX = new List <Matrica>();

            listaMatricaX.Add(X0);
            int indeksZadnjeMatrice = 0;

            double preostaliInterval = I;

            while (Math.Abs(preostaliInterval) >= Math.Pow(10, -6))
            {
                m1 = A * (listaMatricaX[indeksZadnjeMatrice] + B);
                m2 = A * (listaMatricaX[indeksZadnjeMatrice] + (T / 2) * m1) + B;
                m3 = A * (listaMatricaX[indeksZadnjeMatrice] + (T / 2) * m2) + B;
                m4 = A * (listaMatricaX[indeksZadnjeMatrice] + T * m3) + B;

                Matrica Xi = listaMatricaX[indeksZadnjeMatrice] + (T / 6) * (m1 + 2 * m2 + 2 * m3 + m4);

                listaMatricaX.Add(Xi);
                indeksZadnjeMatrice++;

                if (indeksZadnjeMatrice % korakIspisa == 0)
                {
                    tb.Text += "T= " + T * indeksZadnjeMatrice + nl + Xi.ToFormatString() + nl + nl;
                }

                preostaliInterval -= T;
            }

            // Kreiranje Matlab datoteke

            System.IO.TextWriter pisac = new System.IO.StreamWriter("RungeKutta.m");
            pisac.Write("y=[");

            for (int i = 0; i < listaMatricaX[0].brojRedaka; i++)
            {
                foreach (Matrica m in listaMatricaX)
                {
                    pisac.Write(m[i, 0].ToString().Replace(',', '.') + " ");
                }
                if (i != listaMatricaX[0].brojRedaka - 1)
                {
                    pisac.Write(";");
                }
            }
            pisac.Write("];\nt=[");

            int    brojacZaIspis = 0;
            double krajIntervala = I;

            while (Math.Abs(krajIntervala) > Math.Pow(10, -7))
            {
                pisac.Write((brojacZaIspis * T).ToString().Replace(',', '.') + "  ");
                brojacZaIspis++;
                krajIntervala -= T;
            }

            pisac.Write((brojacZaIspis * T).ToString() + " ");

            pisac.Write("];\n");

            pisac.WriteLine("\nsubplot(3,1,1), plot (t,y); \n xlabel('Vrijeme'); \n ylabel('Vrijednost varijabli stanja');" +
                            " title ('Runge-Kutta', 'FontWeight','bold', 'Color','blue'); axis([" + "0 " + I.ToString().Replace(',', '.') + " min(min(y)) max(max(y))])");
            pisac.Close();
        }