在 Matlab 中创建能带矩阵
Create band matrix in Matlab
我正在尝试在 Matlab 中创建一个带状矩阵,对于 matrix_size = 6 和 band_width = 1 应该看起来像这样:
[1,1,0,0,0,0]
[1,2,2,0,0,0]
[0,2,3,3,0,0]
[0,0,3,4,4,0]
[0,0,0,4,5,5]
[0,0,0,0,5,6]
值应该是这样的。
我确实运行了,这给了我结果:
[1,1,0,0,0,0]
[1,1,1,0,0,0]
[0,1,1,1,0,0]
[0,0,1,1,1,0]
[0,0,0,1,1,1]
[0,0,0,0,1,1]
我的函数代码:
function M=bandmatrix(n,r)
% n -- matriz size
% r -- band width
% n >= r + 2
M = sign(conv2(eye(n),ones(r+1),'same'));
end
如何实现这个功能?我也将感谢该功能,其中的值与我想要的相同,但功能不依赖于带宽。谢谢!
您可以按如下方式使用diag
:
diag(1:6)+diag(1:5,1)+diag(1:5,-1)
一般来说,对于任何订单 n
:
diag(1:n)+diag(1:n-1,1)+diag(1:n-1,-1)
你也可以这样做:
clear;
m = 6;
n = 6;
diags = repmat((1:6)', 1, 3);
diagidx = [-1:1];
for k = 1:length(diagidx)
if(diagidx(k) > 0)
diags(:, k) = circshift(diags(:, k), diagidx(k), 1);
end
end
sparseMat = spdiags(diags, [-1:1], m, n);
myMat = full(sparseMat)
使用稀疏矩阵允许我们指定数据并且只分配一次。
但这也意味着需要根据矩阵的胖瘦来移动对角线中使用的值。
我正在尝试在 Matlab 中创建一个带状矩阵,对于 matrix_size = 6 和 band_width = 1 应该看起来像这样:
[1,1,0,0,0,0]
[1,2,2,0,0,0]
[0,2,3,3,0,0]
[0,0,3,4,4,0]
[0,0,0,4,5,5]
[0,0,0,0,5,6]
值应该是这样的。 我确实运行了,这给了我结果:
[1,1,0,0,0,0]
[1,1,1,0,0,0]
[0,1,1,1,0,0]
[0,0,1,1,1,0]
[0,0,0,1,1,1]
[0,0,0,0,1,1]
我的函数代码:
function M=bandmatrix(n,r)
% n -- matriz size
% r -- band width
% n >= r + 2
M = sign(conv2(eye(n),ones(r+1),'same'));
end
如何实现这个功能?我也将感谢该功能,其中的值与我想要的相同,但功能不依赖于带宽。谢谢!
您可以按如下方式使用diag
:
diag(1:6)+diag(1:5,1)+diag(1:5,-1)
一般来说,对于任何订单 n
:
diag(1:n)+diag(1:n-1,1)+diag(1:n-1,-1)
你也可以这样做:
clear;
m = 6;
n = 6;
diags = repmat((1:6)', 1, 3);
diagidx = [-1:1];
for k = 1:length(diagidx)
if(diagidx(k) > 0)
diags(:, k) = circshift(diags(:, k), diagidx(k), 1);
end
end
sparseMat = spdiags(diags, [-1:1], m, n);
myMat = full(sparseMat)
使用稀疏矩阵允许我们指定数据并且只分配一次。 但这也意味着需要根据矩阵的胖瘦来移动对角线中使用的值。