最近在做稀疏矩阵的相关工作,其中一项是绘制稀疏矩阵的结构图。经过一下午研究,将相关成果整理如下:

matlab源代码为:

1、文件 test_bcsstk01.m:

% 绘制稀疏矩阵 bcsstk01.rsa 和 bcsstm01.rsa 的结构图

clear

% 读入rsa形式的刚度矩阵

Dpi = 150;

hb_to_mmm('matrix\bcsstk01.rsa','matrix\bcsstk01');

load matrix\bcsstk01;

ni=bcsstk01(1,1); %稀疏矩阵的行

nj=bcsstk01(1,2); %稀疏矩阵的列

nz=bcsstk01(1,3); %稀疏矩阵的非零元总数

nl=nz+1; %总行数

KL=sparse( bcsstk01(2:nl,1), bcsstk01(2:nl,2), bcsstk01(2:nl,3),

ni, nj ); %转换为稀疏矩阵(刚度矩阵下三角)

[dr,va]=get_diag(bcsstk01(2:nl,1),bcsstk01(2:nl,2),bcsstk01(2:nl,3),nz); %提取对角线元素

KD=sparse( dr, dr, va, ni, nj

); %刚度矩阵的对角线元素

K = KL + KL' -

KD; %得到最后的刚度矩阵

clear KL;

clear KD;

clear dr;

clear va;

figure(1)

subplot(1, 2, 1)

spy(K)

title('矩阵 bcsstk01.rsa 的结构图');

% 读入rsa形式的质量矩阵

hb_to_mmm('matrix\bcsstm01.rsa','matrix\bcsstm01');

load matrix\bcsstm01;

ni=bcsstm01(1,1); %稀疏矩阵的行

nj=bcsstm01(1,2); %稀疏矩阵的列

nz=bcsstm01(1,3); %稀疏矩阵的非零元总数

nl=nz+1; %总行数%得到最后的刚度矩阵

ML=sparse( bcsstm01(2:nl,1), bcsstm01(2:nl,2), bcsstm01(2:nl,3),

ni, nj ); %转换为稀疏矩阵

[dr,va]=get_diag(bcsstm01(2:nl,1),bcsstm01(2:nl,2),bcsstm01(2:nl,3),nz); %提取对角线元素

MD=sparse( dr, dr, va, ni, nj

); %刚度矩阵的对角线元素

M = ML + ML' -

MD;

clear ML;

clear MD;

clear dr;

clear va;

subplot(1, 2, 2)

spy(M)

title('矩阵 bcsstm01.rsa 的结构图');

SDpi=['-r',num2str(Dpi)]; % 设定输出图像的 Dpi 值

print(1,'-dtiff', SDpi, 'bcsstk01_bcsstm01'

); % 将图像按规定 Dpi 和 文件名写入到文件

2、文件 get_diag.m:

function [dr,va]=get_diag(row,col,val,nz)

index=1;

sum =0;

for i=1:nz

if( row(i,1)

== col(i,1) )

dr(index,1) = row(i,1);

va(index,1) = val(i,1);

if( val(i,1) < 1e-20 )

sum = sum + 1;

end

index = index + 1;

end

end

if( sum > 0 )

warning('对角线元素上有 %d 个小于或等于0的元素.',sum)

end

end

3、文件 hb_to_mmm.m:

下面附上绘制的结果图:

参考文献:

【总结】Harwell-Boeing格式矩阵转换为稀疏矩阵的方法

注:

【问题】昨天这个程序似乎有些问题:hb_to_mmm.m文件得到的非零元个数似乎比实际的要少。

例如:bcsstk09.rsa这个文件,如果只考虑下三角部分,实际上共有9760个非零元,而若先用hb_to_mmm.m文件得到一个matlab格式的矩阵文件bcsstk09,再读入用spconvert函数转化成稀疏矩阵之后,虽然仍有9760个非零元,但其中许多非零元的数值却被设置为0了(直接查看bcsstk09.rsa文件,发现这些位置处的非零元数值为e-7/e-8量级)!这样,当再调用spy函数画出刚度矩阵下三角的非零元个数时,就只有9039个了。

【解决方案】修改hb_to_mmm.m文件的msm_to_mm_coordinate_real_general函数,将第1445行:

fprintf ( fid, ' %d %d %f\n', rows(k2), j, vals(k2) )

改为

fprintf ( fid, ' %d %d %e\n', rows(k2),

j, vals(k2) )

即可。

【结果】

matlab对矩阵求模,Matlab中Harwell-boeing格式稀疏矩阵的读取及绘图相关推荐

  1. Matlab三元隐函数求极值,matlab用三重循环求一个三元函数的最大值所对应的x1,x2,x3...

    用MATLAB实现for循环 t=2;whileS(t)>Pstrong&&t 求一个MATLAB循环语句表示这个矩阵200分 这样的,i和j是内部虚数变量,避免轻易使用.cle ...

  2. matlab对多项式求导,matlab中多项式求导

    1 0.5 0 -0.5 -1 -1.5 -2 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 4.对比用多项式函数的 polyder 函数及符号函数中的 diff 函数,求导 x2+2x ...

  3. python中的除法、取整和求模_python中的除法,取整和求模

    首先注明:如果没有特别说明,以下内容都是基于python 3.4的. 先说核心要点: 1. /是精确除法,//是向下取整除法,%是求模 2. %求模是基于向下取整除法规则的 3. 四舍五入取整roun ...

  4. python中的除法、取整和求模_python中的除法,取整和求模-Go语言中文社区

    首先注明:如果没有特别说明,以下内容都是基于python 3.4的. 先说核心要点: 1. /是精确除法,//是向下取整除法,%是求模 2. %求模是基于向下取整除法规则的 3. 四舍五入取整roun ...

  5. matlab对多元函数求导,MATLAB多元函数导数求极值或最优值Word版

    <MATLAB多元函数导数求极值或最优值Word版>由会员分享,可在线阅读,更多相关<MATLAB多元函数导数求极值或最优值Word版(9页珍藏版)>请在人人文库网上搜索. 1 ...

  6. matlab如何计算矩阵的幂,MATLAB矩阵幂算法

    我想把一个算法从MATLAB移植到Python.所述算法的一个步骤涉及到取A^(-1/2),其中A是9x9平方复矩阵.据我所知,矩阵的平方根(及其逆矩阵的推广)不是唯一的.在 我一直在试验scipy. ...

  7. matlab二元多项式求值,matlab多项式代入求值

    Matlab 多项式运算与方程求根 ? Matlab多项式运算无论是在线性代数中,还是信号处理.自动控制等理论 中,多项式运算都有着十分重要的地位,因此,MATLAB 为多项式的操作提供了相应的函数库 ...

  8. matlab根据根求多项式,matlab求解多项式的根

    因此牛顿法也称切线法,是非线性方程求根方法中收敛最快的方 法. 2. matlab 中方程求解的基本命令 roots(p):求多项式方程的根,其中 p 是多项式系数按降幂排列所形成的向量. solve ...

  9. matlab如何新建mat文件_matlab中mat文件的生成和读取

    1.mat文件的生成 (1)直接在Matlab中创建并保存矩阵数据 打开Matlab软件,点击左上角文件(File),然后点击新建(new),选择变量(Variable),就新建了一个mat文件. 点 ...

最新文章

  1. 使用pydub做静音帧去除
  2. 【Node.js】2.开发Node.js选择哪个IDE 开发工具呢
  3. 不可不知 DDoS的攻击原理与防御方法(2)
  4. 在Oracle中如何让SELECT查询绕过UNDO
  5. 编写Dockerfile的最佳实践
  6. python画椭圆形_手残党福音:用Python画出机器人Dev
  7. linux 字符下 上网,Linux下实现字符串截取方法总结(示例代码)
  8. UI设计素材|弹窗设计技巧,快get
  9. Java安装配置环境变量及介绍数据类型
  10. 程序员面试金典——17.4无判断max
  11. 顺序栈基本操作代码实现
  12. cydia未能联到服务器,cydia无法加载,小编教你cydia无法加载怎么解决
  13. Word2013自动生成中英文目录
  14. AI基础-NLP概览-极速入门
  15. 打地鼠游戏(使用Qt)
  16. 全文标明引文报告html,知网查重全文标明引文是什么意思
  17. 离线地图二次开发(支持所有地图源)
  18. JS创建字符串类型变量
  19. android 软解8k视频,外媒:别被忽悠了!手机目前支持8K视频毫无意义
  20. 美国证监会给区块链股票降温

热门文章

  1. intellij idea设置背景颜色为豆沙绿
  2. 浅谈我对直播业务的理解
  3. css.......
  4. 分享一份C语言写的简历(一)
  5. 【JUC系列】Executor框架之CompletionService
  6. 尚硅谷周阳老师2020年 SpringCloud(H版和Alibaba) 视频教程学习时整理的笔记记录和代码
  7. 社交购物小程序开发 社交电商小程序源码定制 社交购物系统搭建
  8. Windows RDP远程代码执行高危漏洞加固指南
  9. matplotlib图片展示中文显示问题
  10. 深入leveldb-初步认识leveldb