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\#프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.