主要内容

spdiags

提取非零对角线,并创建稀疏带和对角矩阵

描述

例子

布特= spdiags (一个提取非零对角线——- - - - - -n矩阵一个并将它们作为列返回分钟(m, n)——- - - - - -p矩阵布特,在那里p是非零对角线的个数。

例子

布特id) = spdiags (一个也返回对角线数字id对于非零对角线一个.的大小布特分钟(m, n)——- - - - - -长度(id)

例子

布特= spdiags (一个d提取对角线一个指定的d并以列的形式返回分钟(m, n)——- - - - - -长度(d)矩阵布特

例子

年代= spdiags (箱子dn创建一个——- - - - - -n稀疏矩阵年代通过取的列箱子把它们放在对角线上d

例子

年代= spdiags (箱子d一个替换对角线一个指定的d箱子

例子

全部折叠

创建一个三对角矩阵使用三个向量,改变一些矩阵对角线,然后提取对角线。

创建一个9乘1的1的向量,然后使用这个向量创建一个三对角矩阵。查看矩阵元素。

n = 9;e =的(n - 1);A = spdiags([e -2*e e],-1:1,n,n);完整的(一个)
ans =9×92 1 0 0 0 0 0 0 0 1 2 1 0 0 0 0 0 0 0 1 2 1 0 0 0 0 0 0 0 1 2 1 0 0 0 0 0 0 0 1 2 1 0 0 0 0 0 0 0 1 2 1 0 0 0 0 0 0 0 1 2 1 0 0 0 0 0 0 0 1 2 1 0 0 0 0 0 0 0 1 2

更改main上的值(d = 0)对角一个

本= abs (- (n - 1) / 2: (n - 1) / 2) ';d = 0;= spdiags(本,d, A);完整的(一个)
ans =9×94 1 1 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 1 2 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 2 1 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 1 4

最后,恢复的对角线一个作为矩阵的列。

布特= spdiags(一个);全部(轮)
ans =9×31 4 0 1 3 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 3 1 0 4 1 1

提取矩阵的非零对角线,并检查输出格式spdiags

创建一个包含非零对角线和零对角线的混合矩阵。

A = [0 5 0 10 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];

从矩阵中提取非零对角线。指定两个输出以返回对角线数。

布特[d] = spdiags (A)
布特=5×40 0 5 10 0 0 6 11 0 3 7 12 1 4 8 0 2 5 9 0
d =4×1-3 -2 1 3

第一个输出的列布特包含的非零对角线一个.第二个输出d列出的非零对角线的下标一个.最长的非零对角线一个在第3列布特.给出的所有列布特同样的长度,另一条非零对角线一个是否在相应的列上加上额外的零布特.为——- - - - - -n矩阵与m < n,规则是:

  • 为非零的对角线下面主对角线一个,额外的零被加在上衣列的(如在。的前两列布特).

  • 为非零的对角线以上主对角线一个,额外的零被加在底部列的最后一列布特).

spdiags布特即使最长的对角线没有返回布特

创建一个5乘5的随机矩阵。

一个=兰迪(10、5、5)
一个=5×59 1 2 2 7 10 3 10 5 1 2 6 10 10 9 10 10 5 8 10 7 10 9 10 7

提取主对角线,以及它上面和下面的第一条对角线。

D = [-1 0 1];布特= spdiags (A, d)
布特=5×310 9 0 6 3 1 5 10 10 10 10 8 10 0 7 10

试着提取第五条超级对角线(d = 5).因为一个只有四条超对角线,spdiags返回与主节点长度相同的所有0的对角线(d = 0)对角线。

B5 = spdiags (5)
B5 =5×10 0 0 0

检查如何spdiags当输入矩阵的列比它们要替换的对角线长时,创建对角线。

用数字1到6创建一个6乘7的矩阵。

Bin = repmat((1:6)',[1 7])
本=6×71 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6

使用spdiags创建一个6 × 6的方阵,其中的几列为箱子对角线。由于一些对角线只有一个或两个元素,在列之间的大小不匹配箱子和对角线一个

[-4 -2 -1 0 3 4 5];= spdiags(本·d 6 6);完整的(一个)
ans =6×61 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

每一列箱子有六个元素,但只有主对角线在一个有六个元素。因此,所有其他对角线一个截断的列中的元素箱子以便它们适合于选定的对角线:

的方式spdiags截短对角线取决于大小——- - - - - -n矩阵一个.当 n ,其行为如下图所示:

  • 对角线下面主对角线从上衣首先是列。

  • 对角线以上主对角线从底部列第一位。

这种行为在 < n

= spdiags(本,d, 5, 6);完整的(一个)
ans =5×61 0 0 1 1 1 2 2 0 0 2 2 3 3 3 0 0 3 0 0 3 0 4 4 4 0 0 5 0 5 5 5 0

  • 对角线以上主对角线从上衣首先是列。

  • 对角线下面主对角线从底部列第一位。

输入参数

全部折叠

输入矩阵。这个矩阵通常(但不一定)是稀疏的。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑
复数的支持:万博1manbetx是的

对角数,指定为正整数的标量或向量。对角线数遵循与诊断接头

  • d < 0在主对角线以下,满足吗d > = - (m - 1)

  • d = 0是主对角线。

  • d > 0在主对角线上,满足吗d < = (n - 1)

一个——- - - - - -n矩阵一个(m + n - 1)对角线。这些对角线是在向量中指定的d使用指数从——(m - 1)(n - 1).例如,如果一个是5乘6,它有10条对角线,在向量中有规定d使用索引-4,-3,…4、5。下面的图表说明了这种对角线编号。

如果你指定一条对角线位于一个(如d = 7在上面的例子中),然后spdiags返回对角线为全0。

例子:spdiags (5 [3])抽取第三和第五对角线一个

对角元素,指定为一个矩阵。这个矩阵通常(但不一定)是满的。spdiags使用箱子中指定的对角线一个.如果请求的输出大小为——- - - - - -n,然后箱子必须有分钟(m, n)列。

与语法S = spdiags(本·d m, n),如果是一列箱子比要替换的对角线有更多的元素,然后呢m > = n,然后spdiags将超对角线元素从较低的列的一部分箱子的子对角线元素列的一部分箱子.然而,如果m < n,那么超对角线是从列的一部分箱子,和次对角线较低的部分。有关此行为的示例,请参见不同尺寸的列和对角线

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑
复数的支持:万博1manbetx是的

尺寸大小,指定为非负标量整数。spdiags使用这些输入来确定要创建的矩阵有多大。

例子:spdiags(本,d, 300400)创建一个300 × 400的矩阵,列为B沿着指定的对角线放置d

输出参数

全部折叠

对角元素,作为一个完整的矩阵返回。的列布特包含对角线提取一个.任何元素的布特对应于外面的位置一个设置为零。

对角线数,作为列向量返回。看到d用于描述对角线编号。

输出矩阵。年代采取两种形式之一:

  • S = spdiags(本,d, A)中指定的对角线一个中的列替换为箱子创建年代

  • S = spdiags(本·d m, n),——- - - - - -n稀疏矩阵年代是由箱子把它们放在对角线上d

扩展功能

C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。

另请参阅

|

之前介绍过的R2006a