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.
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] .
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.
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.
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 )"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 då 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 då 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 då 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 IntegerAxiom-gränssnitt i webbläsaren Mozilla Firefox
Axiom förenklar värmeekvationen
Arbeta med matriser i Axiom
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:
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]
Matematisk programvara | |
---|---|
Symboliska beräkningar | |
Numeriska beräkningar |
Datoralgebrasystem | |
---|---|
Proprietär |
|
Fri | |
Gratis/shareware |
|
Stöds inte |
|