Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2002
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*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 smc.vnet.net
  • Subject: [mg36428] Re: Generating Two Unit Orthogonal Vectors (correction)
  • From: "Ersek, Ted R" <ErsekTR at navair.navy.mil>
  • Date: Fri, 6 Sep 2002 03:17:01 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

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:

In[2]:=
   s1=OrthogonalUnitVectors[{1,0,1/2,1,0},{0,1,-1,1/2,2}]

Out[2]=
    {{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?


In[3]:= 
   Part[s1,1].Part[s1,2]

Out[3]=
   2/(3*Sqrt[5])


In[4]:= 
   Part[s1,1].Part[s1,3]

Out[3]=
   -4/(3*Sqrt[5])


--------------
> 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
>    http://www.verbeia.com/mathematica/tips/Tricks.html
> 


  • 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)