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?

Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

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