線性代數之行列式的C 研究實現

2022-03-11 04:52:25 字數 2869 閱讀 6443

最近學習機器學習 才發現以前數學沒有學好 開始從線性代數開始學起 讀完行列式一章寫了些c#的**學習一下。

直接上c#**:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.runtime.interopservices;

using system.io;

namespace lyf.math

public determinant(t[,] arrt)

else

}/// /// 獲取元素值

///

///

///

///

public t this[int i, int j]

//實現索引器的set方法

set}

/// /// 獲取元素的余子式

///

///

///

///

public determinanta(int i, int j)

else if (i>n||j>n)

else

if (q >= j)

a[m, n] = this[p,q];}}

return a;}}

/// /// 設定行列式的值

///

/// 行數(從1開始)

/// 列數(從1開始)

/// 值

public void setitem(int i, int j, t value)

else if (i > n || j > n)

else

}public void setitem(t[,] arrt)

else if (arrt.getlength(0) != n || arrt.getlength(1) != n)

else}}

}/// /// 設定行列式的值

///

/// 行數(從1開始)

/// 列數(從1開始)

/// 值

public t getitem(int i, int j)

else if (i > n || j > n)

else

}/// /// 輸出行列式資訊

///

///

public override string tostring()}}

return sbrs.tostring();

}/// /// 獲取行列式的階數

///

public int n

else}}

private string typename = string.empty;

private string gettype()

return typename;

}/// /// 獲取行列式的值

///

public t value

else if (n == 2)

else

else

}return sum;}}

}/// /// 加法

///

///

///

///

private t add(t left, t right)

throw new mathexception("不支援的操作型別");

}/// /// 減法

///

///

///

///

private t minus(t left, t right)

throw new mathexception("不支援的操作型別");

}/// /// 乘法

///

///

///

///

private t mul(t left, t right)

throw new mathexception("不支援的操作型別");}}

}

以上**就是對行列式的封裝 可以求值獲得余子式 很基本的東西 求值的話主要用了遞迴的方式 因為泛型的原因導致計算過程重複拆箱裝箱 不過目前好像也沒有什麼太好的方法了。反正就是學習 所以效能無所謂了。

然後就是呼叫了直接上呼叫**:

int[,] aaa = new int[4, 4],,,

}; = new determinant(4);

lyf.math.determinantd = new determinant(aaa);

d.setitem(aaa);

console.writeline("當前行列式:");

console.writeline(d.tostring());

console.writeline("余子式m11:");

console.writeline(d.a(1, 1).tostring());

console.writeline("余子式m12:");

console.writeline(d.a(1, 2).tostring());

console.writeline("余子式m22:");

console.writeline(d.a(2, 2).tostring());

console.writeline("n="+d.n);

console.writeline("行列式的值為:"+d.value.tostring());

console.read();

執行結果如下:

線性代數行列式知識

最近入坑機器學習,線性代數的知識用到很多,所以就回顧了一下,發現也是挺有意思的。行列式對於方陣給出乙個特殊的定義值,與方陣的秩和方陣對應的齊次線性方程有沒有唯一非零解有著很大的關係。定義當n 2 n geq2 n 2時,n n n times n n n矩陣a aij a begina end a ...

數學 線性代數 行列式

前言 為了處理力學等方面的問題,引入了計算兩個向量垂直的向量。這就是向量叉乘的 為了更好的研究叉乘的特性與運算,然後又引入了行列式的概念。公理行齊次性 若b是將矩陣a的某一行乘以乙個純量t所得的矩陣,則detb tdeta 行相加不變性 若b將矩陣a中的某一行加到另一行中所得的矩陣,則det b d...

線性代數 行列式1

定義設有n n個數,排成n行n列的數表 作出表中不用航不同列的n個數的乘積,得到形如 稱作n階行列式,記作 簡稱作上三角行列式 下三角行列式 對於n個不同的元素,現規定各元素之間有乙個標準次序 例如n個不同的自然數,可規定由大到小為標準次序 於是在這n個元素的任一與排列中,當某兩個元素的先後次序與標...