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.
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] .
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.
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.
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 )"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 så 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 så 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 heltalAxiom interface i Mozilla Firefox browser
Axiom forenkler varmeligningen
Arbejde med matricer i Axiom
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:
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]
Matematik software | |
---|---|
Symbolske beregninger | |
Numeriske beregninger |
Computer algebra systemer | |
---|---|
Proprietære |
|
Ledig | |
Gratis/shareware |
|
Ikke understøttet |
|