Re: Set diagonal of square matrix
- To: mathgroup at smc.vnet.net
- Subject: [mg116989] Re: Set diagonal of square matrix
- From: Peter Pein <petsie at dordos.net>
- Date: Sun, 6 Mar 2011 05:45:40 -0500 (EST)
- References: <ikt5e6$t68$1@smc.vnet.net>
Am 05.03.2011 12:05, schrieb Szabolcs:
> Dear MathGroup members,
>
> Is there any simple way to set the diagonal of a square matrix to a
> vector (of appropriate length)? Of course there are ways to do it,
> but I was wondering if there was a simple, one-line way.
>
Hi,
an almost obvious method is using Tr and DiagonalMatrix:
In[1]:= MatrixForm[mat=RandomInteger[{-5,5},{5,5}]]
vdiag=Range[5];
Out[1]//MatrixForm=
(-1 -1 -5 3 2
1 -2 1 0 -5
2 -1 3 1 2
4 -3 -1 -5 -4
0 1 -3 4 1
)
In[3]:= MatrixForm[mat+=DiagonalMatrix[vdiag-Tr[mat,List]]]
Out[3]//MatrixForm=
(1 -1 -5 3 2
1 2 1 0 -5
2 -1 3 1 2
4 -3 -1 4 -4
0 1 -3 4 5
)
hth,
Peter