首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

C# 矩陣運算完整實現:初始化、轉置、求逆、高斯消元

     編輯:更多程式設計知識

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) { ... }
}

逆矩陣算法:高斯-喬丹消元

  1. 構造增廣矩陣 [A | I] (尺寸 n × 2n)。
  2. **前向消元**:將左半部化為上三角(主元歸一、行消元)。
  3. **後向消元**:將左半部化為單位矩陣(從底向上消元)。
  4. 右半部即為 A⁻¹。
  5. 主元為 0 時進行行交換;全列為 0 則矩陣奇異,不可逆。

WinForms 測試程序


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。
  • 行列式僅支持 2/3 階:高階需遞歸/ LU 分解,代碼未實現。

生產環境建議

**勿在生產環境手寫矩陣庫**。請直接使用成熟庫:

  • Math.NET Numerics:Install-Package MathNet.Numerics,功能完整、高性能、單元測試覆蓋。
  • Accord.NET:機器學習/信號處理擴展。
  • ILNumerics:高性能可視化計算引擎。

總結

理解矩陣運算原理(特別是高斯消元求逆)是科學計算基礎。C# 通過索引器、一維數組可優雅實現矩陣結構。但**工程實踐中請站在巨人肩膀上**,引入 Math.NET 等標準庫,專注業務邏輯而非重造輪子。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved