任何人都知道在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很多
答案 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