RE: Creating a symmetric matrix
- To: mathgroup at smc.vnet.net
- Subject: [mg46860] RE: [mg46853] Creating a symmetric matrix
- From: "David Park" <djmp at earthlink.net>
- Date: Fri, 12 Mar 2004 02:02:45 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Mark,
Here's one method.
maketest[n_] :=
Module[{mat = IdentityMatrix[n], i},
Do[Part[mat, i] = PadLeft[Table[a[i, j], {j, i, n}], n], {i, 1, n}];
mat]
(testmat = maketest[3]) // MatrixForm
triangularToSymmetric[mat_?MatrixQ] /; Equal @@ Dimensions[mat] :=
Module[{workmat = mat + Transpose[mat], i},
Do[Part[workmat, i, i] = Part[mat, i, i], {i, 1, Length[workmat]}];
workmat]
triangularToSymmetric[testmat] // MatrixForm
I added the matrix to its transpose and then replaced the diagonal elements
from the original matrix. I wish there were a way I could replace the
diagonal elements all at once.
I'm interested in seeing the other answers you will get.
David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/
From: Mark Coleman [mailto:mark at markscoleman.com]
To: mathgroup at smc.vnet.net
Greetings,
How can I efficiently build a symmetric matrix from an upper triangular
one, i.e., extract the upper triangular elements and insert them into
the lower triangle in such a way as to make the resulting square matrix
symmetric?
Thanks,
Mark