MathGroup Archive 2002

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

Search the Archive

RE: RE: Generating Two Unit Orthogonal Vectors

  • To: mathgroup at smc.vnet.net
  • Subject: [mg36476] RE: [mg36448] RE: Generating Two Unit Orthogonal Vectors
  • From: "DrBob" <drbob at bigfoot.com>
  • Date: Sun, 8 Sep 2002 03:31:00 -0400 (EDT)
  • Reply-to: <drbob at bigfoot.com>
  • Sender: owner-wri-mathgroup at wolfram.com

Wouldn't it be nice if NullSpace's behavior were DOCUMENTED?  Otherwise,
it's futile to give it approximate numbers expecting any particular
behavior.  Even if it always works, it may not work in the next version
of Mathematica.

Bobby

-----Original Message-----
From: Ersek, Ted R [mailto:ErsekTR at navair.navy.mil] 
To: mathgroup at smc.vnet.net
Subject: [mg36476] [mg36448] RE: Generating Two Unit Orthogonal Vectors 


David Park replied with
----------------
Daniel Lichtblau has pointed out that NullSpace does not generally give
orthogonal vectors. Therefore the routines that depended upon that were
in
error. He says that it does give orthogonal vectors when the input
vector
contains approximate numbers. For graphical purposes this will be good
enough for me. Therefore I modify Ted's routine to

OrthogonalUnitVectors[vect__?(VectorQ[#, NumericQ] &)] /;
        (SameQ @@ Length /@ {vect}) && (Length[First[{vect}]] > 1) :=
    #/Sqrt[#.#] & /@ NullSpace[{vect}// N]

----------------

Lets see what NullSpace does with approximate complex vectors.

In[1]:=
   v1 = {1.0 I, 0.0, 0.5 I, 0.0, 1.0};
   v2 = {0.0, 2.0, 1.0 I, 2.0, 0.5};
   {v3,v4,v5} = NullSpace[{v1,v2}]

Out[3]=
   {{-0.730153 + 0.*I, 0. - 0.138254*I, 0.250585 + 0.*I, 0. -
0.138254*I, 0.
+ 0.60486*I}, 
     {0. + 0.*I, -0.515861 + 0.*I, 0. + 0.457321*I, 0.687357 + 0.*I,
0.22866
+ 0.*I}, 
     {0. + 0.*I, 0.510406 + 0.*I, 0. + 0.740442*I, -0.23274 + 0.*I,
0.370221
+ 0.*I}}

--------
In the next line we see NullSpace returned vectors that are orthogonal
to
the vectors we gave NullSpace.

In[4]:=
   {v1.v3, v1.v4, v1.v5, v2.v3, v2.v4, v2.v5}//Chop

Out[4]=
   {0, 0, 0, 0, 0, 0}

----------
However, the vectors returned aren't orthogonal to each other.

In[5]:=
   {v3.v4, v3.v5, v4.v5}//Chop

Out[5]=
   {0.229195*I, 0.371087*I, -0.677239}

---------
I suppose an OrthogonalUnitVectors function that uses NullSpace should 
  (1)  Only accept real valued vectors.  
  (2) Ensure NullSpace is given approximate vectors.

------
Regards,
   Ted Ersek





  • Prev by Date: Arbitrary Crash with Compile
  • Next by Date: Re: Mathematica 4.2: Problem with online help.
  • Previous by thread: RE: Generating Two Unit Orthogonal Vectors
  • Next by thread: Re: RE: RE: Generating Two Unit Orthogonal Vectors