0

任何人都知道在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 但无法摆脱它。

非常感谢

4

4 回答 4

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.

于 2014-04-16T13:29:28.867 回答
1

这个怎么样:

function mymatrix = makemymatrix(n)

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

那对你有用吗?

于 2014-04-16T13:15:09.880 回答
1
result = conv2(eye(6), [-1 2 -1],'same');
result([1 end]) = 1;
于 2014-06-11T10:43:45.260 回答
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
于 2018-04-09T17:35:03.543 回答