       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:=
s1=OrthogonalUnitVectors[{1,0,1/2,1,0},{0,1,-1,1/2,2}]

Out=
{{0, -2/Sqrt, 0, 0, 1/Sqrt}, {-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:=
Part[s1,1].Part[s1,2]

Out=
2/(3*Sqrt)

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

Out=
-4/(3*Sqrt)

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