MathGroup Archive 1996

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: VectorToMatrix

  • To: mathgroup at smc.vnet.net
  • Subject: [mg4373] Re: VectorToMatrix
  • From: Paul Abbott <paul at physics.uwa.edu.au>
  • Date: Mon, 15 Jul 1996 07:01:10 -0400
  • Organization: University of Western Australia
  • Sender: owner-wri-mathgroup at wolfram.com

Robert Pratt wrote:

> I want to define a function VectorToMatrix[list_, n_] that behaves as
> follows:
> 
> VectorToMatrix[{a,b,c,d,e,f,g,h,i,j}, 4]//MatrixForm
> 
> 0 a b c d
> 0 0 e f g
> 0 0 0 h i
> 0 0 0 0 j
> 
> Now n can be determined from Length[list], which will always be equal 
> to n choose 2 for some n.  But I would rather input n to save that
> computation.  (I will be doing this for a lot of vectors.)

See The Mathematica Journal 4(1):34.  That example converts a vector 
into a symmetric matrix.  It is easy to modify this example to meet 
your needs:

To convert a vector into a symmetric matrix, note that an m x m 
symmetric  matrix corresponds to a vector of length m(m+1)/2 (a so-
called traingular  number). Inverting this formula: 

In[1]:= dim[n_] = (m /. Solve[m(m+1)/2 == n, m] // Last)

Out[1]= -1 + Sqrt[1 + 8 n]
        ------------------
               2

In[2]:= vec = {a,b,c,d,e,f,g,h,i,j};

In[3]:= dim[Length[vec]]

Out[3]= 4

This is fast so you might as well compute it.

In[4]:= VectorToMatrix[vec_ /; IntegerQ[dim[Length[vec]]]] :=
	Module[{m = dim[Length[vec]],i,j},
		Table[If[i>=j,0,vec[[j + (i-1)(m-i/2)-1]]],
  			{i, m}, {j, m+1} ]] 

In[5]:= VectorToMatrix[vec] // MatrixForm

Out[17]//MatrixForm=
0   a   b   c   d

0   0   e   f   g

0   0   0   h   i

0   0   0   0   j

Cheers,
	Paul 
_________________________________________________________________ 
Paul Abbott
Department of Physics                       Phone: +61-9-380-2734 
The University of Western Australia           Fax: +61-9-380-1014
Nedlands WA  6907                         paul at physics.uwa.edu.au 
AUSTRALIA                           http://www.pd.uwa.edu.au/Paul
_________________________________________________________________

==== [MESSAGE SEPARATOR] ====


  • Prev by Date: Re: Re: help! to input data...
  • Next by Date: Re: Abort options in Windows
  • Previous by thread: Re: VectorToMatrix
  • Next by thread: Re: context problem