主要内容

spdiags

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

描述

例子

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

例子

[布特ID) = spdiags (一种也返回对角线号码ID对于非零对角线一种.的大小布特分钟(m, n)——- - - - - -长度(ID)

例子

布特= spdiags (一种D.提取对角线一种由此指定D.并将其作为列返回它们分钟(m, n)——- - - - - -长度(d)矩阵布特

例子

S.= spdiags (D.mN创造一个m——- - - - - -N稀疏矩阵S.通过取列并将它们沿对角线放置D.

例子

S.= spdiags (D.一种替换对角线一种由此指定D.用列

例子

全部收缩

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

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

n = 9;e =那些(n,1);a = spdiags([e -2 * e], -  1:1,n,n);全(a)
ans =.9×9.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 1 0 0 0 0 0 0 0 1 2

更改主要值(d = 0)对角一种

bin = abs( - (n-1)/ 2:(n-1)/ 2)';d = 0;a = spdiags(bin,d,a);全(a)
ans =.9×9.4 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 11 2 11 1 1 1 1 0 1 11 1 11 11 2 1 1 3 1 0 4 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×4.0 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列布特.提供所有列布特等长,其它非零对角线一种在相应的列中添加额外的零布特.为m——- - - - - -N矩阵与M ,规则是:

  • 对于非零对角线以下主要对角线一种,额外的0加在最高额列的(如…的前两列布特)。

  • 对于非零对角线以上主要对角线一种,额外的0加在底部列的(如在的最后一列布特)。

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

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

一个=兰迪(10、5、5)
A =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 10 7

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

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

尝试提取第五个超对角线(d = 5)。因为一种只有四个超级对角线,spdiags将对角线返回为与main (d = 0)对角线。

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

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

创建数字1到6的6×7矩阵。

Bin = repmat((1:6)',[1 7])
bin =6×71 11 1 11 1 11 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 5 6 6 6 6 6 6 6 6

spdiags创建一个6乘6的方阵有几列作为对角线。因为某些对角线只有一个或两个元素,所以列中的大小在列中存在不匹配和对角线一种

d = [-4 -2 -1 0 3 4 5];a = spdiags(bin,d,6,6);全(a)
ans =.6×6.1 0 0 4 0 5 6 1 2 0 0 5 6 1 2 3 0 0 6 0 2 3 4 0 0 4 4 0 0 2 0 4 5 6

每一列有6个元素,但只有主对角线在一种有六个要素。因此,所有其他对角线一种截断列中的元素这样他们就适合所选择的对角线:

方式spdiags截断对角线取决于大小m——- - - - - -N矩阵一种.什么时候 m N ,行为如下图所示:

  • 对角线以下元素的主对角线取元素最高额首先列。

  • 对角线以上元素的主对角线取元素底部首先列。

此行为何时逆转 m < N

a = spdiags(bin,d,5,6);全(a)
ans =.5×6.1 0 0 1 1 2 2 0 0 2 2 2 3 3 3 0 0 3 0 0 4 4 0 0 5 0 5 5 0

  • 对角线以上元素的主对角线取元素最高额首先列。

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

输入参数

全部收缩

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

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

对角线编号,指定为正整数的标量或向量。对角线数遵循与此相同的约定诊断接头

  • D <0.低于主要对角线,满足于d> = - (m-1)

  • d = 0是主对角线。

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

一个m——- - - - - -N矩阵一种(m + n - 1)对角线。这些对角线在向量中指定D.使用指数从- (m-1)(n-1).例如,如果一种是5-by-6,它有10个对角线,在向量中指定D.使用Indices -4,-3,... 4,5.下图说明了该对角线编号。

如果你指定一条对角线在外面一种(如d = 7在上面的例子中),然后spdiags返回对角线作为所有零。

例子:SPDIAGS(A,[3 5])从中抽取第三条和第五条对角线一种

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

与语法S = spdiags(本·d m, n),如果一列有比它要替换的对角线更多的元素,以及m > = n, 然后spdiags的超对角线元素降低一部分的一部分和来自的子对角线的元素一部分的一部分.但是,如果M ,则超对角线来自一部分的一部分,以及来自的子对角线降低部分。有关此行为的示例,请参阅不同尺寸的列和对角线

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

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

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

输出参数

全部收缩

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

对角线数,作为列向量返回。看到D.获取对角线编号的描述。

输出矩阵。S.采取两种形式中的一种:

  • s = spdiags(bin,d,a),指定的对角线一种用列替换为创建S.

  • S = spdiags(本·d m, n), 这m——- - - - - -N稀疏矩阵S.是由列向量构成的并将它们沿对角线放置D.

扩展功能

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

也可以看看

|

在R2006A之前介绍