//матрица на матрицу private void button2_Click(object sender, EventArgs e) { int M = 3; int N = 4; int Q = 2; var A = new double[M * N]; var B = new double[N * Q]; double[] C; for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { A[i * N + j] = i + j; } } for (int i = 0; i < N; i++) { for (int j = 0; j < Q; j++) { B[i * Q + j] = j * 3.1; } } MathFuncsMatrix myfunc = new MathFuncsMatrix(); C = myfunc.Mult(A, B, M, N, Q); }
//матрица на вектор private void button1_Click_1(object sender, EventArgs e) { int N = 4; int M = 10; double[] a = new double[M * N]; double[] b = new double[N]; double[] c; for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { a[i * N + j] = i + j; } } for (int j = 0; j < N; j++) { b[j] = j; } MathFuncsMatrix myfunc = new MathFuncsMatrix(); c = myfunc.MultVector(a, b, M, N); }
public void MatrixTransp() { MathFuncsMatrix mymatr1 = new MathFuncsMatrix(); MathFuncsMatrixSeq mymatr2 = new MathFuncsMatrixSeq(); int N = 1000; int M = 500; double[] a = new double[N * M]; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { a[i * M + j] = i + j; } } Stopwatch sw1 = new Stopwatch(); sw1.Start(); mymatr1.Transp(a, N, M); sw1.Stop(); double secPar = sw1.ElapsedMilliseconds / 1000.0; Stopwatch sw2 = new Stopwatch(); sw2.Start(); mymatr2.Transp(a, N, M); sw2.Stop(); double secSeq = sw2.ElapsedMilliseconds / 1000.0; Assert.IsTrue(secPar < secSeq, "последовательный вариант быстрее!"); }
public void MatrixMult() { MathFuncsMatrix mymatr1 = new MathFuncsMatrix(); MathFuncsMatrixSeq mymatr2 = new MathFuncsMatrixSeq(); int M = 1000; int N = 2000; int Q = 100; var A = new double[M * N]; var B = new double[N * Q]; for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { A[i * N + j] = i + j; } } for (int i = 0; i < N; i++) { for (int j = 0; j < Q; j++) { B[i * Q + j] = j * 3.1; } } Stopwatch sw1 = new Stopwatch(); sw1.Start(); mymatr1.Mult(A, B, M, N, Q); sw1.Stop(); double secPar = sw1.ElapsedMilliseconds / 1000.0; Stopwatch sw2 = new Stopwatch(); sw2.Start(); mymatr2.Mult(A, B, M, N, Q); sw2.Stop(); double secSeq = sw2.ElapsedMilliseconds / 1000.0; Assert.IsTrue(secPar < secSeq, "последовательный вариант быстрее!"); }
public void MatrixVector() { MathFuncsMatrix mymatr1 = new MathFuncsMatrix(); MathFuncsMatrixSeq mymatr2 = new MathFuncsMatrixSeq(); int N = 1000; int M = 500; double[] a = new double[M * N]; double[] b = new double[N]; for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { a[i * N + j] = i + j; } } for (int j = 0; j < N; j++) { b[j] = j; } Stopwatch sw1 = new Stopwatch(); sw1.Start(); mymatr1.MultVector(a, b, M, N); sw1.Stop(); double secPar = sw1.ElapsedMilliseconds / 1000.0; Stopwatch sw2 = new Stopwatch(); sw2.Start(); mymatr2.MultVector(a, b, M, N); sw2.Stop(); double secSeq = sw2.ElapsedMilliseconds / 1000.0; Assert.IsTrue(secPar < secSeq, "последовательный вариант быстрее!"); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //матрицы //транспонирование private void btnMatrix_Click(object sender, EventArgs e) { int N = 4; int M = 5; double[] a = new double[N * M]; double[] c; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { a[i * M + j] = i + j; } } MathFuncsMatrix myfunc = new MathFuncsMatrix(); c = myfunc.Transp(a, N, M); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { rtbMatrix.Text += String.Format("{0:f2} ", a[i * M + j]); } rtbMatrix.Text += Environment.NewLine; } for (int j = 0; j < M; j++) { for (int i = 0; i < N; i++) { rtbResult.Text += String.Format("{0:f2} ", c[j * N + i]); } rtbResult.Text += Environment.NewLine; } }