注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

III = Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

Math.NET Numerics矩阵和向量的使用(4)  

2017-05-19 22:35:26|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这一部分,你需要好好地回顾一下以前学的线性代数知识了。
矩阵的转置(Transpose)
转置很简单,就是行列元素互换,Mij=Mji,因此,一个m×n的矩阵,通过转置之后,会变成一个n×m的矩阵。矩阵的Transpose方法返回转置矩阵。
示例从略。
矩阵的行列式(Determinant)
矩阵的行列式是一个标量,而且只有方阵才有行列式。对于行列式的值,一般只关心两种情况:零和非零。
因为行列式的值如果是0,则矩阵不可逆。通过使用矩阵的Determinant方法计算行列式。

矩阵的逆(Inverse)
两个矩阵A、B如果满足AB=BA=I,其中I为n阶单位矩阵,则称A和B互为逆矩阵,矩阵的Inverse可计算矩阵的逆矩阵。
            Matrix<double> m1 = M.DenseOfRowArrays(new double[] { 2, -1, 1 }, new double[] { 2, 1, 2 }, new double[] { 0, 1, 1 });
            Console.WriteLine(m1.Inverse().ToMatrixString());
            Console.WriteLine((m1.Inverse()*m1).ToMatrixString());
Math.NET Numerics矩阵和向量的使用(4) - Lemniscate - 信息 灵感 创新
 如果矩阵是非可逆矩阵,则计算的结果是NaN或者Infinity:
            Matrix<double> m1 = M.DenseOfRowArrays(new double[] { 2, -1, 0 }, new double[] { 2, 1, 2 }, new double[] { 0, 1, 1 });
            Console.WriteLine(m1.Inverse().ToMatrixString());
            Console.WriteLine((m1.Inverse()*m1).ToMatrixString());
Math.NET Numerics矩阵和向量的使用(4) - Lemniscate - 信息 灵感 创新
 
矩阵的条件数(Condition Number)
矩阵的条件数用来评估矩阵计算对于误差的敏感性,条件数是一个比1大的实数,条件数越大,则矩阵越病态。条件数和范数密切相关,因此有多少种p-范数就会有多少种条件数的定义,但一般常用的条件数是采用2范数定义的,Math.Net中提供的默认条件数也是这种,下面的代码可以说明:
            Matrix<double> m1 = M.DenseOfRowArrays(new double[] { 2, -1, 1 }, new double[] { 2, 1, 2 }, new double[] { 0, 1, 1 });
            Console.WriteLine(m1.Determinant());
            Console.WriteLine(m1.ConditionNumber());
            Console.WriteLine(m1.L2Norm() * (m1.Inverse().L2Norm()));
Math.NET Numerics矩阵和向量的使用(4) - Lemniscate - 信息 灵感 创新
 由于条件数和矩阵的逆矩阵相关,因此,讨论不可逆矩阵的条件数意义不大,在Math.Net中,将不可逆矩阵的条件数确定为无穷大。

矩阵的迹(Trace)
矩阵的迹就是主对角线元素的代数和。

矩阵的秩(Rank)和值域(Range)、列空间(Column Space)
矩阵的秩是指,矩阵的行向量或列向量的极大线性无关组中向量的个数,矩阵的列秩和行秩总是相等的,因此它们可以简称为矩阵的秩,一个可逆矩阵总是满秩的,矩阵的方法Rank返回矩阵的秩。
值域或列空间,就是构成矩阵的所有列向量中,最大线性无关组,对于这个极大线性无关组,还存在着计算标准正交基的问题,即施密特正交化。Math.NET中使用矩阵的Range方法计算标准正交基,返回一个列向量组,这组正交基两两正交,同时都是单位向量。Matlab中,对应的函数是orth。说这么多可能有点晕头转向的,先
                Matrix<double> m1 = M.DenseOfRowArrays(new double[] { 2, -1, 0 }, new double[] { 2, 1, 2 }, new double[] { 0, 1, 1 });
                Vector<double>[] Rm = m1.Range();                
                Matrix<double> m2 = M.DenseOfColumnVectors(Rm[0], Rm[1]);                
                Console.WriteLine((m2.Transpose().Multiply(m2)).ToMatrixString());
Math.NET Numerics矩阵和向量的使用(4) - Lemniscate - 信息 灵感 创新
从理论上来说,这个计算的结果应该输出一个2×2的单位矩阵,但由于误差的原因,导致非对角线上的元素非常小,但不为0。 
矩阵的零度(Nullity)、核(Kernel)、零空间(Null Space)
这几个概念与线性齐次方程Ax=0的解有关。零空间和核是同一个概念,即Ax=0的所有解的集合,这个集合可以用几个线性无关的列向量的组合表示。零度则是线性无关列向量的个数。
                Matrix<double> m1 = M.DenseOfRowArrays(new double[] { 2, -1, 0 }, new double[] { 2, 1, 2 }, new double[] { 0, 1, 1 });
                Vector<double>[] Nm = m1.Kernel();
                Console.WriteLine(m1.Multiply(Nm[0]).ToVectorString()); 
Math.NET Numerics矩阵和向量的使用(4) - Lemniscate - 信息 灵感 创新
 好了,理论上来说这个结果应该是一个零向量,但是由于误差的原因,结果有点瑕疵,但在一般的计算时尚可接受。
  评论这张
 
阅读(118)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017