C#實(shí)現(xiàn)將一個(gè)矩陣分解為對(duì)稱(chēng)矩陣與反稱(chēng)矩陣之和的方法
本文實(shí)例講述了C#實(shí)現(xiàn)將一個(gè)矩陣分解為對(duì)稱(chēng)矩陣與反稱(chēng)矩陣之和的方法。分享給大家供大家參考。具體如下:
1.理論依據(jù)
對(duì)任意n階方陣A,有 A=(A+T(A))/2+(A-T(A))/2,其中T(A)是A的轉(zhuǎn)置,(A+T(A))/2是一個(gè)對(duì)稱(chēng)矩陣,(A-T(A))/2是一個(gè)反稱(chēng)矩陣。
2.求出對(duì)稱(chēng)矩陣部分的函數(shù)
/// <summary> /// 把矩陣分解為對(duì)稱(chēng)矩陣與反稱(chēng)矩陣之和:對(duì)稱(chēng)矩陣 /// </summary> /// <param name="matrix">矩陣</param> /// <returns></returns> private static double[][] SymmetricPart(double[][] matrix) { //合法性校驗(yàn):矩陣必須為方陣 if ( MatrixCR(matrix)[0] != MatrixCR(matrix)[1]) { throw new Exception("matrix 不是一個(gè)方陣"); } //矩陣中沒(méi)有元素的情況 if (matrix.Length == 0) { return new double[][] { }; } //生成一個(gè)與matrix同型的空矩陣 double[][] result = new double[matrix.Length][]; for (int i = 0; i < result.Length; i++) { result[i] = new double[matrix[i].Length]; } //對(duì)稱(chēng)矩陣為 (A+T(A))/2 其中A為原矩陣,T(A)為A的轉(zhuǎn)置矩陣 for (int i = 0; i < result.Length; i++) { for (int j = 0; j < result.Length; j++) { result[i][j] = (matrix[i][j] + matrix[j][i]) / 2.0; } } return result; }
3.求出反稱(chēng)矩陣部分的函數(shù)
/// <summary> /// 把矩陣分解為對(duì)稱(chēng)矩陣與反稱(chēng)矩陣之和:反稱(chēng)矩陣 /// </summary> /// <param name="matrix">矩陣</param> /// <returns></returns> private static double[][] SkewSymmetricPart(double[][] matrix) { //合法性校驗(yàn):矩陣必須為方陣 if (MatrixCR(matrix)[0] != MatrixCR(matrix)[1]) { throw new Exception("matrix 不是一個(gè)方陣"); } //矩陣中沒(méi)有元素的情況 if (matrix.Length == 0) { return new double[][] { }; } //生成一個(gè)與matrix同型的空矩陣 double[][] result = new double[matrix.Length][]; for (int i = 0; i < result.Length; i++) { result[i] = new double[matrix[i].Length]; } //反稱(chēng)矩陣為 (A-T(A))/2 其中A為原矩陣,T(A)為A的轉(zhuǎn)置矩陣 for (int i = 0; i < result.Length; i++) { for (int j = 0; j < result.Length; j++) { result[i][j] = (matrix[i][j] - matrix[j][i]) / 2.0; } } return result; }
4.其他函數(shù)
/// <summary> /// 判斷一個(gè)二維數(shù)組是否為矩陣 /// </summary> /// <param name="matrix">二維數(shù)組</param> /// <returns>true:是矩陣 false:不是矩陣</returns> private static bool isMatrix(double[][] matrix) { //空矩陣是矩陣 if (matrix.Length < 1) return true; //不同行列數(shù)如果不相等,則不是矩陣 int count = matrix[0].Length; for (int i = 1; i < matrix.Length; i++) { if (matrix[i].Length != count) { return false; } } //各行列數(shù)相等,則是矩陣 return true; } /// <summary> /// 計(jì)算一個(gè)矩陣的行數(shù)和列數(shù) /// </summary> /// <param name="matrix">矩陣</param> /// <returns>數(shù)組:行數(shù)、列數(shù)</returns> private static int[] MatrixCR(double[][] matrix) { //接收到的參數(shù)不是矩陣則報(bào)異常 if (!isMatrix(matrix)) { throw new Exception("接收到的參數(shù)不是矩陣"); } //空矩陣行數(shù)列數(shù)都為0 if (!isMatrix(matrix) || matrix.Length == 0) { return new int[2] { 0, 0 }; } return new int[2] { matrix.Length, matrix[0].Length }; } /// <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"); //注意不能寫(xiě)為:Console.Write(matrix[i][j] + '\t'); } Console.WriteLine(); } }
5.Main函數(shù)代碼及程序運(yùn)行示例
static void Main(string[] args) { double[][] matrix = new double[][] { new double[] { 1, 2, 3 }, new double[] { 4, 5, 6 }, new double[] { 7, 8, 9 } }; Console.WriteLine("原矩陣"); PrintMatrix(matrix); Console.WriteLine("對(duì)稱(chēng)矩陣"); PrintMatrix(SymmetricPart(matrix)); Console.WriteLine("反稱(chēng)矩陣"); PrintMatrix(SkewSymmetricPart(matrix)); Console.ReadLine(); }
運(yùn)行效果如下圖所示:
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
C#中WPF ListView綁定數(shù)據(jù)的實(shí)例詳解
這篇文章主要介紹了C#中WPF ListView綁定數(shù)據(jù)的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10c#?Task.Wait()與awaiat?Task異常處理的區(qū)別說(shuō)明
這篇文章主要介紹了c#?Task.Wait()與awaiat?Task異常處理的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06httpwebreqeust讀取httponly的cookie方法
下面小編就為大家?guī)?lái)一篇httpwebreqeust讀取httponly的cookie方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01C#難點(diǎn)逐個(gè)擊破(3):params數(shù)組參數(shù)
注意,這里的paras全稱(chēng)是array parameter,也就是數(shù)組參數(shù)。 paras類(lèi)型參數(shù)主要用于在對(duì)數(shù)組長(zhǎng)度未知(可變)的情況下進(jìn)行函數(shù)聲明。2010-02-02C# RGB圖像和灰度圖像互轉(zhuǎn)的實(shí)現(xiàn)
在我們的圖像類(lèi)型教程中定義了RGB顏色模型和灰度格式,本文主要介紹了C# RGB圖像和灰度圖像互轉(zhuǎn)的實(shí)現(xiàn),文中通過(guò)代碼介紹的非常清楚,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08WinForm項(xiàng)目開(kāi)發(fā)中WebBrowser用法實(shí)例匯總
這篇文章主要介紹了WinForm項(xiàng)目開(kāi)發(fā)中WebBrowser用法,需要的朋友可以參考下2014-08-08C#使用EF連接PGSql數(shù)據(jù)庫(kù)的完整步驟
這篇文章主要給大家介紹了關(guān)于C#使用EF連接PGSql數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01