//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(); }
//---------------------------------- 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()
}//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); } }