Aksiom

Aksiom
Type computer algebra system
Udvikler selvstændig gruppe mennesker
Skrevet i Lisp
Operativ system software på tværs af platforme
nyeste version
Licens ændret BSD-licens
Internet side axiom-developer.org
 Mediefiler på Wikimedia Commons

Axiom  er et gratis algebra-computersystem til almen brug . Det består af et fortolkermiljø, en compiler og et bibliotek, der beskriver et stærkt indtastet, matematisk korrekt typehierarki.

Historie

Systemudvikling startede i 1971 af en gruppe IBM -forskere ledet af Richard Jencks [2] [3] . Systemet hed oprindeligt Scratchpad . Projektet udviklede sig langsomt og blev hovedsageligt set som en forskningsplatform til udvikling af nye ideer inden for beregningsmatematik.

I 1990'erne blev systemet solgt til Numerical Algorithms Group (NAG), ved navn Axiom, og blev et kommercielt produkt. Men af ​​en række årsager var systemet ikke kommercielt vellykket og blev trukket tilbage fra markedet i oktober 2001.

NAG besluttede at gøre Axiom til fri software og open source det under en modificeret BSD-licens .

I 2007 havde Axiom to open source- gafler : OpenAxiom og FriCAS .

Systemudviklingen fortsætter, nye versioner udgives hver anden måned [4] .

Filosofi for projektet

Knuths litterære programmeringsteknik bruges i hele kildekoden. Axiom-projektet planlægger at bruge gennemprøvede teknologier (såsom Coq og ACL2 ) til at bevise rigtigheden af ​​algoritmer.

Funktioner

I Axiom har alle objekter en type. Eksempler på typer er matematiske strukturer (såsom ringe , felter , polynomier ) samt datastrukturer fra databehandling (såsom lister , træer , hashtabeller ).

En funktion kan tage en type som et argument, og dens returværdi kan også være en type. For eksempel Fraction er en funktion, der modtager IntegralDomainsom et argument og returnerer forholdsfeltet for sit argument. Som et andet eksempel kan en reelt tal matrixring konstrueres som . Hvis du arbejder i dette domæne, tolkes det selvfølgelig som identitetsmatrixen og giver dig mulighed for at få den omvendte matrix, hvis den findes. SquareMatrix(4, Fraction Integer)1A^-1A

Nogle operationer kan have det samme navn, i hvilket tilfælde argument- og resultattyperne bruges til at bestemme, hvilken operation der anvendes, svarende til OOP .

Axiom-udvidelsessproget kaldes SPAD. Hele den matematiske basis af Axiom er skrevet på dette sprog. Tolken tager næsten samme sprog.

SPAD blev videreudviklet under navnet A# og senere Aldor . Sidstnævnte kan desuden bruges som et alternativt udvidelsessprog. Bemærk dog, at den distribueres under en anden licens.

Eksempler

3j tegn

Beregning af 3j-symboler og Clebsch-Gordan-koefficienter .

j3Sum ( j1 , j2 , j3 , m1 , m2 , m3 ) = = maxz : = reducere ( min , [ j1+j2-j3 , j1-m1 , j2+m2 ] ) minz : = max(0 , max ( -( j3-j2+m1) , -( j3-j1-m2) )) minz > maxz = > 0 maxz < 0 = > 0 sum ( ( -1 ) ^( z+j1-j2-m3) / _ ( factorial(z) * factorial(j1+j2-j3-z) * factorial(j1-m1-z) * _ faktoriel(j2+m2-z) * faktoriel(j3-j2+m1+z) * faktoriel(j3-j1-m2+z) ) , _ z = minz . . maxz) j3 ( j1 , j2 , j3 , m1 , m2 , m3 ) == m1 + m2 + m3 ~= 0 = > 0 abs(j1 - j2) > j3 = > 0 j1 + j2 < j3 = > 0 abs(m1) > j1 = > 0 abs(m2) > j2 = > 0 abs(m3) > j3 = > 0 ikke heltal? ( j1+j2+j3 ) = > 0 sqrt ( _ faktoriel(j1+j2-j3) * faktoriel(j1-j2+j3) * faktoriel( - j1+j2+j3) / _ faktoriel(j1+j2+j3+1) * _ factorial(j1+m1) * factorial(j1-m1) * _ factorial(j2+m2) * factorial(j2-m2) * _ faktoriel(j3+m3) * faktoriel(j3-m3) ) * j3Sum ( j1 , j2 , j3 , m1 , m2 , m3) clebschGordan ( j1 , j2 , j , m1 , m2 , m ) = = ( -1 ) ^( j1-j2+m) * sqrt(2*j+1) * j3(j1 , j2 , j , m1 , m2 , -m )

Generel relativitetsteori

"Axiom" udleder Christoffel-symbolerne og Riemann- og Ricci - tensorerne i Schwarzschild-løsningen .

x : = vektor [ ' t , ' r , '% theta , '% phi ]; dæmpet : = #x; % nu : = operator '% nu ; % lambda : = operator '% lambda ; lg : = matrix [ [ exp( % nu r) , 0 , 0 , 0 ], _ [ 0 , - exp( % lambda r ) , 0 , 0 ], _ [ 0 , 0 , - r^2 , 0 ], _ [ 0 , 0 , 0 , - r^2*sin( % theta) ^ 2 ] _ ]; ug : = omvendt lg ; grSetup( metric , names ) == gratis x gratis dim gratis lg gratis ug x : = navne dæmpet : = #x lg : = metrisk ug : = omvendt lg sum(liste ) == reducere (+ , liste ) Christoffel ( k , l , i ) = = ( 1 /2) * sum [ ug(i , m) *( D(lg(k , m) , x(l) ) + D(lg(m , l) , x(k) ) - D(lg(k , l) , x(m) )) for m i 1. . dæmpet ] Riemann ( k , l , m , i ) = = D(Christoffel(k , m , i) , x(l) ) - D(Christoffel(k , l , i) , x(m) ) + sum [ Christoffel(n , l , i) * Christoffel(k , m , n ) - Christoffel(n , m , i) * Christoffel(k , l , n ) for n i 1. . dæmpet ] Ricci ( i , k ) = = sum [ Riemann(i , l , k , l) for l i 1. . dæmpet ] scalarCurvature () == sum [ sum [ ug(i , k) * Ricci(i , k) for jeg i 1. . dim ] for k i 1. . dæmpet ] lRiemann ( i , i , l , m ) == 0 _ lRiemann ( i , k , l , l ) == 0 _ lRiemann ( i , k , l , m | i > k ) == - lRiemann ( k , i , l , m) lRiemann ( i , k , l , m | l > m ) == - lRiemann ( i , k , m , l) lRiemann ( i , k , l , m ) = = sum [ lg(i , n ) * Riemann(k , l , m , n ) for n i 1. . dæmpet ] visChristoffel () == for k i 1. . svag gentagelse for l i 1. . k -gentag for jeg i 1. . svag gentagelse hvis Christoffel(k , l , i) ~= 0 da k > l = > output infix ('= , [ script( '% Gamma ,[[ k-1 , l-1 ],[ i-1 ]] ) , _ script( '% Gamma ,[[ l-1 , k-1 ],[ i-1 ]] ) , _ Christoffel(k , l , i) :: OUTFORM ] ) k = l => output infix ('= , _ [ script( '% Gamma ,[[ k-1 , l-1 ],[ i-1 ]] ) , _ Christoffel(k , l , i) :: OUTFORM ] ) visRicci () == for jeg i 1. . svag gentagelse for k i 1. . jeg gentager hvis Ricci(i , k) ~= 0 i = k => output infix ('= , [ subscript( ' R ,[ i-1 , k-1 ] ) , Ricci(i , k) :: OUTFORM ] ) i > k = > output infix ('= , [ subscript( ' R ,[ i-1 , k-1 ] ) , _ subscript( ' R ,[ k-1 , i-1 ] ) , _ Ricci(i , k) :: OUTFORM ] ) showRiemann () == for k i 1. . svag gentagelse for l i 1. . svag gentagelse for m i 1. . svag gentagelse for jeg i 1. . svag gentagelse hvis Riemann(k , l , m , i) ~= 0 output infix ('= , _ [ script( ' R , [[ k-1 , l-1 , m-1 ], [ i-1 ]] ) , Riemann(k , l , m , i) :: OUTFORM ] ) ( 21 ) -> visChristoffel( ) Kompileringsfunktionssum med type Liste Udtryk Heltal - > Udtryk Heltal Kompileringsfunktion Christoffel med type ( PositiveHeltal , _ _ PositiveInteger , PositiveInteger) -> Udtryk Heltal Kompileringsfunktion visChristoffel med type () -> Void % nu(r ) , % e % nu ( r) en % Gamma = --------------- 0 , 0 % lambda(r) 2 %e , % nu ( r) 0 0 % Gamma = % Gamma = ------ - 1 0 0 1 2 _ _ , % lambda ( r) en % Gamma = ------------ 1 , 1 2 2 2 1 % Gamma = % Gamma = - 2 , 1 1 , 2 r 1r _ % Gamma = - ------------ 2 , 2 % lambda(r) % e 3 3 1 % Gamma = % Gamma = - 3 , 1 1 , 3 r 3 3 cos( % theta) % Gamma = % Gamma = ---------- - 3 , 2 2 , 3 sin( % theta) 2 1 r sin( % theta) % Gamma = - -------------- 3 , 3 % lambda(r) % e 2 % Gamma = - cos ( % theta)sin( % theta) 3 , 3 Type : Ugyldig ( 22 ) -> Ricci(3 , 3 ) Kompileringsfunktion Riemann med type ( PositiveInteger , _ PositiveInteger , PositiveInteger , PositiveInteger) -> Udtryk Heltal Kompileringsfunktion Ricci med type ( PositiveInteger , PositiveInteger ) -> Udtryks heltal , , % lambda(r) - r%nu ( r) + r%lambda ( r) + 2 %e - 2 ( 22 ) -------------------------------------------- - % lambda(r) 2 %e Type : Udtryks heltal

Galleri

Dokumentation

Axiom er et litterært program . Kildekoden er tilgængelig i et sæt bind på axiom-developer.org . Disse bind indeholder den opdaterede kildekode til systemet.

Følgende dokumenter er i øjeblikket tilgængelige:

Video

Et vigtigt mål med Axiom-projektet er at levere dokumentation. I november 2008 annoncerede projektet den første af en række tutorialvideoer, som også er tilgængelige på axiom-developer.org . Den første video fortæller om kilder til information om Axiom. [5]

Noter

  1. http://www.axiom-developer.org/axiom-website/releasenotes.html
  2. Richard Dimick Jenks . Hentet 26. april 2009. Arkiveret fra originalen 17. juli 2011.
  3. Axiom Hjemmeside Arkiveret 18. august 2004 på Wayback Machine .
  4. Patches arkiveret 23. maj 2009 på Wayback Machine .
  5. "Axiom Computer Algebra System Information Sources" Arkiveret 29. marts 2016 på Wayback Machine , jgg899, YouTube , 30. november 2008.

Links