public void GaussPartialPivotTimeTest(int numberOfAgents, int count) { MatrixGenerator mg = new MatrixGenerator(numberOfAgents); MyMatrix <double> macierz = new MyMatrix <double>(mg.size, mg.size); MyMatrix <double> macierzKopia = new MyMatrix <double>(mg.size, mg.size); double[] wektor = new double[mg.size]; double[] wektorKopia = new double[mg.size]; //przygotowanie macierzy i wektorów macierz = mg.GenerateMatrix(); macierzKopia = mg.GenerateMatrix(); wektor = GenerateVector(mg.size); wektorKopia = GenerateVector(mg.size); //liczenie czasu double[] czasy = new double[count]; double suma = 0.0; double srednia = 0.0; for (int i = 0; i < count; i++) { var watchDouble = Stopwatch.StartNew(); macierz.GaussPartialPivot(wektor); watchDouble.Stop(); var elapsedMsDouble = watchDouble.ElapsedMilliseconds; czasy[i] = elapsedMsDouble; for (var j = 0; j < macierz.Rows(); j++) { for (var k = 0; k < macierz.Columns(); k++) { macierz[j, k] = macierzKopia[j, k]; wektor[j] = wektorKopia[j]; } } suma += czasy[i]; } srednia = suma / count; StreamWriter writer = new StreamWriter("CzasGaussPartialPivot.csv", append: true); if (writer != null) { writer.WriteLine(srednia); } writer.Close(); Console.WriteLine("Średni czas GaussPartialPivot" + ": " + srednia + "ms"); }
public static ApproximationFunction GetApproximation(int polynomialDegree, double[] arguments, double[] values) { var sUnknowns = polynomialDegree * 2 + 1; var sMatrix = new double[arguments.Length, sUnknowns]; var sVector = new double[sUnknowns]; for (var i = 0; i < arguments.Length; i++) { for (var j = 0; j < sUnknowns; j++) { sMatrix[i, j] = Math.Pow(arguments[i], j); sVector[j] += sMatrix[i, j]; } } var tUnknowns = polynomialDegree + 1; var tMatrix = new double[arguments.Length, sUnknowns]; var tVector = new double[sUnknowns]; for (var i = 0; i < arguments.Length; i++) { for (var j = 0; j < tUnknowns; j++) { tMatrix[i, j] = values[i] * sMatrix[i, j]; tVector[j] += tMatrix[i, j]; } } var rMatrix = new double[tUnknowns, tUnknowns]; var rVector = new double[tUnknowns]; var offset = 0; for (var i = 0; i < tUnknowns; i++) { for (var j = 0; j < tUnknowns; j++) { rMatrix[i, j] = sVector[j + offset]; } rVector[i] = tVector[i]; offset += 1; } var matrix = new MyMatrix <double>(rMatrix); matrix.GaussPartialPivot(rVector); return(new ApproximationFunction(rVector, arguments, values)); }
public MyMatrix <double> GenerateMatrix() { MyMatrix <double> macierz = new MyMatrix <double>(size, size); for (int i = 0; i < macierz.Rows(); i++) { for (int j = 0; j < macierz.Columns(); j++) { macierz[i, j] = GenerateValue(i, j); //generate value } } return(macierz); }
public void SeidelTimeTest(int numberOfAgents, int count, double accuracy) { MatrixGenerator mg = new MatrixGenerator(numberOfAgents); MyMatrix <double> macierz = new MyMatrix <double>(mg.size, mg.size); double[] wektor = new double[mg.size]; //przygotowanie macierzy i wektorów macierz = mg.GenerateMatrix(); wektor = GenerateVector(mg.size); //liczenie czasu double[] czasy = new double[count]; double suma = 0.0; double srednia = 0.0; for (int i = 0; i < count; i++) { var watchDouble = Stopwatch.StartNew(); macierz.SeidelAccuracy(wektor, accuracy); watchDouble.Stop(); var elapsedMsDouble = watchDouble.ElapsedMilliseconds; czasy[i] = elapsedMsDouble; suma += czasy[i]; wektor = GenerateVector(mg.size); } srednia = suma / count; string name = "CzasSeidel" + accuracy + ".csv"; StreamWriter writer = new StreamWriter(name, append: true); if (writer != null) { writer.WriteLine(srednia); } writer.Close(); Console.WriteLine("Średni czas Seidel " + accuracy + ": " + srednia + "ms"); }