private static void performGaussianFullpivotingOnFraction(MyMatrix <Fraction> matrix, TextWriter timeWriter) { matrix.printMatrix(); var watch = System.Diagnostics.Stopwatch.StartNew(); matrix.gaussianEliminationCompletePivoting(); watch.Stop(); matrix.printVectorX(); double elapsedMs = watch.Elapsed.TotalMilliseconds; Console.WriteLine(elapsedMs); timeWriter.Write(elapsedMs); timeWriter.Write(";"); }
public static MyMatrix <T> operator +(MyMatrix <T> x, MyMatrix <T> y) { if (x._rows == y._rows && x._columns == y._columns) { MyMatrix <T> result = new MyMatrix <T>(x._rows, x._columns); for (int i = 0; i < result._rows; ++i) { for (int j = 0; j < result._columns; ++j) { result[i, j] = (dynamic)x[i, j] + y[i, j]; } } return(result); } else { throw new ArgumentException("Matrixes don`t match operator+ requirements!"); } }
private static void performThirdOperationOnMyFraction(MyMatrix <Fraction> matrixA, MyMatrix <Fraction> matrixB, MyMatrix <Fraction> matrixC, TextWriter timeWriter) { matrixA.printMatrix(); Console.WriteLine("*************"); matrixB.printMatrix(); Console.WriteLine("**************"); matrixC.printMatrix(); Console.WriteLine("=============="); var watch = System.Diagnostics.Stopwatch.StartNew(); MyMatrix <Fraction> matrixTemp = matrixB * matrixC; matrixTemp = matrixA * matrixTemp; watch.Stop(); double elapsedMs = watch.Elapsed.TotalMilliseconds; matrixTemp.printMatrix(); Console.WriteLine(elapsedMs); timeWriter.Write(elapsedMs); timeWriter.Write(";"); }
private static void performFirstOperationOnMyFraction(MyMatrix <Fraction> matrix, TextWriter timeWriter) { matrix.printMatrix(); Console.WriteLine("***************"); matrix.printVectorB(); Console.WriteLine("=============="); Fraction[] vector; var watch = System.Diagnostics.Stopwatch.StartNew(); vector = matrix * matrix.VectorB; watch.Stop(); double elapsedMs = watch.Elapsed.TotalMilliseconds; foreach (Fraction element in vector) { Console.WriteLine(element); } Console.WriteLine(elapsedMs); timeWriter.Write(elapsedMs); timeWriter.Write(";"); }
public static MyMatrix <T> operator *(MyMatrix <T> x, MyMatrix <T> y) { if (x._columns == y._rows) { MyMatrix <T> result = new MyMatrix <T>(x._columns, y._rows); for (int i = 0; i < y._rows; i++) { for (int j = 0; j < y._columns; j++) { for (int k = 0; k < y._rows; k++) { result[i, j] += (dynamic)x[i, k] * y[k, j]; } } } return(result); } else { throw new ArgumentException("Matrixes don`t match operator* requirements!"); } }
private static void performSecondOperationOnDouble(MyMatrix <double> matrixA, MyMatrix <double> matrixB, MyMatrix <double> matrixC, TextWriter timeWriter) { matrixA.printMatrix(); Console.WriteLine("+++++++++++++"); matrixB.printMatrix(); Console.WriteLine("+++++++++++++"); matrixC.printMatrix(); Console.WriteLine("************"); matrixA.printVectorB(); Console.WriteLine("=============="); var watch = System.Diagnostics.Stopwatch.StartNew(); MyMatrix <double> matrixTemp = matrixA + matrixB; matrixTemp = matrixTemp + matrixC; double[] vector = matrixTemp * matrixA.VectorB; watch.Stop(); double elapsedMs = watch.Elapsed.TotalMilliseconds; foreach (double element in vector) { Console.WriteLine(element); } Console.WriteLine(elapsedMs); timeWriter.Write(elapsedMs); timeWriter.Write(";"); }
static void Main(string[] args) { using (TextReader tw = File.OpenText("daneFloat.txt")) { TextWriter czasyFloatWriter = new StreamWriter("czasyMojeFloat.csv"); for (int i = 2; i <= 29; i++) { int size = Int32.Parse(tw.ReadLine()); MyMatrix <float> matrixA = new MyMatrix <float>(size, size); for (int j = 0; j < size; j++) { string row = tw.ReadLine(); string[] values = row.Split(null); for (int k = 0; k < size; k++) { matrixA[j, k] = float.Parse(values[k], CultureInfo.InvariantCulture); } } tw.ReadLine(); MyMatrix <float> matrixB = new MyMatrix <float>(size, size); for (int j = 0; j < size; j++) { string row = tw.ReadLine(); string[] values = row.Split(null); for (int k = 0; k < size; k++) { matrixB[j, k] = float.Parse(values[k], CultureInfo.InvariantCulture); } } tw.ReadLine(); MyMatrix <float> matrixC = new MyMatrix <float>(size, size); for (int j = 0; j < size; j++) { string row = tw.ReadLine(); string[] values = row.Split(null); for (int k = 0; k < size; k++) { matrixC[j, k] = float.Parse(values[k], CultureInfo.InvariantCulture); } } tw.ReadLine(); float[] VectorB = new float[size]; string vecB = tw.ReadLine(); string vecX = tw.ReadLine(); string[] valuesB = vecB.Split(null); for (int k = 0; k < size; k++) { matrixA.VectorB[k] = float.Parse(valuesB[k], CultureInfo.InvariantCulture); } performFirstOperationOnFloat(matrixA, czasyFloatWriter); performSecondOperationOnFloat(matrixA, matrixB, matrixC, czasyFloatWriter); performThirdOperationOnFloat(matrixA, matrixB, matrixC, czasyFloatWriter); performGaussianpivotingOnFloat(matrixA, czasyFloatWriter); performGaussianPartialpivotingOnFloat(matrixA, czasyFloatWriter); performGaussianFullpivotingOnFloat(matrixA, czasyFloatWriter); czasyFloatWriter.Write("\r\n"); } czasyFloatWriter.Close(); } using (TextReader tw = File.OpenText("daneDouble.txt")) { TextWriter czasyDoubleWriter = new StreamWriter("czasyMojeDouble.csv"); for (int i = 2; i <= 29; i++) { int size = int.Parse(tw.ReadLine()); MyMatrix <double> matrixA = new MyMatrix <double>(size, size); for (int j = 0; j < size; j++) { string row = tw.ReadLine(); string[] values = row.Split(null); for (int k = 0; k < size; k++) { matrixA[j, k] = Double.Parse(values[k], CultureInfo.InvariantCulture); } } tw.ReadLine(); MyMatrix <double> matrixB = new MyMatrix <double>(size, size); for (int j = 0; j < size; j++) { string row = tw.ReadLine(); string[] values = row.Split(null); for (int k = 0; k < size; k++) { matrixB[j, k] = Double.Parse(values[k], CultureInfo.InvariantCulture); } } tw.ReadLine(); MyMatrix <double> matrixC = new MyMatrix <double>(size, size); for (int j = 0; j < size; j++) { string row = tw.ReadLine(); string[] values = row.Split(null); for (int k = 0; k < size; k++) { matrixC[j, k] = Double.Parse(values[k], CultureInfo.InvariantCulture); } } tw.ReadLine(); double[] VectorB = new double[size]; string vecB = tw.ReadLine(); string vecX = tw.ReadLine(); string[] valuesB = vecB.Split(null); for (int k = 0; k < size; k++) { matrixA.VectorB[k] = Double.Parse(valuesB[k], CultureInfo.InvariantCulture); } performFirstOperationOnDouble(matrixA, czasyDoubleWriter); performSecondOperationOnDouble(matrixA, matrixB, matrixC, czasyDoubleWriter); performThirdOperationOnDouble(matrixA, matrixB, matrixC, czasyDoubleWriter); performGaussianpivotingOnDouble(matrixA, czasyDoubleWriter); performGaussianPartialpivotingOnDouble(matrixA, czasyDoubleWriter); performGaussianFullpivotingOnDouble(matrixA, czasyDoubleWriter); czasyDoubleWriter.Write("\r\n"); } czasyDoubleWriter.Close(); } using (TextReader tw = File.OpenText("daneFraction.txt")) { TextWriter czasyFractionWriter = new StreamWriter("czasyMojeFraction.csv"); for (int i = 2; i <= 29; i++) { int size = Int32.Parse(tw.ReadLine()); MyMatrix <Fraction> matrixA = new MyMatrix <Fraction>(size, size); for (int j = 0; j < size; j++) { string row = tw.ReadLine(); string[] values = row.Split(null); for (int k = 0; k < size; k++) { string[] fraction = values[k].Split('/'); matrixA[j, k] = new Fraction(int.Parse(fraction[0]), int.Parse(fraction[1])); } } tw.ReadLine(); MyMatrix <Fraction> matrixB = new MyMatrix <Fraction>(size, size); for (int j = 0; j < size; j++) { string row = tw.ReadLine(); string[] values = row.Split(null); for (int k = 0; k < size; k++) { string[] fraction = values[k].Split('/'); matrixB[j, k] = new Fraction(int.Parse(fraction[0]), int.Parse(fraction[1])); } } tw.ReadLine(); MyMatrix <Fraction> matrixC = new MyMatrix <Fraction>(size, size); for (int j = 0; j < size; j++) { string row = tw.ReadLine(); string[] values = row.Split(null); for (int k = 0; k < size; k++) { string[] fraction = values[k].Split('/'); matrixC[j, k] = new Fraction(int.Parse(fraction[0]), int.Parse(fraction[1])); } } tw.ReadLine(); double[] VectorB = new double[size]; string vecB = tw.ReadLine(); string vecX = tw.ReadLine(); string[] valuesB = vecB.Split(null); for (int k = 0; k < size; k++) { string[] fraction = valuesB[k].Split('/'); matrixA.VectorB[k] = new Fraction(int.Parse(fraction[0]), int.Parse(fraction[1])); } performFirstOperationOnMyFraction(matrixA, czasyFractionWriter); performSecondOperationOnMyFraction(matrixA, matrixB, matrixC, czasyFractionWriter); performThirdOperationOnMyFraction(matrixA, matrixB, matrixC, czasyFractionWriter); performGaussianpivotingOnFraction(matrixA, czasyFractionWriter); performGaussianPartialpivotingOnFraction(matrixA, czasyFractionWriter); performGaussianFullpivotingOnFraction(matrixA, czasyFractionWriter); czasyFractionWriter.Write("\r\n"); } czasyFractionWriter.Close(); } Console.WriteLine("TESTS FINISHED"); Console.ReadKey(); }