Matlab中的三对角矩阵

时间:2014-04-16 11:01:56

标签: matlab matrix toeplitz

任何人都知道在matlab中快速有效地构建以下方阵

 1    -1     0     0     0     0
-1     2    -1     0     0     0
 0    -1     2    -1     0     0
 0     0    -1     2    -1     0
 0     0     0    -1     2    -1
 0     0     0     0    -1     1

除了对角线的第一个和最后一个元素以及两个相邻对角线上的-1之外,对角线上有2个。

这是一个6x6的例子,我想尽可能快速有效地在Matlab中生成nxn。我尝试使用内置函数kron,但无法逃脱它。

Thansk很多

4 个答案:

答案 0 :(得分:2)

这是一个选项

function a = laplacianMatrix(n)

  a = toeplitz([2,-1,zeros(1,n-2)]);
  a([1,end]) = 1;

end

此版本或使用gallery的版本(请参阅Sam Roberts的回答)是否更快似乎取决于矩阵的大小。对于小型矩阵(我的机器上最多n = 200),使用toeplitz会更快。对于较大的矩阵,使用gallery会更快。

答案 1 :(得分:1)

这个怎么样:

function mymatrix = makemymatrix(n)

mymatrix = full(gallery('tridiag',n,-1,2,-1));
mymatrix([1,end]) = 1;

这对你有用吗?

答案 2 :(得分:1)

result = conv2(eye(6), [-1 2 -1],'same');
result([1 end]) = 1;

答案 3 :(得分:0)

n=6;

B=zeros(n);


for i=1:n

    for j=1:n
        B(1,1)=1;
        if i==j
        B(i,j)=2;
        elseif i==j+1
        B(i,j)=-1;
        elseif j==i+1
        B(i,j)=-1
        else
        B(i,j)=0;
        end
        B(n,n)=1;
    end

end;
 B