Axiom | |
---|---|
Tyyppi | tietokonealgebrajärjestelmä |
Kehittäjä | itsenäinen ryhmä ihmisiä |
Sisään kirjoitettu | Lisp |
Käyttöjärjestelmä | monikäyttöinen ohjelmisto |
uusin versio | |
Lisenssi | muokattu BSD-lisenssi |
Verkkosivusto | axiom-developer.org |
Mediatiedostot Wikimedia Commonsissa |
Axiom on ilmainen yleiskäyttöinen tietokonealgebrajärjestelmä . Se koostuu tulkkiympäristöstä, kääntäjästä ja kirjastosta, joka kuvaa vahvasti kirjoitettua, matemaattisesti oikeaa tyyppihierarkiaa.
Järjestelmäkehityksen aloitti vuonna 1971 Richard Jencksin johtama IBM -tutkijoiden ryhmä [2] [3] . Järjestelmän nimi oli alun perin Scratchpad . Projekti kehittyi hitaasti ja se nähtiin lähinnä tutkimusalustana uusien laskennallisen matematiikan ideoiden kehittämiselle.
1990-luvulla järjestelmä myytiin Numerical Algorithms Groupille (NAG), jonka nimi oli Axiom, ja siitä tuli kaupallinen tuote. Mutta useista syistä järjestelmä ei menestynyt kaupallisesti, ja se poistettiin markkinoilta lokakuussa 2001.
NAG päätti tehdä Axiomista ilmaisen ohjelmiston ja avoimen lähdekoodin muokatun BSD-lisenssin alaisena .
Vuonna 2007 Axiomilla oli kaksi avoimen lähdekoodin haarukkaa : OpenAxiom ja FriCAS .
Järjestelmän kehitys jatkuu, uusia versioita julkaistaan kahden kuukauden välein [4] .
Knuthin kirjallista ohjelmointitekniikkaa käytetään koko lähdekoodissa. Axiom-projekti aikoo käyttää hyväksi havaittuja teknologioita (kuten Coq ja ACL2 ) todistaakseen algoritmien oikeellisuuden.
Axiomissa kaikilla objekteilla on tyyppi. Esimerkkejä tyypeistä ovat matemaattiset rakenteet (kuten renkaat , kentät , polynomit ) sekä laskennan tietorakenteet (kuten listat , puut , hash-taulukot ).
Funktio voi ottaa tyypin argumenttina, ja sen palautusarvo voi myös olla tyyppi. Esimerkiksi Fraction on funktio, joka vastaanottaa IntegralDomainargumenttina ja palauttaa argumenttinsa suhdekentän . Toisena esimerkkinä reaalilukumatriisirengas voidaan rakentaa muodossa . Tietenkin, jos työskentelet tällä alalla, se tulkitaan identiteettimatriisiksi ja antaa sinun saada käänteisen matriisin, jos se on olemassa. SquareMatrix(4, Fraction Integer)1A^-1A
Joillakin operaatioilla voi olla sama nimi, jolloin argumentti- ja tulostyyppejä käytetään määrittämään, mitä operaatiota käytetään, kuten OOP .
Axiomin laajennuskieli on nimeltään SPAD. Axiomin koko matemaattinen perusta on kirjoitettu tällä kielellä. Tulkki käyttää melkein samaa kieltä.
SPADia kehitettiin edelleen nimellä A# ja myöhemmin nimellä Aldor . Jälkimmäistä voidaan lisäksi käyttää vaihtoehtoisena laajennuskielenä. Huomaa kuitenkin, että sitä jaetaan eri lisenssillä.
3j - symbolien ja Clebsch-Gordan-kertoimien laskeminen .
j3Sum ( j1 , j2 , j3 , m1 , m2 , m3 ) = = maxz : = vähennä ( 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) * _ factorial(j2+m2-z) * factorial(j3-j2+m1+z) * factorial(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 ei kokonaisluku? ( j1+j2+j3 ) = > 0 sqrt ( _ factorial(j1+j2-j3) * factorial(j1-j2+j3) * factorial( - j1+j2+j3) / _ tekijä(j1+j2+j3+1) * _ factorial(j1+m1) * factorial(j1-m1) * _ factorial(j2+m2) * factorial(j2-m2) * _ faktoriaali(j3+m3) * faktoriaalinen(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 )"Aksiooma" johtaa Christoffel-symbolit ja Riemannin ja Ricci - tensorit Schwarzschildin ratkaisussa .
x : = vektori [ ' t , ' r , '% theta , '% phi ]; himmeä : = #x; % nu : = operaattori '% nu ; % lambda : = operaattori '% lambda ; lg : = matriisi [ [ 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 : = käänteinen lg ; grSetup( metriikka , nimet ) == ilmainen x vapaa himmennys ilmainen lg ilmainen ug x : = nimet himmeä : = #x lg : = metrinen ug : = käänteinen lg summa(lista ) == vähentää (+ , 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) )) m in 1. . _ himmeä ] 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 ) n : lle 1 :ssä . himmeä ] Ricci ( i , k ) = = summa [ Riemann(i , l , k , l) l :lle 1 : ssä . himmeä ] skalaarikaarevuus () == summa [ summa [ ug(i , k) * Ricci(i , k) minulle 1 : ssä . dim ] k in 1. . _ himmeä ] 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 ) n : lle 1 :ssä . himmeä ] showChristoffel () == k in 1. . _ himmeä toisto minulle 1. . _ _ k - toisto minulle 1 : ssä . himmeä toisto jos Christoffel(k , l , i) ~= 0 niin k > l = > tulosta infix ('= , [ script( '% Gamma ,[[ k-1 , l-1 ],[ i-1 ]] ) , _ script( '% Gamma ,[[ l-1 , k-1 ],[ i-1 ]] ) , _ Christoffel(k , l , i) :: OUTFORM ] ) k = l => lähtöliite ( '= , _ [ script( '% Gamma ,[[ k-1 , l-1 ],[ i-1 ]] ) , _ Christoffel(k , l , i) :: OUTFORM ] ) näytäRicci () == minulle 1 : ssä . himmeä toisto k in 1. . _ toistan _ jos Ricci(i , k) ~= 0 niin i = k => tulosta infix ('= , [ alaindeksi( ' R ,[ i-1 , k-1 ] ) , Ricci(i , k) :: OUTFORM ] ) i > k = > tulosta infix ('= , [ alaindeksi( ' R ,[ i-1 , k-1 ] ) , _ alaindeksi( ' R ,[ k-1 , i-1 ] ) , _ Ricci(i , k) :: OUTFORM ] ) näytäRiemann () == k in 1. . _ himmeä toisto minulle 1. . _ _ himmeä toisto m in 1. . _ himmeä toisto minulle 1 : ssä . himmeä toisto jos Riemann(k , l , m , i) ~= 0 niin tulosta infix ('= , _ [ script( ' R , [[ k-1 , l-1 , m-1 ], [ i-1 ]] ) , Riemann(k , l , m , i) :: OUTFORM ] ) ( 21 ) -> näytä Christoffel( ) Käännösfunktion summa tyypillä Lista Lauseke Integer - > Lauseke Integer Käännösfunktio Christoffel tyypin kanssa ( PositiveInteger , _ _ PositiveInteger , PositiveInteger) -> Lauseke Kokonaisluku Käännösfunktio showChristoffel tyypillä ( ) -> Void % nu(r ) , % e % nu ( r) yksi % Gamma = --------------- 0 , 0 % lambda(r) 2 %e , % nu ( r) 0 0 % Gamma = % Gamma = ------ - 1 0 0 1 2 _ _ , % lambda ( r) yksi % 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 Tyyppi : Tyhjä ( 22 ) -> Ricci(3 , 3 ) Käännösfunktio Riemann tyypin kanssa ( PositiveInteger , _ PositiveInteger , PositiveInteger , PositiveInteger) -> Lauseke Kokonaisluku Käännösfunktio Ricci , jonka tyyppi ( PositiveInteger , PositiveInteger) -> Lauseke Kokonaisluku , , % lambda(r) - r%nu ( r) + r%lambda ( r) + 2 %e - 2 ( 22 ) --------------------------------------- _ % lambda(r) 2 %e Tyyppi : Lauseke KokonaislukuAxiom-käyttöliittymä Mozilla Firefox -selaimessa
Aksiooma yksinkertaistaa lämpöyhtälöä
Työskentely matriisien kanssa Axiomissa
Axiom on kirjallinen ohjelma . Lähdekoodi on saatavilla useissa määrissä osoitteessa axiom-developer.org . Nämä taltiot sisältävät järjestelmän ajan tasalla olevan lähdekoodin.
Seuraavat asiakirjat ovat tällä hetkellä saatavilla:
Axiom-projektin tärkeä tavoite on dokumentointi. Marraskuussa 2008 projekti julkisti ensimmäisen opetusvideoiden sarjasta, jotka ovat saatavilla myös osoitteessa axiom-developer.org . Ensimmäinen video puhuu Axiomin tietolähteistä. [5]
Matemaattinen ohjelmisto | |
---|---|
Symboliset laskelmat | |
Numeeriset laskelmat |
Tietokonealgebrajärjestelmät | |
---|---|
Omistusoikeus |
|
Vapaa | |
Ilmainen/shareware |
|
Ei tueta |
|