MATLAB的稀疏矩阵用法

         这次,我需要进行c#与MATLAB2012混编,建立的模型是附有限制条件的间接平差。刚开始,我还是充满信心的,毕竟可以依照师姐的步骤。然而,事实是残忍的,让我不断的调试代码,摸索稀疏矩阵的真正用处。代码的框架写好,一运行发现各种bug!记得一个bug是内存不足!当时,我就疑惑,为何同样的数据量,师姐的代码可以运行,甚至更大的数据量,也可以照常运行。然而,我的各种提示,内存不足。好的吧!我就开始改虚拟内存,心想这次应该可以了。事实上,并非没有解决成功!偶然之中,我发现问题是我吧平常的矩阵与稀疏矩阵一起使用了,即sparse与full的混淆,导致内存不足。

         稀疏矩阵与普通矩阵,不能一起使用。因为使用稀疏矩阵的目的在于减少内存的使用率和提高运行的时间,而使用普通矩阵,也就是全矩阵(full),内存占用率高,甚至出现内存不足与代码运行时间久。因此,两者无法联合使用。

          稀疏矩阵的创建:

          1.sparse(a)

             a为一个常规矩阵,即a=[0,2,3;4,5,0]

           2.sparse(m,n)

             mn分别是行列数,创建mn的零稀疏矩阵

          3  .稀疏矩阵的串联(也就是合并)

             首先,利用find函数,找出稀疏矩阵的存量

              [i,j,s]=find(a),假如a是稀疏矩阵,则i,j分别指非零值的行列值,s就是非零值的本身。

               假如两个稀疏矩阵a,b合并,创建更加大的稀疏矩阵,通过find函数,分别找出a,b的行列数与值,就可以重新构建一个稀疏矩阵,用sparse

,aa=sparse(i,j,s,m,n),此处是将稀疏矩阵a的值赋给更大的矩阵aa,ij是a原本的行列数,s也是。稀疏矩阵b,也是这样的操作,bb=sparse(i,j,s,m,n),其中,ijs都是b的原本的数。然后aa+bb就是所谓的矩阵相加。还有,[aa;bb],变成一个mn的稀疏矩阵。

        4.外部文件的导入创建稀疏矩阵

         首先,用load函数加载文件,然后用spconvert转换变成稀疏矩阵。

5.稀疏矩阵求逆

   我尝试用了pinv,不行,只能用左除或者右除可以。

推荐博客:

https://wenwen.sogou.com/z/q191221944.htm?fr=wap&_t=47359

http://www.cnblogs.com/lihuidashen/p/3435883.html

https://ww2.mathworks.cn/help/matlab/ref/spconvert.html

https://jingyan.baidu.com/article/6181c3e08a4d6f152ef15333.html

https://m.baidu.com/sf_edu_wenku/view/288e490303d8ce2f0066230dhttps://m.baidu.com/sf_edu_wenku/view/288e490303d8ce2f0066230d

https://ww2.mathworks.cn/help/matlab/math/sparse-matrix-operations.html

猜你喜欢

转载自blog.csdn.net/qq_27690393/article/details/84634358