主要内容

spdiags

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

描述

例子

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

例子

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

例子

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

例子

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

例子

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

例子

全部折叠

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

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

N = 9;E = ones(n,1);A = spdigs ([e -2*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

更改主(D = 0)对角线一个

Bin = abs(-(n-1)/2:(n-1)/2)';D = 0;A = spdigs (Bin,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

最后,恢复对角线一个就像矩阵中的列。

回合= spdigs (A);全部(轮)
ans =9×31 4 0 1 3 1 1 2 1 1 1 1 1 1 1 1 0 1 1 1 1 2 1 1 3 1 0 4 1

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

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

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

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

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

第一个输出的列布特的非零对角线一个.第二个输出d的非零对角线的下标一个.最长的非零对角线一个在第三栏布特.给出的所有列布特同样的长度,其他非零对角线一个是否有额外的0加到对应的列中布特.为——- - - - - -n矩阵与M < n,规则如下:

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

  • 对于非零对角线以上的主对角线一个时,额外的0被添加到底部的最后一列布特).

spdiags布特即使最长的对角线没有返回,也要以这种方式使用零布特

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

A = randi(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];回合= spdigs (A,d)
布特=5×310 9 0 6 3 1 5 10 10 10 8 10 0 7 10

试着提取第5条超对角线(D = 5).因为一个只有四条超对角线,spdiags将对角线返回为与主元素(D = 0)对角线。

B5 = spdigs (A,5)
B5 =5×10 0 0 0 0

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

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

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

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

D = [-4 -2 -1 0 3 4 5];A = spdigs (Bin,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

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

  • 对角线以上主对角线取元素上衣首先是列的。

  • 对角线下面主对角线取元素底部首先是列的。

输入参数

全部折叠

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

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑
复数支持:金宝app是的

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

  • 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(Bin,d,m,n),若为一列的箱子它的元素比它要替换的对角线的元素多,然后M >= n,然后spdiags中的超对角线元素较低的列的一部分箱子的次对角线元素列的一部分箱子.然而,如果M < n,那么超对角线都是从列的一部分箱子的次对角线较低的部分。有关此行为的示例,请参见不同大小的列和对角线

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑
复数支持:金宝app是的

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

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

输出参数

全部折叠

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

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

输出矩阵。年代有两种形式:

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

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

扩展功能

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

另请参阅

|

R2006a之前介绍