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

2021-06-27 21:20:53 字數 2800 閱讀 7536

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...