2

我的问题是如何在 matlab 程序中创建相同类型的矩阵,使其保持相同的逻辑,即主对角线中的 10 秒,然后主对角线周围的上下对角线中的 3 秒,以及对角线中的矩阵在其他情况下高于和低于 3 和 0,并且我可以根据我想要的任何 NxN 进行修改?

类似这样的 6x6 机箱

A = [10  3  1  0  0  0 ; 
      3 10  3  1  0  0 ;
      1  3 10  3  1  0 ; 
      0  1  3 10  3  1 ; 
      0  0  1  3 10  3 ;
      0  0  0  1  3 10 ];
4

2 回答 2

3

代码:

toeplitz([10  3  1  0  0  0])

输出:

ans =

    10     3     1     0     0     0
     3    10     3     1     0     0
     1     3    10     3     1     0
     0     1     3    10     3     1
     0     0     1     3    10     3
     0     0     0     1     3    10
于 2013-04-03T00:45:02.497 回答
3

对于非常大的矩阵(N=10000),您必须使用稀疏矩阵。
考虑使用以下构造spdiags

function A = largeSparseMatrix( N )
%
% construct NxN sparse matrix with 10 on main diagonal, 
% 3 on the first off-diagonals and 1 on the second off-diagonals
%
B = ones(N, 5); % pre-allocate for diagonals
B(:,1) = 10;  % main diagonal d(1) = 0
B(:,2:3) = 3; % first off diagonal
B(:,4:5) = 1; % second off-diagonal
d = [ 0 , 1, -1, 2, -2 ]; % mapping columns of B to diagonals of A
A = spdiags( B, d, N, N ); % TA-DA!

请注意, 中的某些条目在B的构造中被忽略A。有关更多信息,
请参阅手册。spdiags

于 2013-04-03T05:59:09.817 回答