轉置矩陣,矩陣的行列式,伴隨矩陣,逆矩陣的概念及C#求解

目錄

轉置矩陣

定義

性質

行列式

餘子式

代數餘子式

n階矩陣求行列式公式

意義

伴隨矩陣

逆矩陣

正交矩陣

兩個矩陣相加減

兩個矩陣相乘


轉置矩陣

  • 定義

            

  • 性質

    1. 矩陣的轉置矩陣的行列式等於這個矩陣的行列式。

    2. 注意因子反轉的次序。以此可推出方塊矩陣A可逆矩陣,當且僅當AT是可逆矩陣,在這種情況下有 (A−1)= (AT)−1

    3. 兩個縱列向量ab點積可計算爲

    4. 轉置是自身逆運算

    5.  即稱該矩陣爲正交矩陣,因爲AA−1 由此可得正交矩陣的其中一個性質 ==>> 

/// <summary>
/// 轉置矩陣
/// </summary>
/// <param name="arr"></param>
/// <returns></returns>
public float[,] TransposeMatrix(float[,] arr)
{
    for (int i = 0; i < arr.GetLength(0); i++)
    {
        for (int j = i + 1; j < arr.GetLength(1); j++)
        {
            float temp = arr[i, j];
            arr[i, j] = arr[j, i];
            arr[j, i] = temp;
        }
    }
    return arr;
}

行列式

  • 餘子式

            

  • 代數餘子式

             代數餘子式等於對應的餘子式的有符號的行列式

            

  • n階矩陣求行列式公式

            

  • 意義

             在2D中行列式代表着以基向量爲兩邊的平行四邊形的有符號面積.在3D環境中則代表着以基向量爲三邊的平行六面體有符號體積


/// <summary>
/// 求矩陣的行列式
/// </summary>
public static float GetDeterminant(float[,] arr)
{
    if (arr.GetLength(0) <= 2) return GetSubArrDeterminant(arr, 0, 0);
    float num = 0;
    for (int i = 0; i < arr.GetLength(1); i++)
    {
        num += GetSubArrDeterminant(arr, 0, i) * (float)Math.Pow(-1, i);
    }

    return num;
}

/// <summary>
/// 得到餘子式的行列式
/// </summary>
public static float GetSubArrDeterminant(float[,] arr, int x, int y)
{
    if (arr.GetLength(0) == 2)
    {
        return arr[0, 0] * arr[1, 1] - arr[0, 1] * arr[1, 0];
    }

    return arr[x, y] * GetDeterminant(GetSubArr(arr, x, y));
}

/// <summary>
/// 得到餘子式
/// </summary>
public static float[,] GetSubArr(float[,] arr, int x, int y)
{
    if (arr.GetLength(0) <= 1) return arr;
    float[,] temp = new float[arr.GetLength(0) - 1, arr.GetLength(1) - 1];
    for (int i = 0; i < arr.GetLength(0); i++)
    {
        if (i == x) continue;
        for (int j = 0; j < arr.GetLength(1); j++)
        {
            if (j == y) continue;
            temp[i < x ? i : i - 1, j < y ? j : j - 1] = arr[i, j];
        }
    }

    return temp;
}

伴隨矩陣

  • 矩陣M的代數餘子式矩陣的轉置矩陣(挺繞口)
/// <summary>
/// 求矩陣的伴隨矩陣
/// 求每個元素的代數餘子式,組成一個矩陣
/// </summary>
public static float[,] GetAdjointMatrix(float[,] arr)
{
    if (arr.GetLength(0) <= 2) return arr;
    float[,] result = new float[arr.GetLength(0), arr.GetLength(1)];
    for (int i = 0; i < arr.GetLength(0); i++)
    {
        for (int j = 0; j < arr.GetLength(1); j++)
        {
            float[,] temp = GetSubArr(arr, i, j);
            result[i, j] = (float)Math.Pow(-1, i + j) * GetDeterminant(temp);
        }
    }
    return result;
}

逆矩陣

  • 定義

            假設一個方陣M,方陣M的逆,記作M^-1,方陣的逆也是一個矩陣.當MM^-1相乘的時候,結果是單位矩陣I

  • 求解方法

            adj M叫做矩陣M的伴隨矩陣,定義爲矩陣M的代數餘子式矩陣的轉置矩陣(挺繞口)

        

public float[,] Inverse(float[,] arr)
{
    float det = GetDeterminant(arr);
    if (det.Equals(0))
    {
        Console.WriteLine("行列式爲0,沒有逆矩陣");
    }
    else
    {
        float[,] adjM = GetAdjointMatrix(arr);
        for (int i = 0; i < arr.GetLength(0); i++)
        {
            for (int j = i + 1; j < arr.GetLength(1); j++)
            {
                arr[j, i] /= det;
            }
        }
    }
    return arr;
}

正交矩陣

 

兩個矩陣相加減

即它們相同位置的元素相加減

 

 

兩個矩陣相乘

 

乘法只有在第一個矩陣的列數和第二個矩陣的行數相同時纔有意義

如果想要理解矩陣變換的幾何意義,推薦看一下這個視頻

https://www.bilibili.com/video/av6731067 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章