C#矩阵库功能特别强⼤!!⽂章⽬录
⼀个强⼤的C# 矩阵库
接下来对⼀个特别厉害的矩阵库使⽤作⼀个总结:
1. 矩阵库的中主要函数说明
补充:2020/6/11 平差范式:
Matrix Nbb=B.Transpose()*B;
Nbb.InvertGaussJordan();
X = Nbb * B.Transpose()* L;
Matrix V = B * X - L;
double cgma2 =(V.Transpose()* V)[0,0]/ r;//单位权中误差的平⽅。
2019/8/4 最初的模样:
1.矩阵定义
public Matrix(int nRows,int nCols)
2.⼆维数组,存储矩阵各元素的值
public Matrix(double[,]value)
3.指定的矩阵⾏数,指定的矩阵列数,⼀维数组,长度为nRows*nCols,存储矩阵各元素的值
public Matrix(int nRows,int nCols,double[]value)
4.⽅阵构造函数
public Matrix(int nSize)
public Matrix(int nSize,double[]value)
5.拷贝构造函数
public Matrix( Matrix other)
6.与指定矩阵相加的矩阵
public Matrix Add(Matrix other)
7.与指定矩阵相减的矩阵
public Matrix Subtract(Matrix other)
8.与指定矩阵相乘的实数/与指定矩阵相乘的矩阵
public Matrix Multiply(double value)
public Matrix Multiply(Matrix other)
9.矩阵的转置
public Matrix Transpose()
10.实矩阵求逆的全选主元⾼斯-约当法
public bool InvertGaussJordan()
11.对称正定矩阵的求逆
public bool InvertSsgj()
12.托伯利兹矩阵求逆的埃兰特⽅法
public bool InvertTrench()
13.求⾏列式值的全选主元⾼斯消去法
public double ComputeDetGauss()
14.求矩阵秩的全选主元⾼斯消去法
14.求矩阵秩的全选主元⾼斯消去法
public int ComputeRankGauss()
15.对称正定矩阵的乔⾥斯基分解与⾏列式的求值
public bool ComputeDetCholesky(ref double realDetValue)
16.矩阵的三⾓分解,分解成功后,原矩阵将成为Q矩阵
public bool SplitLU(Matrix mtxL, Matrix mtxU)
17.求⾏列式值的全选主元⾼斯消去法
public double ComputeDetGauss()
18.⼀般实矩阵的QR分解,分解成功后,原矩阵将成为R矩阵
public bool SplitQR(Matrix mtxQ)
19.⼀般实矩阵的奇异值分解,分解成功后,原矩阵对⾓线元素就是矩阵的奇异值
public bool SplitUV(Matrix mtxU, Matrix mtxV,double eps)
20.求⼴义逆的奇异值分解法,分解成功后,原矩阵对⾓线元素就是矩阵的奇异值
public bool InvertUV(Matrix mtxAP, Matrix mtxU, Matrix mtxV,double eps)
21.约化对称矩阵为对称三对⾓阵的豪斯荷尔德变换法
public bool MakeSymTri(Matrix mtxQ, Matrix mtxT,double[] dblB,double[] dblC)
22.实对称三对⾓阵的全部特征值与特征向量的计算
public bool ComputeEvSymTri(double[] dblB,double[] dblC, Matrix mtxQ,int nMaxIt,double eps)
23.约化⼀般实矩阵为赫申伯格矩阵的初等相似变换法
public void MakeHberg()
24.求赫申伯格矩阵全部特征值的QR⽅法
public bool ComputeEvHBerg(double[] dblU,double[] dblV,int nMaxIt,double eps)
25.求实对称矩阵特征值与特征向量的雅可⽐法
public bool ComputeEvJacobi(double[] dblEigenValue, Matrix mtxEigenVector,int nMaxIt,double eps)
26.求实对称矩阵特征值与特征向量的雅可⽐过关法
public bool ComputeEvJacobi(double[] dblEigenValue, Matrix mtxEigenVector,double eps)
27.打印出矩阵namespace是干嘛的
public void Show_Mat()
28.重载运算符
A*B、 A+B 、A-B 、A[1,1]
29.判断两矩阵是否相等(往往在判断前后两次迭代所得参数之差是否⼩于限差时⽤到)
public override bool Equals(object other)
注意:在使⽤前要先设置eps等于限差,因为默认的eps为0
⽐如,限差为1e-6
A.Eps=1e-6;//A.SetEps(1e-6)
A.Equal(B);
Eps  计算矩阵的精度
补充:2020/3/31
1.将⽅阵初始化为单位矩阵
public bool MakeUnitMatrix(int nSize)
2.将矩阵各元素的值转化为字符串,元素之间的分隔符为",",⾏与⾏之间有回车换⾏符
string str = Mat.ToString();//重载了ToString 函数
3.将矩阵各元素的值转化为字符串 @param sDelim -元素之间的分隔符  @param bLineBreak -⾏与⾏之间是否有回车换⾏符public string ToString(string sDelim,bool bLineBreak)
4.将矩阵指定⾏中各元素的值转化为字符串
public string ToStringRow(int nRow,string sDelim)
5.将矩阵指定列中各元素的值转化为字符串
public string ToStringCol(int nCol,string sDelim)
6.得到矩阵的⾏、列、精度、元素、数据||⾏、列不可改
int a = Mat.Rows;
int b = Mat.Columns;
double eps = Mat.Eps;
double d = Mat[i,j];
double[] dArray=Mat.GetData();
7.获取指定⾏的向量
public int GetRowVector(int nRow,double[] pVector)
8.获取指定列的向量
public int GetColVector(int nCol,double[] pVector)
9.复矩阵的乘法:左实,左虚,右实,右虚,积实,积虚
public bool Multiply(Matrix AR, Matrix AI, Matrix BR, Matrix BI, Matrix CR, Matrix CI)
10.求⼴义逆的奇异值分解法,分解成功后,原矩阵对⾓线元素就是矩阵的奇异值
public bool InvertUV(Matrix mtxAP, Matrix mtxU, Matrix mtxV,double eps)
2. 使⽤⽅法:
⽅法1:基于.dll
1 ⾸先创建⼀个C# 类库 程序,名字设成“Matrix” (补于2020/6/26)
2 然后把代码(代码需下载,见于博客最后链接)粘到⾥⾯,点击⽣成->⽣成解决⽅案。注意:这个粘指的是完全粘,⾻头渣都不剩的那种,具体操作可以参考:
1.打开下载的代码
Ctrl+A,Ctrl+C
2.回到新建的 Matrix 项⽬
Ctrl+A,Ctrl+V
之后在debug ⽬录下看到 .dll ⽂件:(补于2020/6/26)
2.3 将debug ⽬录下的“Matrix.dll” 复制到所需矩阵运算的项⽬ debug ⽬录
然后在项⽬ 引⽤中添加引⽤:
2.4 在⽂件头添加:
using NSMatrix;
2020/6/19 :添加使⽤⽅法2
⽅法2:不需.dll
有的朋友反映⽣成不了.dll (今天我⽤VS2015做了个实验,发现确实(实际上是操作不当  ),在这⾥给各位道个歉,之前没有做⾜实验,给您带来不便,着实抱歉!!)所以今天补⼀个不需要.dll 的使⽤⽅法。(ps:我猜好像vs版本⾼于2010就不可以⽣成.dll了,也有可能我们⽣成.dll的⽅法不对)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。