靠人不如靠己,準備做自己得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...