MATLAB 对角矩阵
在本教程中,我们将讨论如何使用 MATLAB 中的 diag()
和 spdiags()
函数制作对角矩阵。
在 MATLAB 中使用 diag()
函数制作对角矩阵
要制作对角矩阵或获取矩阵的对角线元素,可以在 MATLAB 中使用 diag()
函数。例如,让我们根据给定的向量制作对角矩阵。请参见下面的代码。
vector = [1 2 3 4 5];
diagonal = diag(vector)
输出:
diagonal =
1 0 0 0 0
0 2 0 0 0
0 0 3 0 0
0 0 0 4 0
0 0 0 0 5
在上面的代码中,我们制作了一个 5x5
对角矩阵,其中对角线元素存储在变量 vector
中。diag()
函数根据给定向量内存在的元素数量创建一个方阵。如果元素的数量为 5,则对角矩阵将为 5x5
。你也可以通过在 diag()
函数内使用第二个参数来更改对角线的位置。如果第二个参数等于 0,则向量将放置在主对角线上。如果第二个参数大于 0,则向量将放置在主对角线上方。如果第二个参数小于 0,则向量将放置在主对角线下方。例如,让我们将向量放置在主对角线上方。请参见下面的代码。
vector = [1 2 3 4 5];
diagonal = diag(vector,1)
输出:
diagonal =
0 1 0 0 0 0
0 0 2 0 0 0
0 0 0 3 0 0
0 0 0 0 4 0
0 0 0 0 0 5
0 0 0 0 0 0
在上面的代码中,我们创建了一个对角矩阵,其元素放置在主对角线上。如你所见,对角线的大小现在为 6x6
,因为向量位于主对角线上方,并且为了确保所有元素都位于矩阵内,矩阵的大小增加了。你也可以使用 diag()
函数从矩阵获取对角线元素。例如,让我们从给定的矩阵中获取主要的对角线元素。请参见下面的代码。
vector = [1 2 3;4 5 6;7 8 9]
diagonal = diag(vector)
输出:
vector =
1 2 3
4 5 6
7 8 9
diagonal =
1
5
9
在上面的代码中,我们使用了 diag()
函数从给定矩阵中查找对角线元素,你可以看到该函数返回了给定矩阵的对角线元素。你也可以使用 diag()
函数中的第二个参数获取主对角线上方和下方的对角线元素,就像上面我们用来制作对角线矩阵且元素在主对角线上方的情况一样。查看此网页以获取有关 diag()
函数的更多信息。
在 MATLAB 中使用 spdiags()
函数制作对角矩阵
要制作一个具有多个对角线的对角矩阵或获取矩阵的所有对角线元素,可以在 MATLAB 中使用 spdiags()
函数。在 spdiags()
函数内部传递的第一个参数是值,第二个参数是对角线位置,第三个和第四个参数是对角矩阵的大小。例如,让我们根据给定的向量制作一个三对角矩阵。请参见下面的代码。
v1 = [1 2 3 4 5].';
v2 = [2 2 2 2 2].';
v3 = [3 3 3 3 3].';
diagonal = spdiags([v2 v1 v3],-1:1,5,5);
matrix = full(diagonal)
输出:
matrix =
1 3 0 0 0
2 2 3 0 0
0 2 3 3 0
0 0 2 4 3
0 0 0 2 5
在上面的代码中,我们制作了一个 5x5
三对角矩阵,其对角线元素存储在三个变量:v1
,v2
和 v3
中。你可以创建任意数量的对角矩阵。你也可以使用 springs()
函数更改给定矩阵的对角线值。为此,请在第一个参数中传递新值,将值的位置作为第二个参数传递,并将要更改其值的矩阵作为第三个参数传递。例如,让我们更改上述三对角矩阵的主要对角线元素。请参见下面的代码。
v1 = [1 2 3 4 5].';
v2 = [2 2 2 2 2].';
v3 = [3 3 3 3 3].';
diagonal = spdiags([v2 v1 v3],-1:1,5,5);
matrix1 = full(diagonal)
v4 = [9 9 9 9 9].';
diagonal = spdiags(v4,0,diagonal);
matrix2 = full(diagonal)
输出:
matrix1 =
1 3 0 0 0
2 2 3 0 0
0 2 3 3 0
0 0 2 4 3
0 0 0 2 5
matrix2 =
9 3 0 0 0
2 9 3 0 0
0 2 9 3 0
0 0 2 9 3
0 0 0 2 9
在上面的代码中,我们更改了 matrix1
主对角线的值。更改值,并将新矩阵保存在变量 matrix2
中。你还可以使用 spdaigs()
函数从给定的矩阵中提取所有非零对角线元素。例如,让我们提取上述矩阵的非零元素。请参见下面的代码。
v1 = [1 2 3 4 5].';
v2 = [2 2 2 2 2].';
v3 = [3 3 3 3 3].';
diagonal = spdiags([v2 v1 v3],-1:1,5,5);
matrix = full(diagonal)
diag_Values = spdiags(matrix)
输出:
matrix =
1 3 0 0 0
2 2 3 0 0
0 2 3 3 0
0 0 2 4 3
0 0 0 2 5
diag_Values =
2 1 0
2 2 3
2 3 3
2 4 3
0 5 3
提取给定矩阵的对角线值并将其存储在变量 diag_values
中。对角线值存储在矩阵的列中。第一个对角线元素存储在第一列中,依此类推。查看此网页以获取有关 diag()
函数的更多信息。