C# 標準庫無內置矩陣類型,科學計算常需自行實現。本文提供一個**純 C# 矩陣結構體**與**運算類**,支持初始化、加減乘、轉置、行列式 (2×2/3×3)、逆矩陣 (高斯-喬丹消元),附 WinForms 測試代碼。
public class Matrix {
public int Rows { get; set; }
public int Cols { get; set; }
public float[] Data; // 一維數組行優先存儲: [i * Cols + j]
public Matrix(int rows, int cols) {
Rows = rows; Cols = cols;
Data = new float[rows * cols];
}
public float this[int i, int j] {
get => Data[i * Cols + j];
set => Data[i * Cols + j] = value;
}
}
public static class MatrixOps {
// 加法
public static Matrix Add(Matrix A, Matrix B) { ... }
// 減法
public static Matrix Subtract(Matrix A, Matrix B) { ... }
// 乘法
public static Matrix Multiply(Matrix A, Matrix B) { ... }
// 轉置
public static Matrix Transpose(Matrix A) { ... }
// 行列式 (僅 2×2、3×3)
public static float Determinant(Matrix A) { ... }
// 逆矩陣 (高斯-喬丹消元,增廣矩陣法)
public static Matrix Inverse(Matrix A) { ... }
}
[A | I] (尺寸 n × 2n)。A⁻¹。
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
var A = new Matrix(2, 2);
var B = new Matrix(2, 2);
var C = new Matrix(2, 2);
// 填充數據
int k = 1;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
A[i, j] = k++;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
B[i, j] = k++;
C = MatrixOps.Multiply(A, B);
output.Text = C[1, 1].ToString(); // 顯示結果
}
}
index = i * Cols + j,緊湊內存、訪問快。this[i, j] 提供自然語法。Rows/Cols 匹配,失敗拋出異常或返回錯誤碼。float 精度有限,科學計算建議用 double 或引入 Math.NET Numerics。**勿在生產環境手寫矩陣庫**。請直接使用成熟庫:
Install-Package MathNet.Numerics,功能完整、高性能、單元測試覆蓋。理解矩陣運算原理(特別是高斯消元求逆)是科學計算基礎。C# 通過索引器、一維數組可優雅實現矩陣結構。但**工程實踐中請站在巨人肩膀上**,引入 Math.NET 等標準庫,專注業務邏輯而非重造輪子。