Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

[Matlab]Copy Lower Triangle of symmetric matrix to Upper Triangle(or visa versa)

  1. Oct 10, 2011 #1
    Hello all!
    I just had a question about combining elements of matrices.
    In the matlab documentation, there was a function called triu and tril that extracts the upper and lower components of a matrix, respectively. I was wondering if there was a way to copy the elements of the upper triangle to the lower triangle portion of the symmetric matrix (or visa versa)?


    haha =
    1 0 0
    1 1 0
    1 0 1 ->

    function (copy lower half to upper half)(haha)

    1 1 1
    1 1 0
    1 0 1

    any help will be appreciated. thanks!

    UPDATE- I found an article from a website that wrote the method below, but I can't entirely understand it, and moreover, don't know how I can apply this for the lower matrix, copying to the upper half. I was hoping to be able to understand the code to be able to convert, but I can't understand the code.. and testing the code gives me a mupadmex error.

    here it is:
    [ i j ] = find(tril(ones(m), 1)); %Trick to get indices.
    D = zeros(m, m); %Initialise output matrix.
    D( i + m*(j-1) )= sqrt(sum(abs( kmat(i,:) - kmat(j,:) ).^2, 2));
    D( j + m*(i-1) )= D( i + m*(j-1) );
    Last edited: Oct 10, 2011
  2. jcsd
  3. Oct 10, 2011 #2
    Some else to add to this question.
    When I actually try to go through the operation to build the first half triangle of the matrix (in order to copy it to the upper half), it gives me a CAT error, saying that a matrix cannot contain components that are empty. Is there a way to build a half-matrix so I can go through this entire operation without having to manually pad the other half of the matrix with zeros?

Share this great discussion with others via Reddit, Google+, Twitter, or Facebook