开源Math.NET基础数学类库使用(17)C#计算矩阵条件数-阿里云开发者社区

开发者社区> 杰克.陈> 正文

开源Math.NET基础数学类库使用(17)C#计算矩阵条件数

简介: 原文:【原创】开源Math.NET基础数学类库使用(17)C#计算矩阵条件数                本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 开源Math.NET基础数学类库使用总目录:http://www.cnblogs.com/asxinyu/p/4329737.html   上个月对Math.NET的基本使用进行了介绍,主要内容有矩阵,向量的相关操作,解析数据格式,数值积分,数据统计,相关函数,求解线性方程组以及随机数发生器的相关内容。
+关注继续查看
原文:【原创】开源Math.NET基础数学类库使用(17)C#计算矩阵条件数

               本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html

开源Math.NET基础数学类库使用总目录:http://www.cnblogs.com/asxinyu/p/4329737.html

  上个月对Math.NET的基本使用进行了介绍,主要内容有矩阵,向量的相关操作,解析数据格式,数值积分,数据统计,相关函数,求解线性方程组以及随机数发生器的相关内容。这个月接着深入发掘Math.NET的各种功能,并对源代码进行分析,使得大家可以尽可能的使用Math.NET在.NET平台下轻易的开发数学计算相关的,或者可以将其中的源码快速移植到自己的系统中去(有时候并不需要所有的功能,只需要其中的部分功能代码),今天要介绍的是Math.NET中利用C#计算矩阵条件数的功能。

  矩阵条件数的概念比较难懂,以前学线性代数的时候,还比较了解,很久没接触了,也忘记了,所以理论部分引用百科的内容,对需要的还是看课本比较好。如果太复杂可以直接跳过看调用即可。但为了保持支持的完整性,我还是写出来。

  本文原文地址:http://www.cnblogs.com/asxinyu/p/4304307.html

1.什么是矩阵条件数

  矩阵A的条件数等于A的范数与A的逆的范数的乘积,即cond(A)=‖A‖·‖A^(-1)‖,对应矩阵的3种范数,相应地可以定义3种条件数。 函数 cond(A,1)、cond(A)或cond(A inf) 是判断矩阵病态与否的一种度量,条件数越大矩阵越病态。条件数事实上表示了矩阵计算对于误差的敏感性。对于线性方程组Ax=b,如果A的条件数大,b的微小改变就能引起解x较大的改变,数值稳定性差。如果A的条件数小,b有微小的改变,x的改变也很微小,数值稳定性好。它也可以表示b不变,而A有微小改变时,x的变化情况。

2.Math.NET矩阵条件数的实现

  Math.NET在对矩阵条件数的计算过程与行列式和秩的计算都相同,直接用在矩阵分解算法使用ConditionNumber来获取,如上文http://www.cnblogs.com/asxinyu/p/4304304.html的代码中就有ConditionNumber的实现

1 public override float ConditionNumber
2 {
3     get
4     {
5         var tmp = Math.Min(U.RowCount, VT.ColumnCount) - 1;
6         return Math.Abs(S[0]) / Math.Abs(S[tmp]);
7     }
8 }

  其他过程比较简单雷同,就不再说明了。如有需要看源码,重要的还是使用的情况。

3.Math.NET计算矩阵条件数的代码

  上述过程和原理只是便于大家理解其实现过程,下面简单演示一下在Math.NET中计算矩阵条件数的过程,就是直接调用计算即可。

 1 // 格式设置
 2 var formatProvider = (CultureInfo)CultureInfo.InvariantCulture.Clone();
 3 formatProvider.TextInfo.ListSeparator = " ";
 4 //创建一个随机的矩阵
 5 var matrix = new DenseMatrix(5);
 6 var rnd = new Random(1); 
 7 for (var i = 0; i < matrix.RowCount; i++)
 8 {
 9     for (var j = 0; j < matrix.ColumnCount; j++)
10     {
11         matrix[i, j] = rnd.NextDouble();
12     }
13 }
14 
15 Console.WriteLine(@"Initial matrix");
16 Console.WriteLine(matrix.ToString("#0.00\t", formatProvider));
17 Console.WriteLine();
18 
19 //条件数 Condition number
20 Console.WriteLine(@"矩阵条件数");
21 Console.WriteLine(matrix.ConditionNumber());
22 Console.WriteLine();

结果如下:

 1 Initial matrix
 2 DenseMatrix 5x5-Double
 3 0.25      0.11    0.47    0.77    0.66
 4 0.43      0.35    0.94    0.10    0.64
 5 0.03      0.25    0.32    0.99    0.68
 6 0.65      0.28    0.62    0.70    0.70
 7 0.95      0.09    0.16    0.38    0.80
 8 
 9 
10 矩阵条件数
11 21.581238807809

4.资源

  包括源代码以及案例都可以去官网下载,下载地址本系列文章的目录中第一篇文章:http://www.cnblogs.com/asxinyu/p/4264638.html,有介绍。由于源码很大,如果找不到相应的案例,可以进行搜索,可以比较快的找到相应的代码。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《ASP.NET 开发从入门到精通》----1.4 ASP.NET基础
ASP是微软公司推出的一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术,指动态服务器页面(Active Server Pages,ASP)运行于IIS之中的程序。在2000年第二季度时,微软公司正式推动.NET策略,ASP也顺理成章地改名为ASP.NET。
2636 0
如何在函数计算中使用 Node.js 处理 multipart 文件上传请求
## 前言 web 开发中我们经常会允许用户通过 HTTP POST 请求上传文档到服务器,如何使用函数计算来做文件上传服务呢?下面我们使用 nodejs 来实现一个文件上传的案例: 我们知道浏览器中上传文档通常会使用 `multipart` `form-data` 来多文件同时上传文件。 例如,我们可以使用curl来做这个测试模拟上传两个文件: `test.txt` 和 `inde
1601 0
如何在函数计算中使用 Node.js 处理 multipart 文件上传请求
web 开发中我们经常会允许用户通过 HTTP POST 请求上传文档到服务器,本文将介绍在函数计算中基于 node.js 使用 multipart form-data 来实现文件上传服务。
2708 0
Mybatis基础:增删改查、模糊查询、多条件查询
Mybatis基础:增删改查、模糊查询、多条件查询http://www.bieryun.com/3132.html 1、新建测试数据库,根据实体类属性创建 2、实体类 [java] view plain copy package com.
1929 0
秘籍:使用函数计算珍藏你喜爱的文章
使用函数计算珍藏你喜爱的文章 1. 背景 对于喜欢阅读博客的程序员来说,是不是常常堆满 tab 标签,密密麻麻的连标题都看不清?不舍得关掉,却又抽不出来时间阅读?又或者阅读过了,想收藏起来供日后查阅? 对这些文章来说,onenote、印象笔记等笔记类软件着实不是一个好的去处。
1841 0
SAP SD 基础知识之定价中的条件技术(Condition Technique in Pricing)
SAP SD 基础知识之定价中的条件技术(Condition Technique in Pricing)
5 0
使用c语言计算3阶行列式
使用c语言计算3阶行列式
2556 0
+关注
杰克.陈
一个安静的程序猿~
10427
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载