Ger rotation

I numerisk linjär algebra är en Givens-rotation en rotation i planet som spänns av två koordinataxlar. Givens rotationer är uppkallade efter Wallace Givens , som introducerade dem för numeriska analytiker på 1950-talet medan han arbetade på Argonne National Laboratory .

Matrisrepresentation

En Givens rotation representeras av en matris av formen

där c = cos θ och s = sin θ visas vid skärningspunkterna i: te och j :te raderna och kolumnerna. Det vill säga, för fix i > j , ges icke-noll-elementen i Givens matris av:

Produkten G ( i , j , θ ) x representerar en moturs rotation av vektorn x i ( i , j ) planet för θ radianer, därav namnet Givens rotation.

Den huvudsakliga användningen av Givens rotationer i numerisk linjär algebra är att introducera nollor [ förtydligande behövs ] i vektorer eller matriser. Denna effekt kan till exempel användas för att beräkna QR-sönderdelningen av en matris. En fördel gentemot hushållartransformationer är att de lätt kan parallelliseras, och en annan är att de ofta för mycket glesa matriser har ett lägre antal operationer.

Stabil beräkning

När en Givens rotationsmatris, G ( i , j , θ ) , multiplicerar en annan matris, A , från vänster, GA , påverkas endast raderna i och j i A. Därför begränsar vi uppmärksamheten till följande motursproblem. Givet a och b , hitta c = cos θ och s = sin θ så att

där är längden på vektorn . Explicit beräkning av θ är sällan nödvändig eller önskvärd. Istället söker vi direkt c och s . En självklar lösning vore

kan beräkningen för r flöda över eller underskrida. En alternativ formulering som undviker detta problem ( Golub & Van Loan 1996 , §5.1.8) implementeras som hypotfunktionen i många programmeringsspråk.

Följande Fortran-kod är en minimalistisk implementering av Givens rotation för reella tal. Om ingångsvärdena 'a' eller 'b' ofta är noll, kan koden optimeras för att hantera dessa fall som presenteras här .

    

    
 

  
       
        
        
         
         

      
      
      



 subrutin  givens_rotation  (  a  ,  b  ,  c  ,  s  ,  r  )  real  a  ,  b  ,  c  ,  s  ,  r  real  h  ,  d  if  (  b  .  ne  .  0.0  )  then  h  =  hypot  (  a  ,  b  )  d  =  1.0  /  h  c  =  abs  (  a  )  *  d  s  =  tecken  (  d  ,  a  )  *  b  r  =  tecken  (  1,0  ,  a  )  *  h  annars  c  =  1,0  s  =  0,0  r  =  a  end if  return  end 


Dessutom, som Edward Anderson upptäckte när han förbättrade LAPACK , är kontinuitet ett tidigare förbisett numeriskt övervägande. För att uppnå detta kräver vi att r är positiv. Följande MATLAB / GNU Octave -kod illustrerar algoritmen.

 
       0
          
           0
               
        
          0
          
       0
          0
          
          
       
            
                
            
            
            
    
            
                
            
            
            
    
 funktion  [c, s, r] = given_rotation  (  a, b  )  om  b  ==  ;  c  =  tecken  (  a  );  om  (  c  ==  );  c  =  1,0  ;  % Till skillnad från andra språk returnerar MatLabs teckenfunktion 0 vid inmatning 0.  end  ;  s  =  ;  r  =  abs  (  a  );  elseif  a  ==  ;  c  =  ;  s  =  tecken  (  b  );  r  =  abs  (  b  );  elseif  abs  (  a  )  >  abs  (  b  );  t  =  b  /  a  ;  u  =  tecken  (  a  )  *  sqrt  (  1  +  t  *  t  );  c  =  1  /  u  ;  s  =  -  c  *  t  ;  r  =  a  *  u  ;  annars  t  =  a  /  b  ;  u  =  tecken  (  b  )  *  sqrt  (  1  +  t  *  t  );  s  =  -1  /  u  ;  _  c  =  t  /  u  ;  r  =  b  *  u  ;  slutet  slut 

IEEE 754 copysign(x,y) -funktionen ger ett säkert och billigt sätt att kopiera tecknet för y till x . Om det inte är tillgängligt, | x |⋅sgn( y ) , med funktionerna abs och sgn , är ett alternativ som gjorts ovan.

Triangularisering

Givet följande 3 × 3 matris:

utför två iterationer av Givens-rotationen (observera att Givens-rotationsalgoritmen som används här skiljer sig något från ovan) för att ge en övre triangulär matris för att beräkna QR-sönderdelningen .

För att bilda den önskade matrisen måste vi nollställa element (2, 1) och (3, 2) . Vi väljer först element (2, 1) till noll. Använda en rotationsmatris av:

Vi har följande matrismultiplikation:

var

Att plugga in dessa värden för c och s och utföra matrismultiplikationen ovan ger A 2 :

Vi vill nu nollställa element (3, 2) för att avsluta processen. Med samma idé som tidigare har vi en rotationsmatris av:

Vi presenteras med följande matrismultiplikation:

var

Att plugga in dessa värden för c och s och utföra multiplikationerna ger oss A 3 :

Denna nya matris A3 QR är den övre triangulära matrisen som behövs för att utföra en iteration av -sönderdelningen . Q bildas nu med hjälp av transponeringen av rotationsmatriserna på följande sätt:

Att utföra denna matrismultiplikation ger:

Detta slutför två iterationer av Givens Rotation och beräkning av QR-nedbrytningen kan nu göras.

I Clifford algebras

I Clifford representeras algebror och dess underordnade strukturer som geometriska algebrarotationer av bivectors . Givna rotationer representeras av den yttre produkten av basvektorerna. Givet valfritt par av basvektorer Givna rotationer är bivectors:

Deras åtgärd på vilken vektor som helst skrivs:

var

Dimension 3

Det finns tre Givens-rotationer i dimension 3:

Med tanke på att de är endomorfismer kan de komponeras med varandra så många gånger som önskas, med tanke på att g f f g .

Dessa tre sammansatta Givens-rotationer kan generera vilken rotationsmatris som helst enligt Davenports chained rotation theorem . Detta innebär att de kan förvandla utrymmets standardbas till vilken annan ram som helst i utrymmet . [ förtydligande behövs ]

När rotationer utförs i rätt ordning kommer värdena på den slutliga ramens rotationsvinklar att vara lika med Euler-vinklarna för den slutliga ramen i motsvarande konvention. Till exempel, en operator transforms the basis of the space into a frame with angles roll, pitch and yaw in the Tait–Bryan convention z-x-y (convention in which the line of nodes is perpendicular to z and Y axes, also named Y-X′-Z″).

Av samma anledning kan vilken rotationsmatris som helst i 3D brytas upp i en produkt av tre av dessa rotationsoperatorer .

Betydelsen av sammansättningen av två Givens-rotationer g f är en operator som transformerar vektorer först med f och sedan med g , vilket är f- och g -rotationer kring en basaxel i rummet. Detta liknar den yttre rotationsekvivalensen för Euler-vinklar.

Tabell över sammansatta rotationer

Följande tabell visar de tre Givens-rotationerna ekvivalenta med de olika Euler-vinklarkonventionerna med hjälp av yttre sammansättning (sammansättning av rotationer kring basaxlarna) av aktiva rotationer och den högerhänta regeln för vinklarnas positiva tecken.

Notationen har förenklats på så sätt att c 1 betyder cos θ 1 och s 2 betyder sin θ 2 ) . Vinklarnas underindex är den ordning i vilken de appliceras med hjälp av yttre sammansättning (1 för inre rotation, 2 för nutation, 3 för precession)

Eftersom rotationer tillämpas precis i motsatt ordning av Euler-vinklartabellen för rotationer , är denna tabell densamma men byter index 1 och 3 i vinklarna som är associerade med motsvarande post. En post som zxy betyder att först tillämpa y -rotationen, sedan x , och slutligen z , i basaxlarna.

Alla kompositionerna antar högerhandskonventionen för de matriser som multipliceras, vilket ger följande resultat.

xzx xzy
xyx xyz
yxy yxz
yzy yzx
zyz zyx
zxz zxy

Se även

Anteckningar

Citat