How to get a diagonal matrix from A vector
I have a column:
0.0677 0.0584 0.0487 0.0453 0.0394
What instruction would get the following output
0.0677 0 0 0 0 0 0.0584 0 0 0 0 0 0.0487 0 0 0 0 0 0.0453 0 0 0 0 0 0.0394
If I remember correctly there's a command called something like diag(A)
Edit: here you go, some documentation on the diag http://www.mathworks.com/help/techdoc/ref/diag.html
pay particular attention to the quote:
X = diag(v) puts v on the main diagonal, same as above with k = 0.
diag is the normal MATLAB solution (as pointed out by posdef.) Thus
D = diag(vec);
gives you a matrix with diagonal elements as needed.
Perhaps better in some applications is to create a sparse matrix, since a diagonal matrix is quite sparse. So if you are doing matrix multiplies this will greatly help in reducing the number of unnecessary operations.
n = length(vec); D = spdiags(vec(:),0,n,n);
If you truly wanted to do the assignment in an explicit form, use a single linear index like this:
n = length(vec); D = zeros(n); D(cumsum([1,repmat(n+1,1,n-1)])) = vec;
Or you could use the sub2ind function to convert a set of indices into a single index.
The following gives the diagonal matrix D whose diagonal is the vector vec. It is written in a vectorized fashion in MATLAB.
D = zeros(numel(vec)); [I,J] = ind2sub(size(D),1:numel(D)); ind = [I(:) J(:)]; ind = find(ind(:,1)==ind(:,2)); D(ind) = vec;
Well, obviously you can do it in a C-like way. Right now I can't figure out more elegant solution.
vector;%Your vector vec_length = length(vector); A = zeros(vec_length); for i=1:vec_length A(i,i) = vector(i); end;