[netMarketing类库]Matrix类 :数学矩阵类,已重载了主要的运算符

命名空间:

netMarketing.graphics

netMarketing.MathAnalysis


功能: 数学矩阵类,已重载了主要的运算符


功能详细说明:
提供了两个矩阵类,一个是netMarketing.MathAnalysis.Matrix。

另一个是netMarketing.graphics.Matrix

功能是类似的。

这些数学矩阵类   都重载了 +- */ += == -= /= *= 运算符

注意:以下函数表以及示例都使用的是netMarketing.MathAnalysis.Matrix


常用函数列表:

public Matrix()

/// 指定行列构造函数
/// @param nRows - 指定的矩阵行数
/// @param nCols - 指定的矩阵列数
public Matrix(int nRows, int nCols)

/// 指定值构造函数
/// @param value - 二维数组,存储矩阵各元素的值
public Matrix(double[,] value)

/// 指定值构造函数
/// @param nRows - 指定的矩阵行数
///@param nCols - 指定的矩阵列数
///@param value - 一维数组,长度为nRows* nCols,存储矩阵各元素的值
public Matrix(int nRows, int nCols, double[] value)


///方阵构造函数
///@param nSize - 方阵行列数
public Matrix(int nSize)

/// 方阵构造函数
///@param nSize - 方阵行列数
///@param value - 一维数组,长度为nRows* nRows,存储方阵各元素的值
public Matrix(int nSize, double[] value)


/// 拷贝构造函数
/// @param other - 源矩阵
public Matrix(Matrix other)

属性: 矩阵行数
public int Rows { get; private set; }

索引器: 访问矩阵元素
public double this[int row, int col]

/// 属性: Eps
public double Eps { get; set; }

/// 初始化函数
public bool Init(int nRows, int nCols)

/// 设置矩阵运算的精度
public void SetEps(double newEps)

/// 取矩阵的精度值
public double GetEps()

/// 重载 + 运算符
public static Matrix operator +(Matrix m1, Matrix m2)

///重载 - 运算符
public static Matrix operator -(Matrix m1, Matrix m2)

///重载 * 运算符
 public static Matrix operator *(Matrix m1, Matrix m2)

///重载 double[] 运算符
public static implicit operator double[](Matrix m)

///将方阵初始化为单位矩阵
public bool MakeUnitMatrix(int nSize)

///将矩阵各元素的值转化为字符串, 元素之间的分隔符为",", 行与行之间有回车换行符
public override string ToString()

///将矩阵指定行中各元素的值转化为字符串
public string ToStringRow(int nRow, string sDelim)

///将矩阵指定列中各元素的值转化为字符串
public string ToStringCol(int nCol, string sDelim /*= " "*/)

///设置矩阵各元素的值
public void SetData(double[] value)

///设置指定元素的值
public bool SetElement(int nRow, int nCol, double value)

///获取指定元素的值
public double GetElement(int nRow, int nCol)

///获取矩阵的列数
public int GetNumColumns()

///获取矩阵的行数
public int GetNumRows()

///获取矩阵的数据
public double[] GetData()
public double[,] GetArrayData()

///获取指定行的向量
public int GetRowVector(int nRow, double[] pVector)

///获取指定列的向量
public int GetColVector(int nCol, double[] pVector)

public Matrix GetSubMatrix(int subRow, int subCol)
public Matrix GetSubMatrix(int subRowCols)

///给矩阵赋值
public Matrix SetValue(Matrix other)

///判断矩阵否相等
public override bool Equals(object other)

///实现矩阵的加法
public Matrix Add(Matrix other)

///实现矩阵的减法
public Matrix Subtract(Matrix other)

///实现矩阵的数乘
public Matrix Multiply(double value)

///实现矩阵的乘法
public Matrix Multiply(Matrix other)

///复矩阵的乘法
public bool Multiply(Matrix ar, Matrix ai, Matrix br, Matrix bi, Matrix cr, Matrix ci)

///矩阵的转置
public Matrix Transpose()

///实矩阵求逆的全选主元高斯-约当法
public bool InvertGaussJordan()

///复矩阵求逆的全选主元高斯-约当法
public bool InvertGaussJordan(Matrix mtxImag)

///对称正定矩阵的求逆
public bool InvertSsgj()

///* 托伯利兹矩阵求逆的埃兰特方法
public bool InvertTrench()

///求行列式值的全选主元高斯消去法
public double ComputeDetGauss()

///求矩阵秩的全选主元高斯消去法
public int ComputeRankGauss()

///对称正定矩阵的乔里斯基分解与行列式的求值
public bool ComputeDetCholesky(ref double realDetValue)

///矩阵的三角分解,分解成功后,原矩阵将成为Q矩阵
public bool SplitLU(Matrix mtxL, Matrix mtxU)

///一般实矩阵的QR分解,分解成功后,原矩阵将成为R矩阵
public bool SplitQR(Matrix mtxQ)

/// 一般实矩阵的奇异值分解,分解成功后,原矩阵对角线元素就是矩阵的奇异值
public bool SplitUV(Matrix mtxU, Matrix mtxV, double eps)

///内部函数,由SplitUV函数调用
private void sss(double[] fg, double[] cs)

///求广义逆的奇异值分解法,分解成功后,原矩阵对角线元素就是矩阵的奇异值
public bool InvertUV(Matrix mtxAP, Matrix mtxU, Matrix mtxV, double eps)

///约化对称矩阵为对称三对角阵的豪斯荷尔德变换法
public bool MakeSymTri(Matrix mtxQ, Matrix mtxT, double[] dblB, double[] dblC)

/// 实对称三对角阵的全部特征值与特征向量的计算
public bool ComputeEvSymTri(double[] dblB, double[] dblC, Matrix mtxQ, int nMaxIt, double eps)

///* 求赫申伯格矩阵全部特征值的QR方法
public bool ComputeEvHBerg(double[] dblU, double[] dblV, int nMaxIt, double eps)

/// 求实对称矩阵特征值与特征向量的雅可比法
public bool ComputeEvJacobi(double[] dblEigenValue, Matrix mtxEigenVector, int nMaxIt, double eps)

///求实对称矩阵特征值与特征向量的雅可比过关法
public bool ComputeEvJacobi(double[] dblEigenValue, Matrix mtxEigenVector, double eps)

///雅可比迭代法
public static void Jacobi(Matrix a, Vecter b, out Vecter x)

///根据系数矩阵c和常数项y求解线性方程组
 public static int LinearEquations(double[,] c, double[] y, ref double[] x, int unknowNum = 3,int equationNum = 3)

///判断一个浮点数是否等于0
public static bool IsDoubleZero(double v)

///矩阵异常类
public class MatrixException : Exception


参考例子:

这是勇哥用excel计算的结果.

image.png

下面用矩阵类演算一遍:

image.png image.png image.png image.png

image.png image.png

代码如下:

 private void button16_Click(object sender, EventArgs e)
        {
            Matrix matA = new Matrix(new double[3, 3]
            {
                {17,15,12 },{5,98,77},{87,89,68}
            });

            Matrix matB = new Matrix(new double[3, 3]
            {
                {12,100,217 },{2,9,8},{66,88,99}
            });
            
            //比较用的精度
            matA.SetEps(0.00001);
            matB.SetEps(0.00001);

            var m1 = matA + matB;
            MessageBox.Show(m1.ToString(),"相加");
            m1 = matA - matB;
            MessageBox.Show(m1.ToString(), "相减");
            m1 = matA * matB;
            MessageBox.Show(m1.ToString(), "相乘");
            m1 = matA.Transpose();
            MessageBox.Show(m1.ToString(), "转置");
          
            matB.InvertGaussJordan();
            MessageBox.Show(matB.ToString(), "matB的逆矩阵");

            m1 = matA.Multiply(2);
            MessageBox.Show(m1.ToString(), "数乘,乘2");
            
        }





  




--------------------- 

作者:hackpig
来源:
www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

返回类库功能说明目录


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864