home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / maths / rlab / controls / CTB / givens < prev    next >
Text File  |  1995-11-15  |  583b  |  34 lines

  1. //-----------------------------------------------------------
  2. //
  3. //  Givens rotation matrix (pp. 202 Golub and Van Loan)
  4. //
  5. //-----------------------------------------------------------
  6.  
  7. givens = function ( a , b )
  8. {
  9.   local (b, c, s, tau);
  10.  
  11.   if (a.n != 1 || b.n != 1) 
  12.   { 
  13.     error ("givens: A and B must be scalar");
  14.   }
  15.  
  16.   if (b == 0)
  17.   {
  18.     c = 1;
  19.     s = 0;
  20.   else
  21.     if (abs (b) > abs (a))
  22.     {
  23.       tau = -a/b;
  24.       s = 1/sqrt (1 + tau^2);
  25.       c = s*tau;
  26.     else
  27.       tau = -b/a;
  28.       c = 1/sqrt (1 + tau^2);
  29.       s = c*tau;
  30.     }
  31.   }
  32.   return [c, s; -s, c];
  33. };
  34.