1)將向量組進行消元,變換成階梯矩陣,這是求向量組的極大線性無關組的基本演算法。這個方法在前面曾經給出過,但在這裡做了改進,目的是為了可以判斷是否線性相關:
/// /// 方程組消元,最後一列為係數,結果就在coefficientdeterminant裡.
/// 本演算法也可以用來求矩陣的秩.
///
/// 方程組係數陣列
public static void equationselimination(decimal[,] coefficientdeterminant)
//如果左上鄰元素[j-1, i-1]以及其左邊的元素都為0方可交換
//因為當前元素的左邊元素已經全部是零,因此如果要交換不能使本行左邊產生非零數,
//則需要左上鄰及其所有元素皆為0.
for (int s = i - 1; s >= 0; s--)
}//如果[j,i]的上一行[j-1, i]的值為0則交換
if (coefficientdeterminant[j - 1, i] == 0)
}else
//改進:做乘法,可以避免小數換算帶來的誤差
var therate2 = coefficientdeterminant[j, i];
var therate1 = coefficientdeterminant[j - 1, i];
for (int k = 0; k <= thee; k++)//這裡要計算常數項,所以是k <= thee}}
}}
/*vector.cs
* albert.tian on 20141225
*/using system;
using system.collections.generic;
using system.linq;
using system.text;
namespace mymathlib
var theiszerovector = true;
for (int i = 0; i < theendindex; i++)
}return theiszerovector;
}/// /// 判斷當前向量是否與前面的向量線性相關,採用的是消元化
///
/// 當前向量
/// 已有的線性無關的向量組
///
private static bool islinearcorrelation(decimal currvector, listprevmaxlivectors)
//如果前面沒有向量,則當前非零向量必是線性無關的.
if (prevmaxlivectors.count <= 0)
//構造方程式,判斷是否線性相關
var theecount = currvector.length;
var thevcount = prevmaxlivectors.count;
//加入當前向量為常量向量,因此方程組的列為thevcount+1.
var theequealgroup = new decimal[theecount, thevcount + 1];
//匯入prevmaxlivectors
for (int i = 0; i < thevcount; i++)
}//加入當前向量作為常量向量
for (int j = 0; j < theecount; j++)
//消元,這裡的消元法變成了求矩陣秩的基本演算法.
linearalgebra.equationselimination(theequealgroup);
//如果thera=thera1,則至少有乙個非零解。
//這裡如此判斷,主要是因為消元的方法。當然,這在矩陣有證。
var thera = 0;
var thera1 = 0;
for (int i = 0; i < theecount; i++)
if (!iszerovector(theequealgroup.getvector(i)))
}return (thera >= thera1);
}/// /// 這個函式暫時無用,判斷兩個向量的等價性
///
///
///
///
private static bool isequivalent(decimal v1, decimal v2)
//其中乙個零向量,另乙個是非零向量
if (thev1iszerovector || thev2iszerovector)
//乙個分量肯定成比例
if (v1.length <= 1)
decimal theprerate = 0;
var thecount = v1.length;
var theindex = 0;
for (int i = 0; i < thecount; i++)
//如果其中乙個是0,則必然不成比例,不等價
if (v1[i] == 0 || v2[i] == 0)
if (theindex == 0)
else}}
return true;
}/// /// 獲取向量組的極大線性無關組,方法是依照教科書寫的。
///
/// 向量組
///
public static listgetmaxlinearindependentgroup(decimal[,] vectors)
}return thetempvectors;}}
}
MyMathLib系列 行列式計算
靠人不如靠己,準備做自己得mathlib,在學校的時候,就想過把數學數理的東西都計算機化,但一直沒有時間去做這件事情,現在覺得空餘 時間比較閒,就做做這件事情,先從線性代數開始,畢竟這裡面的很多演算法,實際共走中都有用到。在做這些演算法的過程中,也體會到了 數學中的東西不是沒有用,而是你沒用到。下面...
行列式求值
行列式求值法則 傳送門 行列式求值,說白了就是用高斯消元把行列式消成上三角或者下三角 這裡選擇消成上三角,其實都一樣 用到的就是行列式求值的幾條性質,我這裡是用了乙個變數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...