You really just need to make a sparse diagonal matrix. This can very easily be done with spdiags. Use the last syntax: A = spdiags(B,d,m,n), which you would be calling as: A = spdiags(B,d,n^2,n^2);. The issue now is only in setting up B and d which really just requires you to replace a few values in each of the columns of B, but this can be done by finding the appropriate indices to replace (note that not all values in B will be used, so start your counting from the bottom as this function will omit unnecessary values at the top of the matrix B). Put your head to the grindstone and I'm sure you can find the patterns necessary to do this for arbitrary values of n, without loops or cell arrays. I will do it for just for the lowest diagonal: n = 5;
B = 0.298*ones(n^2,1);
d = -(n+1);
B(end-n:-n:1) = 0;
A = spdiags(B,d,n^2,n^2);
Q = full(A);
open Q
Now, just add the columns for the other diagonals to B and add the diagonal identifier to d. Also, never use the line of code:
true is always true so the code always runs.
Best Answer