C\#행렬 덧셈,마이너스,곱셈,곱셈 을 실현 하 는 방법

7382 단어 C#행렬
본 고 는 C\#행렬 덧셈,마이너스,곱셈,곱셈 을 실현 하 는 방법 을 실례 로 서술 하 였 다.모두 에 게 참고 하도록 공유 하 다.구체 적 으로 다음 과 같다.
1.몇 가지 기본 함수
1)2 차원 배열 이 행렬 인지 여 부 를 판단 한다.각 줄 의 열 수가 같 으 면 행렬 이 고 요소 가 없 는 2 차원 배열 은 행렬 이다.

/// <summary>
///              
/// </summary>
/// <param name="matrix">    </param>
/// <returns>true:    false:    </returns>
private static bool isMatrix(double[][] matrix)
{
 //      
 if (matrix.Length < 1) return true;
 //          ,     
 int count = matrix[0].Length;
 for (int i = 1; i < matrix.Length; i++)
 {
  if (matrix[i].Length != count)
  {
   return false;
  }
 }
 //      ,    
 return true;
}

2)행렬 의 줄 수 와 열 수 를 계산한다.즉,두 차원 의 Length 속성 을 계산 하 는 것 이다.

/// <summary>
///             
/// </summary>
/// <param name="matrix">  </param>
/// <returns>  :  、  </returns>
private static int[] MatrixCR(double[][] matrix)
{
 //              
 if (!isMatrix(matrix))
 {
  throw new Exception("          ");
 }
 //         0
 if (!isMatrix(matrix) || matrix.Length == 0)
 {
  return new int[2] { 0, 0 };
 }
 return new int[2] { matrix.Length, matrix[0].Length };
}

3)콘 솔 에 행렬 인쇄:앞 뒤 가 두 개의 char 형식의 양 이 라면 연산 자+앞 뒤 두 문 자 를 정수 로 바 꾸 고 앞 뒤 문 자 를 문자열 로 연결 하지 않 습 니 다.

/// <summary>
///     
/// </summary>
/// <param name="matrix">     </param>
private static void PrintMatrix(double[][] matrix)
{
 for (int i = 0; i < matrix.Length; i++)
 {
  for (int j = 0; j < matrix[i].Length; j++)
  {
   Console.Write(matrix[i][j] + "\t");
   //      :Console.Write(matrix[i][j] + '\t');
  }
  Console.WriteLine();
 }
}

2.행렬 덧셈

/// <summary>
///     
/// </summary>
/// <param name="matrix1">  1</param>
/// <param name="matrix2">  2</param>
/// <returns> </returns>
private static double[][] MatrixAdd(double[][] matrix1, double[][] matrix2)
{
 //  1   2      
 if (MatrixCR(matrix1)[0] != MatrixCR(matrix2)[0] ||
  MatrixCR(matrix1)[1] != MatrixCR(matrix2)[1])
 {
  throw new Exception("             ");
 }
 //     matrix1      
 double[][] result = new double[matrix1.Length][];
 for (int i = 0; i < result.Length; i++)
 {
  result[i] = new double[matrix1[i].Length];
 }
 //    :   2        1 ,    1
 for (int i = 0; i < result.Length; i++)
 {
  for (int j = 0; j < result[i].Length; j++)
  {
   result[i][j] = matrix1[i][j] + matrix2[i][j];
  }
 }
 return result;
}

3.매트릭스 마이너스

/// <summary>
///     
/// </summary>
/// <param name="matrix">  </param>
/// <returns>   </returns>
private static double[][] NegtMatrix(double[][] matrix)
{
 //     
 if (!isMatrix(matrix))
 {
  throw new Exception("            ");
 }
 //            
 if (matrix.Length == 0)
 {
  return new double[][] { };
 }
 //     matrix      
 double[][] result = new double[matrix.Length][];
 for (int i = 0; i < result.Length; i++)
 {
  result[i] = new double[matrix[i].Length];
 }
 //    :       
 for (int i = 0; i < result.Length; i++)
 {
  for (int j = 0; j < result[0].Length; j++)
  {
   result[i][j] = -matrix[i][j];
  }
 }
 return result;
}

4.행렬 수 곱 하기

/// <summary>
///     
/// </summary>
/// <param name="matrix">  </param>
/// <param name="num">  </param>
/// <returns> </returns>
private static double[][] MatrixMult(double[][] matrix, double num)
{
 //     
 if (!isMatrix(matrix))
 {
  throw new Exception("            ");
 }
 //            
 if (matrix.Length == 0)
 {
  return new double[][] { };
 }
 //     matrix      
 double[][] result = new double[matrix.Length][];
 for (int i = 0; i < result.Length; i++)
 {
  result[i] = new double[matrix[i].Length];
 }
 //    :            
 for (int i = 0; i < result.Length; i++)
 {
  for (int j = 0; j < result[0].Length; j++)
  {
   result[i][j] = matrix[i][j] * num;
  }
 }
 return result;
}

5.행렬 곱셈

/// <summary>
///     
/// </summary>
/// <param name="matrix1">  1</param>
/// <param name="matrix2">  2</param>
/// <returns> </returns>
private static double[][] MatrixMult(double[][] matrix1, double[][] matrix2)
{
 //     
 if (MatrixCR(matrix1)[1] != MatrixCR(matrix2)[0])
 {
  throw new Exception("matrix1      matrix2       ");
 }
 //          
 if (matrix1.Length == 0 || matrix2.Length == 0)
 {
  return new double[][] { };
 }
 //matrix1 m*n  ,matrix2 n*p  , result m*p  
 int m = matrix1.Length, n = matrix2.Length, p = matrix2[0].Length;
 double[][] result = new double[m][];
 for (int i = 0; i < result.Length; i++)
 {
  result[i] = new double[p];
 }
 //    :c[i,j]=Sigma(k=1→n,a[i,k]*b[k,j])
 for (int i = 0; i < m; i++)
 {
  for (int j = 0; j < p; j++)
  {
   //     
   for (int k = 0; k < n; k++)
   {
    result[i][j] += (matrix1[i][k] * matrix2[k][j]);
   }
  }
 }
 return result;
}

6.함수 호출 예시
1)주 함수 코드

static void Main(string[] args)
{
 //    
 double[][] matrix1 = new double[][] 
 {
  new double[] { 1, 2, 3 },
  new double[] { 4, 5, 6 },
  new double[] { 7, 8, 9 }
 };
 double[][] matrix2 = new double[][] 
 {
  new double[] { 2, 3, 4 },
  new double[] { 5, 6, 7 },
  new double[] { 8, 9, 10 }
 };
 //    
 PrintMatrix(MatrixAdd(matrix1, matrix2));
 Console.WriteLine();
 //    
 PrintMatrix(NegtMatrix(matrix1));
 Console.WriteLine();
 //    
 PrintMatrix(MatrixMult(matrix1, 3));
 Console.WriteLine();
 //    
 PrintMatrix(MatrixMult(
  new double[][] {
   new double[]{ 4, -1, 2 },
   new double[]{ 1, 1, 0 },
   new double[]{ 0, 3, 1 }},
  new double[][] {
   new double[]{ 1, 2 },
   new double[]{ 0, 1 },
   new double[]{ 3, 0 }}));
 Console.WriteLine();
 Console.ReadLine();
}

2)예시 실행 결과

본 고 에서 말 한 것 이 여러분 의 C\#프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기