MyMathLib系列 行列式計算

2021-06-27 18:21:15 字數 2324 閱讀 4920

靠人不如靠己,準備做自己得mathlib,在學校的時候,就想過把數學數理的東西都計算機化,但一直沒有時間去做這件事情,現在覺得空餘 時間比較閒,就做做這件事情,先從線性代數開始,畢竟這裡面的很多演算法,實際共走中都有用到。在做這些演算法的過程中,也體會到了:數學中的東西不是沒有用,而是你沒用到。下面的演算法(除全排列外)都是自己原創想得,做的不夠效率的地方,也請大家分享更好的東西。好了,囉嗦這麼多,讓**說話吧:

/// 有時間用函式語言改寫,做自己得mathlib,裡面的演算法經過驗證,但沒經過

/// 嚴格測試,如需參考,請慎重.

///

public static partial class linearalgebra

else

, stringsplitoptions.removeemptyentries);

return calcinversenumber(thenumbers);}}

/// /// 求逆序數

///

/// 數字序列

///

public static int calcinversenumber(string numbers)

else

for (int thei = 0; thei < thenums.count() - 1; thei++)}}

}return theret;

}private static string handlingmultiexp(string exp, int sign)

else

else}}

if (theretnum == 0)

else

if (theretnum == -1)

return theretnum.tostring() + theretline;}}

/// /// 行列式表示式展開

///

/// n階行列式

///

public static string determinanttoexpression(string[,] determinants)

var theresults = new list();

listthens = new list();

for (int i = 1; i <= thec; i++)

fullpermutation(thens, 0, thec - 1, theresults);

var thenexp = "";

var thepexp = "";

foreach (var theal in theresults)

, stringsplitoptions.removeemptyentries);

for (int i = 1; i <= thec; i++)

theline = handlingmultiexp(theline.substring(1), theinversenum);

if (!string.isnullorempty(theline))

else}}

return thepexp.substring(1) + thenexp;

}/// /// 對陣列進行全排列

///

/// 要進行全排列的陣列

/// 進行全排列的開始下標

/// 進行全排列的結束下標

public static void fullpermutation(listlsarray, int begin, int end, listresult)

result.add(theline.substring(1));

}for (int i = begin; i <= end; i++)

}/// /// 交換陣列中的下標為x,y的值

///

/// 該陣列

///

///

private static void swap(listlsarray, int x, int y)

/// /// 化三角法行列式計算,

///

/// n階行列式

/// 計算結果

public static decimal calcdeterminant(decimal[,] determinants)

//如果[j,i]的上一行[j-1, i]的值為0則交換

if (determinants[j - 1, i] == 0)

}else}}

}//結果為對角線上的元素的乘積,注意符號的處理。

decimal theretdec = thesign;

for (int i = 0; i < then; i++)

return theretdec;}}

MyMathLib系列 行列式計算4 向量部分

1 將向量組進行消元,變換成階梯矩陣,這是求向量組的極大線性無關組的基本演算法。這個方法在前面曾經給出過,但在這裡做了改進,目的是為了可以判斷是否線性相關 方程組消元,最後一列為係數,結果就在coefficientdeterminant裡.本演算法也可以用來求矩陣的秩.方程組係數陣列 public ...

行列式求值

行列式求值法則 傳送門 行列式求值,說白了就是用高斯消元把行列式消成上三角或者下三角 這裡選擇消成上三角,其實都一樣 用到的就是行列式求值的幾條性質,我這裡是用了乙個變數reo來記錄行列式的值 1 include2 include3 include4 include5 include6 includ...

矩陣行列式

對於乙個 n 行 n 列的矩陣 a 有矩陣的行列式 常用 det a a 表示 如果將矩陣的每一行視為乙個 n 維向量,則 n 階行列式的意義可以看做是 有向長度 面積 體積在 n 為空間下的擴充套件 具體的例子 n 1 時,a a 即有向長度 n 2 時,a a a a a vec times v...