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

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 
 

日历

 
 
模块内容加载中...
 
 
 
 
 

天气

 
 
模块内容加载中...
 
 
 
 
 
 
 

湖北省 武汉市 天秤座

 发消息  写留言

 
we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.
 
近期心愿make it happen, make it happy, make it harmony
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 
 

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

2017-5-23 8:56:53 阅读5 评论0 232017/05 May23

矩阵的分解

Math.NET支持矩阵分解的函数有:

Cholesky:对称阵的Cholesky分解;

LU:方阵的LU分解;

QR:QR分解(一个矩阵m×n默认分解为m×n,n×n,也可以设置为m×m,m×n);

GramSchmidt:Gram-Schmidt正交化的QR分解;

Svd:奇异值分解;

evd:特征值分解。

矩阵和向量的操作

1.单个元素的操作

设有一个m×n的矩阵A,则单个元素的操作,有两种方法,一种是采用类似二维数组的索引方式操作单个元素:

A[0,0]可以获取或设置第一行第一列的元素,M[i,j]获取第(i+1)行(j+1)列的元素。另一种方式是使用At函数。At函数有两种使用方式:A.At(i,j)和A.At(i,j,t),第一种是读取第(i+1)行(j+1)列的元素值,而第二种是设置(i+1)行(j+1)列的元素值为t。

两种方法各有优劣:索引的方式安全一些,而At函数不检查边界,所以效率快一些,当能保证行、列值不会越界的情况下,推荐使用At函数。

2. 整行或列的操作

行和列的操作是类似的,这里只介绍行的操作。

获取单个行,可使用函数Row函数,例如A.Row(3)获取矩阵A的第四行;设置行则使用SetRow函数,A.SetRow(2,v)将设置第二行的值为已知向量v。

如果删除行,矩阵的行和列数并不会改变,而是返回一个新的矩阵,例如:

作者  | 2017-5-23 8:56:53 | 阅读(5) |评论(0) | 阅读全文>>

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

2017-5-19 22:35:26 阅读10 评论0 192017/05 May19

这一部分,你需要好好地回顾一下以前学的线性代数知识了。

矩阵的转置(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());

如果矩阵是非可逆矩阵,则计算的结果是NaN或者Infinity:

Matrix<double> m1 = M.DenseOfRowArrays(new

作者  | 2017-5-19 22:35:26 | 阅读(10) |评论(0) | 阅读全文>>

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

2017-5-19 17:23:26 阅读10 评论0 192017/05 May19

矩阵和向量的范数(Norm)

关于范数的详细信息,几乎所有的矩阵分析教材中都有所提及,这里有一个关于范数的介绍:

https://en.wikipedia.org/wiki/Norm_(mathematics)#p-norm

最常见的一类是p-范数,在Math.NET中有如下函数提供支持:

对于向量,L1Norm、L2Norm分别对应1-范数和2-范数,而计算p趋向于无穷大时的范数可用函数InfinityNorm,而一般化的计算范数的函数是Norm(p),其中p为一个正实数。

对于矩阵,L1Norm和L2Norm、InfinityNorm都是类似的,与Norm函数对应的则有两个:RowNorms(p)和ColumnNorms(p),此外还有一个特殊的范数:FrobeniusNorm。

另外,还可以使用Normalize函数,获取向量的单位化p-范数,与之对应的矩阵则是NormalizeRows和NormalizeColumns函数。

例如,我们最常见的求向量的范数应该是2-范数,也就是向量的内积,等于各元素平方和再开方。向量(1,2 -2)的内积应该是3:

Vector<double> v1 = V.DenseOfArray(new double[] { 1, 2, -2 });

作者  | 2017-5-19 17:23:26 | 阅读(10) |评论(0) | 阅读全文>>

图种的原理与编程实现

2017-5-19 15:50:53 阅读10 评论0 192017/05 May19

网上的各种论坛和贴吧里面经常会有这种玩法,就是有个人发个话题相关或者不相关的图片,然后告诉你下载之后修改后缀为rar,然后解压就可以得到真实的文件了,刚开始碰到的时候觉得非常的神奇,但是在了解原理之后就不觉得那么神奇了。实际上就是简单粗暴的文件拼接,用命令行就可以了,但是操作起来麻烦,干脆自己动手写个小程序,核心代码如下: private void CombineFile(string jpgFile, string rarFile, string destFile) { int n=256; int ret; byte[] buffer=new byte[n]; int totalWritten=0; FileStream fsjpg=new FileStream(jpgFile,FileMode.Open); FileStream fsrar=new FileStream(rarFile,FileMode.Open); FileStream fs = new FileStream(destFile, FileMode.CreateNew); do { ret = fsjpg.Read(buffer, 0, n); fs.Write(buffer, 0, ret); } while (ret != 0); buffer = new byte[n]; do { ret = fsrar.Read(buffer, 0, n);

作者  | 2017-5-19 15:50:53 | 阅读(10) |评论(0) | 阅读全文>>

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

2017-5-19 15:34:41 阅读10 评论0 192017/05 May19

矩阵的运算

1. 与标量的运算

对于矩阵、向量与标量之间的运算,法则是最简单的,就是每个元素与该标量运算,Matrix实现了运算符的重载,同时还提供了基本的方法:

MatrixBuilder<double> M = Matrix<double>.Build;

Matrix<double> m1 = M.DenseOfRowArrays(new double[] { 1, 2, 3 }, new double[] { -1, 3, 2},new double[]{2,-3,1});

Console.WriteLine((m1+1).ToMatrixString());

Console.WriteLine(m1.Add(1).ToMatrixString());

这段代码的两次输出,都是一样的:

+和Add方法、-和Subtract方法、*和Multiply方法、/和Divide方法使用起来都是一样的。

2. 矩阵与矢量、矩阵的运算

矩阵和矢量、矩阵之间的运算遵循线性代数的基本要求,关于这一点的基础知识可以参考线性代数的入门书籍,通常,矩阵和矩阵之间只有加、减、乘三种运算,而矩阵和向量之间仅乘法运算。另外,在MATLAB中,为了便于计算,还引入了左除和右除的运算,在这个类库中似乎并没有得到实现。

例如,一个矩阵和向量的乘法:

MatrixBuilder<double> M = Matrix<double>.Build;

作者  | 2017-5-19 15:34:41 | 阅读(10) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

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

注册 登录  
 加关注