Per puoi usare la rappresentazione
( a - 3 b b a ) L'
aggiunta funziona ovviamente. Per la moltiplicazione, è possibile verificare
( a 1 - 3 b 1 b 1 a 1 ) ( a 2 - 3 b 2 b 2 a 2 ) = ( a 1 a 2 - 3 b 1 b 2 - 3 ( a 1 ba + b - 3---√
( aB- 3 bun')
che conserva la rappresentazione, quindi abbiamo un omomorfismo ad anello.
( a1B1- 3 b1un'1) ( a2B2- 3 b2un'2) = ( a1un'2- 3 b1B2un'1B2+ b1un'2- 3 ( a1B2+ b1un'2)un'1un'2- 3 b1B2)
Prendere il determinante della matrice dà alla norma (quadrata) , quindi i reciproci corrispondono alle matrici inverse, come previsto.un'2+ 3 b2
Hai già preso in considerazione l'uso delle triple , con le quali suppongo che useresti numeri interi e un denominatore comune. Tale approccio può essere utile anche nella rappresentazione matriciale.
Aggiornamento : un metodo generale per le rappresentazioni di matrici utilizza la matrice di accompagnamento . Ad esempio, supponiamo di voler rappresentare invece dove
ω = exp ( 2 π ia + b ω, quindiω2+ω+1=0. La matrice compagna diωè( 0 - 1 1 - 1 ), e questo si comporta in tutte le sue operazioni ad anello associate comeωstesso. Naturalmente,1può essere rappresentato come( 1 0 0 1 ); pertanto una rappresentazione matriciale dia+bωè
( a - b b a - b )ω = exp( 2 πio3)ω2+ ω + 1 = 0ω( 01- 1- 1)ω1( 1001)a + b ω
( aB- ba - b)
Potresti voler verificare che si tratti di un omomorfismo ad anello. Inoltre, questo è facile da vedere. Per la moltiplicazione, le formule corrispondenti sono ora
( a1+ b1ω ) ( a2+ b2ω )( a1B1- b1un'1- b1) ( a2B2- b2un'2- b2)= ( a1un'2- b1B2) + ( a1B2+ b1un'2- b1B2) ω= ( a1un'2- b1B2un'1B2+ b1un'2- b1B2- ( a1B2+ b1un'2- b1B2)un'1un'2- a1B2- b1un'2)
numpy
operazioni a matrice accelerata con quelle dei tipi di dati definiti dall'utente. Non sono sicuro di quale sarebbe il vincitore.