Services & Resources / Wolfram Forums
MathGroup Archive
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2002

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

Search the Archive

Re: Generating Two Unit Orthogonal Vectors (correction)

  • To: mathgroup at
  • Subject: [mg36428] Re: Generating Two Unit Orthogonal Vectors (correction)
  • From: "Ersek, Ted R" <ErsekTR at>
  • Date: Fri, 6 Sep 2002 03:17:01 -0400 (EDT)
  • Sender: owner-wri-mathgroup at

OrthogonalUnitVectors  that I sent a few minutes ago doesn't do what I
thought it would.
After making either definition below I get the following:


    {{0, -2/Sqrt[5], 0, 0, 1/Sqrt[5]}, {-2/3, -1/3, 0, 2/3, 0}, {-1/3, 2/3,
2/3, 0, 0}}

The dot products below aren't zero, so the vectors aren't orthogonal.  What
went wrong?





> Hugh Goyder and David Park gave a most elegant function to find two
> vectors that are orthogonal to one vector in 3D.  The key to coming up
> with the elegant solution is an understanding of Mathematica's NullSpace
> function.  We can easily make the version from Hugh and David much more
> general with the version below.
> -------------
> OrthogonalUnitVectors[vect__?VectorQ]:= 
>     #/Sqrt[#.#]&/@NullSpace[{vect}]
> -------------
> The version above will give a set of unit orthogonal vectors if given any
> number of vectors in any dimension.  
> So besides giving it a 3D vector we can give it the following:
>    OrthogonalUnitVectors[{2,1,0,-1,1}]
>    or
>    OrthogonalUnitVectors[{0,1,0,1/2,1},{1,0,-1,1/2}]
> ------------
> But the short version above isn't very robust.
> (1)  Clear[x,y,z];NullSpace[{{x,y,z}}]
>        returns two vectors orthogonal to {x,y,z}, but the two vectors
> NullSpace returns aren't orthogonal to each other. 
>        So (OrthogonalUnitVectors) should only work with numeric vectors.
> (2)  We should ensure all the vectors have the same dimension and length
> >1.
> I give a less concise version below that corrects these problems.
> ------------
> OrthogonalUnitVectors[vect__?(VectorQ[#,NumericQ]&)]/;
>         (SameQ@@Length/@{vect})&&(Length[First[{vect}]]>1):= 
>     #/Sqrt[#.#]&/@NullSpace[{vect}]
> --------------
> Regards,
>    Ted Ersek
>    Get Mathematica tips, tricks from

  • Prev by Date: Re: Resizing Graphics
  • Next by Date: RE: Re: Re: approximation for partitial binomial sum
  • Previous by thread: RE: RE: RE: Generating Two Unit Orthogonal Vectors
  • Next by thread: Re: Re: Generating Two Unit Orthogonal Vectors (correction)