2014-04-16 204 views
0

任何人都知道在Matlab快速有效的方式來構建以下方陣三對角矩陣在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 

有2點的對角線上的,除了在-1相鄰的兩個對角的第一個和最後一個元素,對角線。

這是一個6x6的例子,我想在Matlab nxn中生成一個儘可能快且儘可能高效的例子。我嘗試使用內置函數kron,但無法脫身。

Thansk很多

+1

檢查答案[這裏](http://stackoverflow.com/questions/5919779/how-to-make-tridiagonal-matrix-in-matlab)。 – buzjwa

+0

@Naveh,這不是完全相同的請求,雖然... – mbschenkel

+0

我知道,只是認爲它可能是有用的。這不是重複的。 – buzjwa

回答

1

如何:

function mymatrix = makemymatrix(n) 

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

爲你做這項工作?

2

這裏是一個選項

function a = laplacianMatrix(n) 

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

end 

無論這個版本或使用gallery版本(見薩姆·羅伯茨的回答)是快似乎取決於矩陣的大小。對於小型矩陣(在我的機器上最多可達n = 200),使用toeplitz會更快。對於較大的矩陣,使用gallery會更快。

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