matble中spdiags()函数 (翻译+理解)

matlab中的diag,spdiags函数 1. diag函数 1.1 定义      diag函数功能:矩阵对角元素的提取和创建对角阵 1.2 阅读详情
AI摘要

本文详细介绍了MATLAB中spdiags函数的使用方法及其应用场景,包括提取和替换矩阵的非零对角线,并通过多个实例解释了不同参数设置的效果。

翻译来源      matble中的help spdiags               

转载请注明出处https://blog.youkuaiyun.com/zhmjunjun/article/details/79790957   谢谢

spdiags函数推广了斜对角函数的应用,可以进行四种不同的操作,如下:


B = spdiags(A)     从m-by-n矩阵A中提取所有非零对角。B是一个min(m,n)-by-p矩阵,其列是A矩阵的p非零对角

[B,d] = spdiags(A) 返回长度为p的向量d,其整数部分对应A中的对角线(非零对角元素)。

B = spdiags(A,d) 提取d指定的对角线。

A = spdiags(B,d,A) 将d指定的对角线替换为B列,输出是稀疏的。

A = spdiags(B,d,m,n) 通过获取B的列并将它们放置在d指定的对角线上,创建一个m-by-n稀疏矩阵。.


A:  m-by-n矩阵,通常(但不一定)稀疏,其非零或指定元素位于p对角上.

B:  最小(m,n)-by-p矩阵,p为矩阵A非零斜对角线条数。

d:  长度为p的向量,是每一条非零斜对角线对应的计数标,,所以向量d的长度为p,因为矩阵A有p条非零斜对角。

Roughly, A, B, and d are related by

for k = 1:p
    B(:,k) = diag(A,d(k))
end
A的对角是如何在向量d中列出的

m-by-n 的矩阵A具有m+n-1个对角.它们是在向量d中使用从-m+1到n-1的索引指定的。

A为5X6的矩阵,矩阵A对应10个对角,分别用-4,-3,……,4,5标记。

如下图:

实例列举帮助理解——————————————————————————————————

A=[0 5 0 10 0 0;...
0 0 6 0 11 0;...
3 0 0 7 0 12;...
1 4 0 0 8 0;...
0 2 5 0 0 9]



[B, d]  =spdiags(A)

%%min(size(A))=5;   因此5为B矩阵的列,非零斜对角为B矩阵的行,

%%因为size(A)将输出矩阵A的  行 与 列,这里分别是5  与  6。    因此  min(size(A))=5

第一个输出B的列包含A的非零对角,第二个输出d列出A的非零对角的索引,如下图所示


请注意,A中最长的非零对角线包含在B的第3列中,A的其他非零对角线在B中相应的列中添加了额外的零,使B的所有列都具有相同的长度。对于A的主对角线以下的非零对角线,在列的顶部加上额外的零。对于A的主对角线以上的非零对角线,在列的底部加上额外的零。下图说明了这一点。



例二:此示例生成n点上经典的第二差分算子的稀疏三对角表示。(这个例子不好看出相互关系,但下一个例子可以看出一些)


e = ones(n,1);
A = spdiags([e -2*e e], -1:1, n, n)
%Turn it into Wilkinson's test matrix (see gallery):

A = spdiags(abs(-(n-1)/2:(n-1)/2)',0,A)
%Finally, recover the three diagonals:

B = spdiags(A)

运行代码时,将n具体化

 例三     

A = [11    0   13    0
      0   22    0   24
      0    0   33    0
     41    0    0   44
      0   52    0    0
      0    0   63    0
      0    0    0   74]
%   Here m =7, n = 4, and p = 3.  p为非零斜对角线条数

[B,d] = spdiags(A)    
 d = [-3 0 2]' 
B = [41   11    0
     52   22    0
     63   33   13
     74   44   24]

相反,对于上面的B和d,表达式spdiags(B,d,7,4)复制了原始的A。

为什么是7,4?因为想要还原的 原始矩阵A(为4X7的矩阵)

>> spdiags(B,d,7,4)
%    d是对应的非零斜对角的位置; 7,4.为构建一个列为7,行为4的矩阵,除了将矩阵B的元素,按照d非零斜对角线的位置还原,其余都填补0;
%    结果为,这些正好对应于原始矩阵A的相应位置,按A矩阵的列表示。(因为A矩阵正好是列为7,行为4的矩阵)
ans =
   (1,1)       11
   (4,1)       41
   (2,2)       22
   (5,2)       52
   (1,3)       13
   (3,3)       33
   (6,3)       63
   (2,4)       24
   (4,4)       44
   (7,4)       74

例四 此示例演示了当B列 比要替换的对角线长时;spdiags如何创建对角线。(方法一样,就是将多余部分删除,负数顺序,正数倒序录入,,自己画一下就一下子理解了)    ,repmat(A,n,m)函数主要功能是,矩阵块的复制。将矩阵A当做块,填充矩阵nXm。  具体可以在matble中,输入:    help repmat

B = repmat((1:6)',[1 7])

B =

    1  1  1  1  1  1  1
    2  2  2  2  2  2  2
    3  3  3  3  3  3  3
    4  4  4  4  4  4  4
    5  5  5  5  5  5  5
    6  6  6  6  6  6  6

d = [-4 -2 -1 0 3 4 5];
A = spdiags(B,d,6,6);
full(A)

ans =

  1  0  0  4  5  6
  1  2  0  0  5  6
  1  2  3  0  0  6
  0  2  3  4  0  0
  1  0  3  4  5  0
  0  2  0  4  5  6

三个图例,将A=spdiags(B,d,n,m)的所以转化情况都给出了,

当A矩阵行<=列时,下对角顺序;上对角逆序

当A矩阵行>列时,下对角逆序;上对角顺序





三个图例将    B = spdiags(A) 的所有情况表示出来


当A矩阵行<=列时,下对角顺序;上对角逆序

当A矩阵行>列时,下对角逆序;上对角顺序





matlab spdiags函数语法 matlab spdiags函数语法 一句话说明: Extract and create sparse band and diagonal matrices spdiags Extract and create sparse band and diagonal matrices Syntax B = spdiags(A) [B,d] = sp 阅读详情

相关推荐

scipy.sparse.diags

scipy.sparse.diags scipy.sparse.diags(diagonals, offsets=0, shape=None, format=None, dtype=None) 从对角线构造一个稀疏矩阵。 参数 diagonals:sequence of array_like 包含矩阵对角线的数组序列,对应于偏移量。 offsetssequence of int o...

lonelykid96的博客 6527

MATLAB spdiags

spdiags 复制 来源 :https://ww2.mathworks.cn/help/matlab/ref/spdiags.html 提取并创建稀疏条带和对角矩阵 语法 B = spdiags(A) [B,d] = spdiags(A) B = spdiags(A,d) A = spdiags(B,d,A) A = spdiags(B,d,m,n) 说明 spdiags函数将d...

u010751974的专栏 5365

使用Matlab实现光波导模式求解器

具体来说,我们可以使用matlab中的struct类型来定义一个包含几何形状和材料参数的结构体。具体来说,我们将使用matlab中的spdiags函数来产生五点差分矩阵,并使用Matlab中的\solve命令解决我们的系统。通过定义光波导结构、离散化它的差分方程,并使用Matlab中的\solve命令求解系统,我们可以计算光波导的模式,并通过Matlab绘图工具箱来可视化结果。最终,我们可以使用Matlab绘图工具箱来可视化光波导模式,并通过改变其几何形状和材料参数来优化其性能。

m0_47037246的博客 606

matlab用spdiags 函数构造大型稀疏对角矩阵

在Matlab中,spdiags函数主要用于创建稀疏对角矩阵或修改现有的稀疏矩阵的对角线。B:可以是一个向量或者一个矩阵,用来表示对角线的值。如果B是向量,它将被视为一个列向量,根据d参数指定的位置放置在新矩阵的对角线上。如果B是一个矩阵,spdiags函数会取B的对角线(根据d参数指定的位置)来构建一个新的稀疏矩阵。d:一个整数向量,指定B中值要放置在新矩阵中的对角线的位置。正整数表示位于主对角线之上的对角线,负整数表示位于主对角线之下的对角线,0表示主对角线。m:生成的稀疏矩阵的行数。n。

qq_65800683的博客 1785

OpenHarmony 5.1 RK3568 开发板烧录:从源码编译到镜像写入的 6 步实战

本文详细解析了OpenHarmony 5.1在RK3568开发板上的全链路开发流程,包括环境搭建、源码编译、镜像烧录等6个关键步骤。通过实战指南和避坑技巧,帮助开发者快速掌握OpenHarmony系统的烧录与定制能力,提升物联网设备开发效率。

weixin_33722405的博客 343

Jetson Orin Nano@Ubuntu22.04:IMX219 CSI摄像头配置全流程与避坑指南

本文详细介绍了在Jetson Orin Nano@Ubuntu22.04系统上配置IMX219 CSI摄像头的全流程,包括硬件安装、驱动配置、常见问题排查及性能优化。特别强调了排线方向、驱动模式选择等关键细节,并提供了实用的命令和解决方案,帮助开发者高效完成摄像头部署与调试。

prometheus9mon的博客 318

spdiags的常用用法

从 m×n 矩阵 A 中提取非零对角线,并将其作为 min(m,n)×p 矩阵 Bout 中的列返回,其中 p 是非零对角线的数目。 A: m行n列的矩阵,非零元素位于对角线上 Bout: min(m,n)行p列的矩阵,p为矩阵A非零对角线条数,p列对应A矩阵的p个非零对角线上的元素 id: 长度为p的向量,记录每一条非零对角线对应的标号 行数>=列数时,对角线左右边界对齐 行数<列数时,对角线上下边界对齐 一、提取非零对角线 对角线对齐,缺少的地方补零 A = 0 5 0

chansf的博客 2540

ArcGIS | 全球新冠肺炎地图数据下载和处理

ArcGIS

thinkpang的博客 2900

MATLAB程序设计与应用 3.5 稀疏矩阵

MATLAB程序设计与应用 3.5 稀疏矩阵

代码改变世界 2958

Veritas NetBackup8.1.1安装

1.在服务器上运行Browser.exe 2.选中安装,点击"NetBackup Server Software Installation" 3.提示一个”UAC模式”,我们确定忽略它 4.下一步 5.接受授权,下一步 6.自定义安装 7.输入Key,并点击”netBackup Master Server” 8.自定义路径,下一步 9.默认端口,下一步 10.创建内置账户 创建本地用户帐户: C:\>net user nbwebsvc <StrongPassword> /

万物皆可学 2万+

从零开始讲DDR(8)——AXI 接口MIG 使用(1)

我们简单拆解了MIG AXI接口中测试文件的整体框架,首先在sim_tb_top.sv文件中例化了DDR模型和example_top。在example_top中,又例化了MIG IP和一个流量产生器ddr4_v2_2_8_axi_tg_top。在ddr4_v2_2_8_axi_tg_top中的主要功能是分别例化了boot_mode_gen,prbs_mode_gen,custom_mode_gen和axi_opcode_gen。

apple_53311083的博客 1587

MATLAB diag & spdiags函数的使用

MATLAB diag & spdiags函数的使用

qq_33538651的博客 2196

AUTOSAR&UDS 理论要点及isolar实战-DEM模块

从这节开始,将讲解UDS诊断中非常重要的知识点:故障事件触发、故障信息上报、故障信息处理、故障信息存储和故障系统降级,后续会陆续更新。

cqaa11的博客 552

chatgpt赋能python:Python工程师必知:掌握Pythonspdiags用于高效稀疏矩阵计算

Python spdiags(sparse diagonal matrices)是Python中稀疏矩阵的一个库,它提供了创建和处理稀疏矩阵的方法。Python spdiags以Numpy数组为基础,同时支持各种不同的数据格式,提供了一些常用的函数和类,比如矩阵转置、矩阵加法和乘法等。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT。

xuhss_com的博客 904

实战案例—encrypt靶场(AES固定key篇)

AES是一种对称密钥加密方法,意味着加密和解密时使用相同的密钥。AES加密存在三种形式:AES-128、AES-192和AES-256,它们分别对应于三种不同的密钥长度——128位(即16字节)、192位(即24字节)和256位(即32字节)。通常情况下,密钥的长度越长,提供的安全性就越高,但相应地,加解密过程所需的时间也会增加。默认情况下,采用的是AES-128,其提供的安全性对于大多数应用来说已经足够充分。

zhouzhou_98的博客 497

基于 ESP32 的分布式光伏微电网智能监控系统设计与实现

设备 / 模块连接 ESP32 引脚备注I2C 总线(SDA)GPIO21所有 I2C 设备共用I2C 总线(SCL)GPIO22所有 I2C 设备共用DS18B20(单总线)GPIO18单总线通信,需外接 4.7K 上拉电阻有源蜂鸣器GPIO19低电平触发,串联 100Ω 限流电阻ESP32 供电5V/GND由 LM2596 输出 5V 供电,或直接 USB 供电(调试阶段)INA219(光伏)光伏阵列正负极接 INA219 的 VIN+/VIN-

weixin_42300449的博客 303

matlab

1.带状(对角)稀疏矩阵函数 spdiags格式 [B,d] = spdiags(A) %从矩阵A中提取所有非零对角元素,这些元素保存在矩阵B中,向量d表示非零元素的对角线位置。B = spdiags(A,d)     %从A中提取由d指定的对角线元素,并存放在B中。A = spdiags(B,d,A) %用B中的列替换A中由d指定的对角线元素,输出稀疏矩阵。A = spdia

wopiaofei的专栏 417

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

matlab中spdiag_matlab中的diag,spdiags函数

1 diag函数1.1 定义diag函数功能:矩阵对角元素的提取和创建对角阵。设以下X为方阵,v为向量1.1 用法(1)X = diag(v,k)当v是一个含有n个元素的向量时,返回一个n+abs(k)阶方阵X,向量v在矩阵X中的第k个对角线上,k=0表示主对角线,k>0表示在主对角线上方,k<0表示在主对角线下方。例1:v=[1 2 3];diag(v, 3)ans =0 0 0 1...

weixin_31360095的博客 1162

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

基于MATLAB的稀疏矩阵与符号求解线性方程组(附完整代码)

前言 前面文章已经更新了至少三种求解线性方程组的MATLAB指令,分别是: 逆矩阵法:x=inv(A)*b,或者写成 x=A^(-1)*b 伪逆法:x=pinv(A)*b 左除法:x=A\b 本节将更新另外两种方法,符号矩阵法与稀疏矩阵求解法。 一. 符号解法 在MATLAB的Symbolic Toolbox中提供了线性方程的符号求解函数,MATLAB格式如下: linsolve(sym(A),sym(b)) %结果默认小数表示 还有另外一种函数也可以,形式如下: X=s..

forest_LL的博客 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Matlab(12)——稀疏矩阵

Matlab(12)——稀疏矩阵 文章目录Matlab(12)——稀疏矩阵一、矩阵的存储方式1.完全存储方式2.稀疏存储方式二、稀疏存储方式的产生1.矩阵的完全存储方式与稀疏存储方式的转换2.直接建立稀疏存储方式的矩阵①sparse函数②spconvert函数3.带状稀疏矩阵的稀疏存储方式①从带状稀疏矩阵中提取对角线上元素②创建带状稀疏矩阵4.单位矩阵的稀疏存储方式 一、矩阵的存储方式 1.完全存...

nipirennipi136的博客 1863

2.5 matlab稀疏矩阵

稀疏矩阵:是指零元素的个数远远多于非零元素的个数的矩阵 1、矩阵的存储方式 (1)完全存储方式 (2)稀疏存储方式 稀疏存储方式只存储矩阵的非零元素的值及其位置,即行号和列号。 注意,采用稀疏存储方式时,矩阵元素的存储顺序并没有改变,也是按列的顺序进行存储。 2、稀疏存储方式的产生 (1)完全存储方式与稀疏存储方式之间的转化 ①A=sparse(S):将矩阵S转化为稀疏存储方式的矩阵A。 ②S=full(A):将矩阵A转化为完全存储方式的矩阵S。 >> a = eye(5) a = .

onlyfanlala的博客 1877

matlab使用教程(13)—稀疏矩阵创建和使用

使用稀疏矩阵存储包含众多零值元素的数据,可以节省大量内存并加快该数据的处理速度。sparse 是一种属性,可以将该属性分配给由 double 或 logical 元素组成的任何二维 MATLAB 矩阵。通过 sparse 属性,MATLAB 可以: • 仅存储矩阵中的非零元素及其索引。 • 不必对零元素执行运算,从而减少计算时间。

配电网和matlab的博客 6875

matlab如何创建稀疏矩阵,matlab稀疏矩阵创建及实例

一般有两个命令可以用来创建稀疏矩阵:1. sparse(较常用)2. spdiags(主要用于非零元素都是对角线元素的情况)sparse。使用格式如下A = sparse(i,j,,s,m,n,nzmax )其实matlab函数sparse的文档中说的比较明白:S = sparse(i,j,s,m,n,nzmax) uses vectors i, j, and s to generate an ...

weixin_35249119的博客 2818

matlab怎么输带状矩阵,谁给详细解释下 matlab里的稀疏带状矩阵创建命令 SM=spdiags(B,d,m,n)...

匿名用户1级2014-04-29 回答产生稀疏存储矩阵sparse可以讲完全存储方式转换为稀疏存储方式,那么,当使用稀疏矩阵时,要先产生完全存储方式的矩阵,然后再转换,这显然是不可取的,MATLAB有自己产生稀疏矩阵的函数spconvert:B=spconvert(A);A为一个m*3或m*4的矩阵,A的每一列的意义分别为:(i,1)第i非零元素所在行(i,2)第i非零元素所在列(i,3)第i非零...

weixin_32639437的博客 1541

matlab 转 python函数,spdiags()在MATLAB中转换为Python

I am trying to translate a MATLAB implementation into a Python 3 implementation. I've found a function, spdiags(), that I do not understand, and am also not sure how to translate it into Python 3.What...

weixin_42489917的博客 559

matlab和python转换_将MATLAB中的spdiags()转换为Python

在Octave(MATLAB备选方案)中,其文档中的示例:octave:7> x = spdiags (reshape (1:12, 4, 3), [-1 0 1], 5, 4);octave:8> full(x) # display as a full or dense matrixans =5 10 0 01 6 11 00 2 7 ...

weixin_39922004的博客 516
上一篇: GNMF代码理解 matble
下一篇: matble中 .*,.^,./,.\的例子 *
zhmjunjun
博客等级 码龄10年 38粉丝 32原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值