📄 calculate.cs
字号:
using System;
using System.Threading;
namespace Engineer2008.Martrix
{
internal class Calculate
{
#region MATT A[M,N]->B[N,M]
public static void MATT(int M, int N, double[,] A, double[,] B)
{
int I, J; for (I = 0; I < M; I++) for (J = 0; J < N; J++) B[J, I] = A[I, J];
}
public static void ParallelMATT(int M, int N, double[,] A, double[,] B)
{
int J; Parallel.For(0, M, I => { for (J = 0; J < N; J++) B[J, I] = A[I, J]; });
}
#endregion
#region MATMUL A[M,N]*B[N]=C[M]
public static void MATMUL(int M, int N, double[,] A, double[] B, double[] C)
{
int I, J; for (I = 0; I < M; I++) { C[I] = 0; for (J = 0; J < N; J++)C[I] += A[I, J] * B[J]; }
}
public static void ParallelMATMUL(int M, int N, double[,] A, double[] B, double[] C)
{
int J; Parallel.For(0, M, I => { C[I] = 0; for (J = 0; J < N; J++)C[I] += A[I, J] * B[J]; });
}
#endregion
#region TMATMUL A[M,N]*B[M]=C[N](用A的转值乘以B)
public static void TMATMUL(int M, int N, double[,] A, double[] B, double[] C)
{
int I, J; for (I = 0; I < N; I++) { C[I] = 0; for (J = 0; J < M; J++)C[I] += A[J, I] * B[J]; }
}
public static void ParallelTMATMUL(int M, int N, double[,] A, double[] B, double[] C)
{
int J; Parallel.For(0, N, I => { C[I] = 0; for (J = 0; J < M; J++)C[I] += A[J, I] * B[J]; });
}
#endregion
#region MATMUL A[M][N]*B[N][L]=C[M,L]
public static void MATMUL(int M, int N, int L, double[,] A, double[,] B, double[,] C)
{
int I, J, K; for (K = 0; K < L; K++) for (I = 0; I < M; I++) { C[I, K] = 0.0; for (J = 0; J < N; J++) C[I, K] += A[I, J] * B[J, K]; }
}
public static void ParallelMATMUL(int M, int N, int L, double[,] A, double[,] B, double[,] C)
{
int I, J; Parallel.For(0, L, K => { for (I = 0; I < M; I++) { C[I, K] = 0.0; for (J = 0; J < N; J++) C[I, K] += A[I, J] * B[J, K]; } });
}
public static void Parallel2MATMUL(int M, int N, int L, double[,] A, double[,] B, double[,] C)
{
int J; Parallel.For(0, L, K => { Parallel.For(0, M, I => { C[I, K] = 0.0; for (J = 0; J < N; J++) C[I, K] += A[I, J] * B[J, K]; }); });
}
#endregion
#region TMATMUL A[M][N]*B[M][L]=C[N,L] (用A的转值乘以B)
public static void TMATMUL(int M, int N, int L, double[,] A, double[,] B, ref double[,] C)
{
int I, J, K; for (K = 0; K < L; K++) for (I = 0; I < N; I++) { C[I, K] = 0.0; for (J = 0; J < M; J++) C[I, K] += A[J, I] * B[J, K]; }
}
public static void ParallelTMATMUL(int M, int N, int L, double[,] A, double[,] B, double[,] C)
{
int I, J; Parallel.For(0, L, K => { for (I = 0; I < N; I++) { C[I, K] = 0.0; for (J = 0; J < M; J++) C[I, K] += A[J, I] * B[J, K]; } });
}
public static void Parallel2TMATMUL(int M, int N, int L, double[,] A, double[,] B,double[,] C)
{
int J; Parallel.For(0, L, K => { Parallel.For(0, N, I => { C[I, K] = 0.0; for (J = 0; J < M; J++) C[I, K] += A[J, I] * B[J, K]; }); });
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -