Beispiel #1
0
        //utworzenie macierzy i obliczenie rozpływu prądów
        private void CalculateResults()
        {
            par.CreateMatrix();

            int status = MetodaGaussa.RozRowMacGaussa(par.A, par.B, par.I, 1e-30);

            if (status != 0)
            {
                MessageBox.Show("Wystąpił błąd podczas wykonywania obliczeń\nkod błędu: " + status.ToString(),
                                "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            //zapis rozpływu pradów w formularzu
            for (int i = 1; i <= 3; i++)
            {
                Label l = (Label)Controls.Find("label_I" + i.ToString() + "_Value", true).FirstOrDefault();

                if (par.I[i].Re < 0.001 || par.I[i].Re > 1000)
                {
                    l.Text = par.I[i].Re.ToString("E3");
                }
                else
                {
                    l.Text = par.I[i].Re.ToString("N3");
                }

                if (par.I[i].Im != 0)
                {
                    if (par.I[i].Im < 0)
                    {
                        l.Text += "   -   ";
                    }
                    else
                    {
                        l.Text += "   +   ";
                    }

                    if (par.I[i].Im < 0.001 || par.I[i].Im > 1000)
                    {
                        l.Text += Math.Abs(par.I[i].Im).ToString("E3");
                    }
                    else
                    {
                        l.Text += Math.Abs(par.I[i].Im).ToString("N3");
                    }

                    l.Text += "j";
                }
                l.Text += " [A]";
            }

            //zapis błędu względnego
            double error = ((-par.I[1] + par.I[2] + par.I[3]) / par.I[1]).Abs * 100;

            label_errorValue.Text = error.ToString("E2") + " [%]";

            ShowPower();
        }
Beispiel #2
0
        //----------------------------------
        public override int Rozwiaz()
        {
            int i, k, blad = 0;

            double[] dX = new double[N + 1];
            double[] XX = new double[N + 1];
            double[] Y  = new double[N + 1];
            double[,] MacJac = new double[N + 1, N + 1];
            double ni, ni1;

            k = 0;
            do
            {//Konstrukcja procesu iteracyjnego
                ni  = 0;
                ni1 = 0;
                k++;
                //Konstrukcja macierzy Jacobiego MacJac
                blad = GeneracjaMacierzyJacobiego(MacJac, X, N, epsr);
                Y    = FunNieLin(X);
                for (i = 1; i <= N; i++)
                {
                    XX[i] = Y[i];
                }
                //Rozwiązanie układu )
                blad = MetodaGaussa.RozRowMacGaussa(MacJac, XX, dX, epsg);
                if (blad == 0)
                {
                    for (i = 1; i <= N; i++)
                    {
                        ni   += Math.Abs(dX[i]);
                        ni1  += Math.Abs(Y[i]);
                        X[i] -= dX[i];
                    }
                }
                else
                {
                    return(2);
                }
            }while (!(ni < eps || k > maxit || blad != 0));
            if (blad == 0)
            {
                if (k > maxit)
                {
                    return(1);
                }
                else
                {
                    return(0);
                }
            }
            else
            {
                return(blad);
            }
        }//Koniec Rozwiaz()
Beispiel #3
0
        }//GeneracjaMacierzyJacobiego

        //------------------------------------------------------------------
        //-----------------------------------------------------------------------
        public int MetodaNewtona(FunWektorWektorDelegate FF)
        {
            int i, k, blad = 0;

            double[] dX = new double[N + 1];
            double[] XX = new double[N + 1];
            double[] Y  = new double[N + 1];
            double[,] MacJac = new double[N + 1, N + 1];
            double ni;

            k = 0;
            do
            {//Konstrukcja procesu iteracyjnego
                ni = 0;
                k++;
                //Konstrukcja macierzy Jacobiego MacJac
                blad = GeneracjaMacierzyJacobiego(FF, MacJac, X, N, epsr);
                //FF(Y, X);
                Y = FF(X);
                for (i = 1; i <= N; i++)
                {
                    XX[i] = Y[i];
                }
                //Rozwiązanie układu )
                blad = MetodaGaussa.RozRowMacGaussa(MacJac, XX, dX, epsg);
                if (blad == 0)
                {
                    for (i = 1; i <= N; i++)
                    {
                        ni   += Math.Abs(dX[i]);
                        X[i] -= dX[i];
                    }
                }
                else
                {
                    return(2);
                }
            }while (!(ni < eps || k > maxit || blad != 0));
            if (blad == 0)
            {
                if (k > maxit)
                {
                    return(1);
                }
                else
                {
                    return(0);
                }
            }
            else
            {
                return(blad);
            }
        }