MATLAB: Create a matrix using offset elements of a vector

MATLABmatrixmatrix arrayvector

Let say I have a vector v = [v1, v2, v3], I would like to create a non-square matrix putting the vector v as tridiagonal elements like this ,
matrix = [v1, v2, v3, 0, 0, 0,…, 0;
0 , v1,v2,v3, 0, 0 ,…,0;
0 , 0, v1,v2,v3,0,…..,0;]
I know there's a diag command but it's only for square matrix. What's the way of creating a non-square matrix?

Best Answer

Try blktridiag:
A = blktridiag([1;2],[3;4],[5;6],4);
full(A)
ans =
1 5 0 0
2 6 0 0
3 1 5 0
4 2 6 0
0 3 1 5
0 4 2 6
0 0 3 1
0 0 4 2
Run help blktridiag for more info