Axiom

Axiom
Sorts datoralgebrasystem
Utvecklaren oberoende grupp människor
Skrivet i Läspa
Operativ system plattformsoberoende programvara
senaste versionen
Licens modifierad BSD-licens
Hemsida axiom-developer.org
 Mediafiler på Wikimedia Commons

Axiom  är ett gratis allmänt datoralgebrasystem . Den består av en tolkmiljö, en kompilator och ett bibliotek som beskriver en starkt skriven, matematiskt korrekt typhierarki.

Historik

Systemutveckling startade 1971 av en grupp IBM- forskare ledda av Richard Jencks [2] [3] . Systemet hette ursprungligen Scratchpad . Projektet utvecklades långsamt och sågs främst som en forskningsplattform för att utveckla nya idéer inom beräkningsmatematik.

På 1990-talet såldes systemet till Numerical Algorithms Group (NAG), som heter Axiom, och blev en kommersiell produkt. Men av flera skäl var systemet inte kommersiellt framgångsrikt och drogs tillbaka från marknaden i oktober 2001.

NAG beslutade att göra Axiom fri programvara och öppen källkod under en modifierad BSD-licens .

År 2007 hade Axiom två gafflar med öppen källkod : OpenAxiom och FriCAS .

Systemutvecklingen fortsätter, nya versioner släpps varannan månad [4] .

Filosofi för projektet

Knuths litterära programmeringsteknik används i hela källkoden. Axiom-projektet planerar att använda beprövad teknik (som Coq och ACL2 ) för att bevisa riktigheten av algoritmer.

Funktioner

I Axiom har alla objekt en typ. Exempel på typer är matematiska strukturer (som ringar , fält , polynom ) samt datastrukturer från beräkningar (som listor , träd , hashtabeller ).

En funktion kan ta en typ som ett argument, och dess returvärde kan också vara en typ. Till exempel Fraction är en funktion som tar emot IntegralDomainsom ett argument och returnerar relationsfältet för dess argument. Som ett annat exempel kan en matrisring med ett reellt tal konstrueras som . Om du arbetar i den här domänen tolkas den naturligtvis som identitetsmatrisen och låter dig få den omvända matrisen om den finns. SquareMatrix(4, Fraction Integer)1A^-1A

Vissa operationer kan ha samma namn, i vilket fall argument- och resultattyperna används för att avgöra vilken operation som tillämpas, liknande OOP .

Tilläggsspråket Axiom kallas SPAD. Hela den matematiska basen för Axiom är skriven på detta språk. Tolken tar nästan samma språk.

SPAD utvecklades vidare under namnet A# och senare Aldor . Det senare kan dessutom användas som ett alternativt tilläggsspråk. Observera dock att den distribueras under en annan licens.

Exempel

3j tecken

Beräkna 3j -symboler och Clebsch-Gordan-koefficienter .

j3Summa ( j1 , j2 , j3 , m1 , m2 , m3 ) = = maxz : = reducera ( min , [ j1+j2-j3 , j1-m1 , j2+m2 ] ) minz : = max(0 , max ( -( j3-j2+m1) , -( j3-j1-m2) )) minz > maxz = > 0 maxz < 0 = > 0 summa ( ( -1 ) ^( z+j1-j2-m3) / _ ( factorial(z) * factorial(j1+j2-j3-z) * factorial(j1-m1-z) * _ faktoriell(j2+m2-z) * faktoriell(j3-j2+m1+z) * faktoriell(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 inte heltal? ( j1+j2+j3 ) = > 0 sqrt ( _ faktoriell(j1+j2-j3) * faktoriell(j1-j2+j3) * faktoriell( - j1+j2+j3) / _ faktoriell(j1+j2+j3+1) * _ faktoriell(j1+m1) * faktoriell(j1-m1) * _ factorial(j2+m2) * factorial(j2-m2) * _ factorial(j3+m3) * factorial(j3-m3) ) * j3Summa ( 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 )

Allmän relativitetsteori

"Axiom" härleder Christoffel-symbolerna och Riemann- och Ricci -tensorerna i Schwarzschild-lösningen .

x : = vektor [ ' t , ' r , '% theta , '% phi ]; dim : = #x; % nu : = operator '% nu ; % lambda : = operator '% lambda ; lg : = matris [ [ 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 : = invers lg ; grSetup( metric , names ) == gratis x gratis dim gratis lg gratis ug x : = namn dim : = #x lg : = metrisk ug : = omvänd lg summa(lista ) == reducera (+ , lista ) Christoffel ( k , l , i ) = = ( 1 /2) * summa [ ug(i , m) *( D(lg(k , m) , x(l) ) + D(lg(m , l) , x(k) ) - D(lg(k , l) , x(m) )) för m i 1. . mörk ] Riemann ( k , l , m , i ) = = D(Christoffel(k , m , i) , x(l) ) - D(Christoffel(k , l , i) , x(m) ) + summa [ Christoffel(n , l , i) * Christoffel(k , m , n ) - Christoffel(n , m , i) * Christoffel(k , l , n ) för n i 1. . mörk ] Ricci ( i , k ) = = summa [ Riemann(i , l , k , l) för l i 1. . mörk ] scalarCurvature () == summa [ summa [ ug(i , k) * Ricci(i , k) för jag i 1. . dim ] för k i 1. . mörk ] 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 ) = = summa [ lg(i , n ) * Riemann(k , l , m , n ) för n i 1. . mörk ] visaChristoffel () == för k i 1. . svag upprepning för l i 1. . k -upprepa för jag i 1. . svag upprepning om Christoffel(k , l , i) ~= 0 k > l = > utdatainfix ( '= , [ script( '% Gamma ,[[ k-1 , l-1 ],[ i-1 ]] ) , _ script( '% Gamma ,[[ l-1 , k-1 ],[ i-1 ]] ) , _ Christoffel(k , l , i) :: UTFORMNING ] ) k = l => utdatainfix ( '= , _ [ script( '% Gamma ,[[ k-1 , l-1 ],[ i-1 ]] ) , _ Christoffel(k , l , i) :: UTFORMNING ] ) showRicci () == för jag i 1. . svag upprepning för k i 1. . jag upprepar om Ricci(i , k) ~= 0 i = k => utdatainfix ( '= , [ 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) :: UTFORMNING ] ) showRiemann () == för k i 1. . svag upprepning för l i 1. . svag upprepning för m i 1. . svag upprepning för jag i 1. . svag upprepning om 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 ) -> visaChristoffel( ) Sammanställning av funktionssumma med typen Lista Uttryck Heltal - > Uttryck Heltal Sammanställningsfunktion Christoffel med typ ( PositiveInteger , PositiveInteger , PositiveInteger) -> Expression Heltal Kompileringsfunktion showChristoffel med typ () -> Void % nu(r ) , % e % nu ( r) ett % gamma = --------------- 0 , 0 % lambda(r) 2 %e , % nu ( r) 0 0 % Gamma = % Gamma = ------ - 1 0 0 1 2 _ _ , % lambda ( r) ett % 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 Typ : Ogiltig ( 22 ) -> Ricci(3 , 3 ) Kompileringsfunktion Riemann med typ ( PositiveInteger , _ PositiveInteger , PositiveInteger , PositiveInteger) -> Uttryck Heltal Kompileringsfunktion Ricci med typ ( PositiveInteger , PositiveInteger ) -> Uttryck heltal , , % lambda(r) - r%nu ( r) + r%lambda ( r) + 2 %e - 2 ( 22 ) -------------------------------------------- - % lambda(r) 2 %e Typ : Expression Integer

Galleri

Dokumentation

Axiom är ett litterärt program . Källkoden är tillgänglig i en uppsättning volymer på axiom-developer.org . Dessa volymer innehåller den uppdaterade källkoden för systemet.

Följande dokument finns för närvarande tillgängliga:

Video

Ett viktigt mål med Axiom-projektet är att tillhandahålla dokumentation. I november 2008 tillkännagav projektet den första av en serie instruktionsvideor, som också finns tillgängliga på axiom-developer.org . Den första videon talar om informationskällor om Axiom. [5]

Anteckningar

  1. http://www.axiom-developer.org/axiom-website/releasenotes.html
  2. Richard Dimick Jenks . Hämtad 26 april 2009. Arkiverad från originalet 17 juli 2011.
  3. Axiom Hemsida Arkiverad 18 augusti 2004 på Wayback Machine .
  4. Plåster arkiverade 23 maj 2009 på Wayback Machine .
  5. "Axiom Computer Algebra System Information Sources" Arkiverad 29 mars 2016 på Wayback Machine , jgg899, YouTube , 30 november 2008.

Länkar