atan2
Inom databehandling och matematik är funktionen atan2 2 - argumentet arctangens . Per definition är vinkelmåttet ( i radianer , med ) mellan den positiva -axeln och strålen från origo till punkten i det kartesiska planet . På motsvarande sätt är argumentet (även kallat fas eller vinkel ) för det komplexa talet
Funktionen dök upp först i programmeringsspråket Fortran 1961. Den var ursprungligen avsedd att returnera ett korrekt och entydigt värde för vinkeln θ vid konvertering från kartesiska koordinater ( x , y ) till polära koordinater ( r , θ ) . Om och , då och
Om x > 0 är det önskade vinkelmåttet när x < 0 är vinkeln är diametralt motsatt den önskade vinkeln, och ± π (ett halvt varv ) måste läggas till för att placera punkten i rätt kvadrant . Genom att använda försvinner denna korrigering, vilket förenklar kod och matematiska formler.
Motivering
Den vanliga arktangensfunktionen med ett argument returnerar endast vinkelmått i intervallet och när man anropar den för att hitta vinkelmåttet mellan x -axeln och en godtycklig vektor i det kartesiska planet, finns det inget enkelt sätt att ange en riktning i vänster halvplan (det vill säga en punkt med ). Diametralt motsatta vinkelmått har samma tangent eftersom så tangenten är i sig inte tillräckligt för att unikt specificera en vinkel.
För att bestämma ett vinkelmått med hjälp av arctangensfunktionen givet en punkt eller vektor matematiska formler eller datorkod hantera flera fall; minst en för positiva värden på och en för negativa värden på och ibland ytterligare fall då är negativ eller en koordinat är noll. Att hitta vinkelmått och omvandla kartesiska till polära koordinater är vanligt inom vetenskaplig beräkning, och denna kod är redundant och felbenägen.
För att råda bot på detta introducerade datorprogrammeringsspråken atan2 -funktionen, åtminstone så tidigt som Fortran IV-språket på 1960-talet. Kvantiteten atan2( y , x ) är vinkelmåttet mellan x -axeln och en stråle från origo till en punkt ( x , y ) var som helst i det kartesiska planet. Tecken på x och y används för att bestämma kvadranten av resultatet och välja rätt gren av flervärdsfunktionen Arctan y / x ) ( .
Funktionen atan2 är användbar i många applikationer som involverar euklidiska vektorer som att hitta riktningen från en punkt till en annan eller konvertera en rotationsmatris till Euler-vinklar .
Atan2 - funktionen ingår nu i många andra programmeringsspråk och är också vanligt förekommande i matematiska formler inom vetenskap och teknik.
Argumentordning
1961 introducerade Fortran funktionen atan2 med argumentordning så att argumentet (fasvinkeln) för ett komplext tal är en bråkdel skriven så att för positiva värden på Detta är dock motsatsen till den konventionella komponentordningen för komplexa tal, eller som koordinater Se avsnittet Definition och beräkning .
Vissa andra programmeringsspråk (se § Realiseringar av funktionen i vanliga datorspråk ) valde istället motsatt ordning. Till exempel använder Microsoft Excel OpenOffice Calc använder och Mathematica använder som standard till en-argument arctangens om anropas med ett argument.
Definition och beräkning
Funktionen atan2 beräknar huvudvärdet för argumentfunktionen som tillämpas på det komplexa talet x + i y . Det vill säga atan2( y , x ) = Pr arg( x + i y ) = Arg( x + i y ) . Argumentet skulle kunna ändras med en godtycklig multipel av 2π (motsvarande ett helt varv runt origo) utan att göra någon skillnad på vinkeln, men för att definiera atan2 unikt använder man huvudvärdet i ( , det vill säga − π < atan2( y , x ) ≤ π .
När det gäller standardarctanfunktionen , vars intervall är (−π/2, π/2] , kan det uttryckas på följande sätt för att definiera en yta som inte har några diskontinuiteter förutom längs den halvoändliga linjen x<0 y=0:
Ett kompakt uttryck med fyra överlappande halvplan är
Iverson -parentesnotationen möjliggör ett ännu mer kompakt uttryck:
Formel utan uppenbar villkorlig konstruktion :
Följande uttryck härlett från tangenthalvvinkelformeln kan också användas för att definiera atan2 :
En variant av den senaste formeln som undviker dessa uppblåsta avrundningsfel:
Anmärkningar:
- Detta ger resultat i området (−π, π] .
-
Som nämnts ovan kan huvudvärdet för argumentet atan2( y , x ) relateras till arctan( y / x ) genom trigonometri. Härledningen går till så här: Om ( x , y ) = ( r cos θ , r sin θ ) , då tan( θ /2) = y / ( r + x ) . Det följer att
Derivat
Eftersom funktionen atan2 är en funktion av två variabler har den två partiella derivator . Vid punkter där dessa derivator finns atan2 , förutom en konstant, lika med arctan( y / x ) . Därför för x > 0 eller y ≠ 0 ,
Gradienten för atan2 ges alltså av
Att informellt representera funktionen atan2 som vinkelfunktionen θ ( x , y ) = atan2( y , x ) (som bara definieras upp till en konstant) ger följande formel för den totala differentialen :
Medan funktionen atan2 är diskontinuerlig längs den negativa x -axeln, vilket återspeglar det faktum att vinkeln inte kan definieras kontinuerligt, är denna derivata kontinuerligt definierad förutom vid origo, vilket återspeglar det faktum att oändliga (och faktiskt lokala) vinkelförändringar kan definieras överallt förutom ursprunget. Att integrera denna derivata längs en bana ger den totala förändringen i vinkel över banan, och integrering över en sluten slinga ger lindningsnumret .
differentialgeometrins språk är denna derivata en enform , och den är sluten (dess derivata är noll) men inte exakt (den är inte derivatan av en 0-form, dvs. en funktion), och faktiskt genererar den första de Rham-kohomologin för det punkterade planet . Detta är det mest grundläggande exemplet på en sådan form, och det är grundläggande i differentialgeometri.
De partiella derivatorna av atan2 innehåller inte trigonometriska funktioner, vilket gör det särskilt användbart i många applikationer (t.ex. inbäddade system) där trigonometriska funktioner kan vara dyra att utvärdera.
Illustrationer
Denna figur visar värden på atan2 längs utvalda strålar från ursprunget, märkta vid enhetscirkeln. Värdena, i radianer, visas inuti cirkeln. Diagrammet använder den matematiska standardkonventionen att vinklar ökar moturs från noll längs strålen till höger. Observera att ordningen på argumenten är omvänd; funktionen atan2( y , x ) beräknar vinkeln som motsvarar punkten ( x , y ) .
Den här figuren visar värdena för tillsammans med för . Båda funktionerna är udda och periodiska med perioderna respektive och kan således enkelt kompletteras till valfri region med reella värden på . Man kan tydligt se grensnitten för -funktionen vid , och för -funktionen vid .
De två figurerna nedan visar 3D-vyer av atan2( y , x ) respektive arctan( y / x ) över ett område av planet. Observera att för atan2( y , x ) har strålar i X / Y -planet som utgår från origo konstanta värden, men för arctan( y / x ) har linjer i X / Y -planet som passerar genom origo konstanta värden. För x > 0 ger de två diagrammen identiska värden.
Vinkelsumma och skillnadsidentitet
Summor av kan komprimeras till en enda operation enligt följande identitet
...förutsatt att .
Beviset innebär att man överväger två fall, ett där eller och ett där och .
Vi tar bara hänsyn till fallet där eller . Till att börja med gör vi följande observationer:
- förutsatt att eller .
- där är den komplexa argumentfunktionen .
- närhelst , en konsekvens av Eulers formel .
- .
För att se (4) har vi identiteten där , därav . Dessutom, eftersom för varje positivt reellt värde , så om vi låter och vi .
Från dessa observationer har följande ekvivalenser:
Följd : om och är 2 -dimensionella vektorer, används skillnadsformeln ofta i praktiken för att beräkna vinkeln mellan dessa vektorer med hjälp av , eftersom den resulterande beräkningen beter sig godartat i området och kan alltså användas utan intervallkontroller i många praktiska situationer.
Öst-moturs, nord-urs och söder-urs konventioner, etc.
Funktionen designades ursprungligen för konventionen i ren matematik som kan kallas öst-motsols . I praktiska tillämpningar är dock nord- och syd-urs ofta normen. Inom atmosfärsvetenskap, till exempel, vindriktningen beräknas med hjälp av funktionen med vindvektorns öst- och nordkomponenter som argument; solens azimutvinkel kan beräknas på liknande sätt med öst- och nordkomponenterna av solvektorn som argument. Vindriktningen definieras normalt i nord-urs riktning, och solens azimutvinkel använder både nord-medurs och syd-urs konventioner i stor utsträckning. Dessa olika konventioner kan realiseras genom att byta positioner och ändra tecknen för x- och y-argumenten enligt följande:
- (öst-moturs konvention)
- (Nord-medsols konvention)
- . (Syd-medurs konvention)
Som ett exempel, låt och , då ger formatet öst-motsols , formatet nord medurs ger och formatet söder medurs ger .
Tydligen kan att ändra tecknet för x- och/eller y-argumenten och byta deras positioner skapa 8 möjliga varianter av funktionen och de motsvarar, intressant nog, 8 möjliga definitioner av vinkeln, nämligen medurs eller moturs med början från var och en av de fyra kardinalriktningarna , norr, öster, syd och väster.
Realiseringar av funktionen i vanliga datorspråk
Förverkligandet av funktionen skiljer sig från ett datorspråk till ett annat:
- I Microsoft Excel , OpenOffice.org Calc , LibreOffice Calc , Google Spreadsheets , iWork Numbers och ANSI SQL:2008 standarden har arctangensfunktionen med 2 argument de två argumenten i standardsekvensen (omvänt i förhållande till konventionen som används i diskussionen ovan).
- I Mathematica används formen
ArcTan[ x , y ] där en parameterform tillhandahåller den normala arctangensen.
Mathematica klassificerarArcTan[0, 0]
som ett obestämt uttryck. - På de flesta grafräknare för TI (exklusive TI-85 och TI-86 ) kallas motsvarande funktion R►Pθ och har argumenten .
- På TI-85 kallas arg -funktionen
angle(x,y)
och även om den verkar ta två argument, har den egentligen bara ett komplext argument som betecknas med ett par tal: x + i y = ( x , y ) .
konventionen används av:
- C-funktionen
atan2
, och de flesta andra datorimplementationer, är designade för att minska ansträngningen att transformera kartesiska till polära koordinater och definierar därför alltidatan2(0, 0)
. På implementeringar utan tecken på noll , eller när de ges positiva nollargument, definieras det normalt som 0. Det kommer alltid att returnera ett värde i intervallet [−π, π] istället för att höja ett fel eller returnera ett NaN (Inte ett tal). - I Common Lisp , där valfria argument finns, tillåter
atan
-funktionen en valfritt att ange x -koordinaten:(atan y x )
. - I Julia liknar situationen Common Lisp: istället för
atan2
har språket en enparameter och en tvåparameterform föratan
. Den har dock många fler än två metoder för att möjliggöra aggressiv optimering vid kompilering (se avsnittet "Varför kompilerar du inte Matlab/Python/R/...-kod till Julia?" ). - För system som implementerar tecken noll , oändligheter eller inte ett tal (till exempel IEEE flyttal ), är det vanligt att implementera rimliga tillägg som kan utöka intervallet av värden som produceras till att inkludera − π och −0 när y = −0. Dessa kan också returnera NaN eller ta upp ett undantag när de ges ett NaN-argument.
- I Intel x86 Architecture assembler-koden är
atan2
känd somFPATAN- instruktionen (
floating -point partial arctangent). Den kan hantera oändligheter och resultaten ligger i det slutna intervallet [−π, π] , t.ex.atan2(∞, x )
= + π /2 för finita x . Speciellt definierasFPATAN när båda argumenten är noll:
-
atan2(+0, +0)
= +0; -
atan2(+0, −0)
= + π ; -
atan2(−0, +0)
= −0; -
atan2(−0, −0)
= − π .
-
- Denna definition är relaterad till begreppet tecken noll .
- I andra matematiska skrifter än källkod, såsom i böcker och artiklar, har beteckningarna Arctan och Tan −1 använts; dessa är varianter med versaler av den vanliga arctan och tan −1 . Denna användning överensstämmer med den komplexa argumentnotationen , så att Atan( y , x ) = Arg( x + i y ) .
- På HP- kalkylatorer behandlar du koordinaterna som ett komplext tal och tar sedan
ARG
. Eller<< C->R ARG >> 'ATAN2' STO
. - På vetenskapliga miniräknare kan funktionen ofta beräknas som den vinkel som ges när ( x , y ) omvandlas från rektangulära koordinater till polära koordinater .
- System som stöder symbolisk matematik returnerar normalt ett odefinierat värde för atan2(0, 0) eller signalerar på annat sätt att ett onormalt tillstånd har uppstått.
- Det kostnadsfria matematikbiblioteket FDLIBM (Freely Distributable LIBM) tillgängligt från netlib har källkod som visar hur det implementerar
atan2
inklusive hantering av de olika IEEE-exceptionella värdena. - För system utan hårdvarumultiplikator kan funktionen atan2 implementeras på ett numeriskt tillförlitligt sätt med CORDIC -metoden. Således kommer implementeringar av atan( y ) förmodligen att välja att beräkna atan2( y , 1) .
Se även
externa länkar
- ATAN2 Online-kalkylator
- Java 1.6 SE JavaDoc
- atan2 vid Allt2
- PicBasic Pro-lösning atan2 för en PIC18F
- Andra implementeringar/kod för atan2
- "Bäring mellan två punkter" . Arkiverad från originalet den 18 november 2020 . Hämtad 21 februari 2022 .
- "Arctan och polära koordinater" . Arkiverad från originalet den 18 oktober 2018 . Hämtad 21 februari 2022 .
- "Vad är 'Arccos'?" . Arkiverad från originalet den 6 september 2017 . Hämtad 21 februari 2022 .