# how to make the main diagonal of K are alternatively 2 and -2’s

5 views (last 30 days)
kingsley on 15 Feb 2017
Commented: kingsley on 16 Feb 2017
How to get alternative signs for the numbers on the diagonal of a matrix
##### 2 CommentsShowHide 1 older comment
John D'Errico on 15 Feb 2017
Edited: John D'Errico on 15 Feb 2017
Please don't add new questions just to add additional information to an existing question. I have moved the separate question by this individual into a comment:
I want to create a matrix that the main diagonal of K are alternatively 2 and -2’s, the sub- and sup-diagonal of K alternatively 1 and -1’s, and everywhere else 0. The size of K is 2n by 2n.
Here is what I got so far.
x=ones(1,5);
y=ones(1,4);
x2=2*x;
y2=y*-1;
z=diag(x2,0)+diag(y2,+1)
d=diag(y2,-1)
g=z+d

Image Analyst on 15 Feb 2017
One way, of many:
K = 2 * eye(5)
[rows, columns] = size(K)
K(1:2*rows+2:end) = -K(1:2*rows+2:end)
kingsley on 15 Feb 2017
Thank you so much !!!

John D'Errico on 15 Feb 2017
Edited: John D'Errico on 15 Feb 2017
So you want to create a tridiagonal matrix, with the main diagonal alternating +/- 2, and the sub and super diagonals alternating +/- 1?
n = 5;
k = mod(1:n,2)*2 - 1;
A = diag(k*2) + diag(k(1:n-1),-1) + diag(k(1:n-1),1)
A =
2 1 0 0 0
1 -2 -1 0 0
0 -1 2 1 0
0 0 1 -2 -1
0 0 0 -1 2
A loop would have been nearly as easy, but not really necessary if you know the tools in MATLAB.
The best solution (IMHO) is to use spdiags.
kingsley on 16 Feb 2017
right!!! Thank you so much!