Axiomă

Axiomă
Tip de sistem algebric computerizat
Dezvoltator grup independent de oameni
Scris in Lisp
Sistem de operare software multiplatformă
ultima versiune
Licență licență BSD modificată
Site-ul web axiom-developer.org
 Fișiere media la Wikimedia Commons

Axiom  este un sistem de algebră computerizată de uz general gratuit . Este alcătuit dintr-un mediu de interpret, un compilator și o bibliotecă care descrie o ierarhie de tip puternic scrisă, corectă din punct de vedere matematic.

Istorie

Dezvoltarea sistemului a început în 1971 de un grup de cercetători IBM condus de Richard Jencks [2] [3] . Sistemul a fost inițial numit Scratchpad . Proiectul s-a dezvoltat lent și a fost văzut în principal ca o platformă de cercetare pentru dezvoltarea de noi idei în matematica computațională.

În anii 1990, sistemul a fost vândut către Numerical Algorithms Group (NAG), numit Axiom și a devenit un produs comercial. Dar din mai multe motive, sistemul nu a avut succes comercial și a fost retras de pe piață în octombrie 2001.

NAG a decis să facă Axiom software gratuit și să îl deschidă sub o licență BSD modificată .

În 2007, Axiom avea două furci open source : OpenAxiom și FriCAS .

Dezvoltarea sistemului continuă, noi versiuni sunt lansate la fiecare două luni [4] .

Filosofia proiectului

Tehnica de programare literară a lui Knuth este folosită în întregul cod sursă. Proiectul Axiom intenționează să utilizeze tehnologii dovedite (cum ar fi Coq și ACL2 ) pentru a demonstra corectitudinea algoritmilor.

Caracteristici

În Axiom, toate obiectele au un tip. Exemple de tipuri sunt structuri matematice (cum ar fi inele , câmpuri , polinoame ), precum și structuri de date din calcul (cum ar fi liste , arbori , tabele hash ).

O funcție poate lua un tip ca argument, iar valoarea sa returnată poate fi, de asemenea, un tip. De exemplu, Fraction este o funcție care primește IntegralDomainca argument și returnează câmpul de relație al argumentului său. Ca un alt exemplu, un inel cu matrice de numere reale poate fi construit ca . Desigur, dacă lucrați în acest domeniu, acesta este interpretat ca matrice de identitate și vă permite să obțineți matricea inversă dacă există. SquareMatrix(4, Fraction Integer)1A^-1A

Unele operații pot avea același nume, caz în care tipurile de argument și rezultat sunt folosite pentru a determina ce operație este aplicată, similar cu OOP .

Limbajul de extensie Axiom se numește SPAD. Întreaga bază matematică a Axiomei este scrisă în acest limbaj. Interpretul folosește aproape aceeași limbă.

SPAD a fost dezvoltat în continuare sub numele A# și mai târziu Aldor . Mai mult, acesta din urmă poate fi folosit ca limbaj alternativ de extensie. Cu toate acestea, vă rugăm să rețineți că este distribuit sub o altă licență.

Exemple

3j caractere

Calcularea simbolurilor 3j și a coeficienților Clebsch-Gordan .

j3Sum ( j1 , j2 , j3 , m1 , m2 , m3 ) = = maxz : = reduce ( min , [ j1+j2-j3 , j1-m1 , j2+m2 ] ) minz : = max(0 , max ( -( j3-j2+m1) , -( j3-j1-m2) )) minz > maxz = > 0 maxz < 0 = > 0 suma ( ( -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 nu intreg? ( j1+j2+j3 ) = > 0 sqrt ( _ factorial(j1+j2-j3) * factorial(j1-j2+j3) * factorial( -j1 +j2+j3) / _ factorial(j1+j2+j3+1) * _ factorial(j1+m1) * factorial(j1-m1) * _ factorial(j2+m2) * factorial(j2-m2) * _ factorial(j3+m3) * factorial(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 )

Relativitatea generală

„Axioma” derivă simbolurile Christoffel și tensorii Riemann și Ricci în soluția Schwarzschild .

x : = vector [ ' t , ' r , ' % theta , '% phi ]; dim : = #x; % nu : = operator '% nu ; % lambda : = operator '% lambda ; lg : = matrice [ [ 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 ) == free x dim gratuit gratuit lg ug gratuit x : = nume dim : = #x lg : = metric ug : = invers lg sum(listă ) == reduce (+ , listă ) Christoffel ( k , l , i ) = = ( 1 /2) * suma [ ug(i , m) *( D(lg(k , m) , x(l) ) + D(lg(m , l) , x(k) ) - D(lg(k , l) , x(m) )) pentru m în 1. . dim ] Riemann ( k , l , m , i ) = = D(Christoffel(k , m , i) , x(l) ) - D(Christoffel(k , l , i) , x(m) ) + suma [ Christoffel(n , l , i) * Christoffel(k , m , n ) - Christoffel(n , m , i) * Christoffel(k , l , n ) pentru n în 1. . dim ] Ricci ( i , k ) = = suma [ Riemann(i , l , k , l) pentru l în 1. . dim ] scalarCurvature () == sum [ sum [ ug(i , k) * Ricci(i , k) pentru eu in 1. . dim ] pentru k în 1. . dim ] 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 ) pentru n în 1. . dim ] arată Christoffel () == pentru k în 1. . dim repetare pentru l în 1. . k -repetă pentru eu in 1. . dim repetare dacă Christoffel(k , l , i) ~= 0 atunci k > l = > infix de ieșire ('= , [ script( '% Gamma ,[[ k-1 , l-1 ],[ i-1 ]] ) , _ script( '% Gamma ,[[ l-1 , k-1 ],[ i-1 ]] ) , _ Christoffel(k , l , i) :: OUTFORM ] ) k = l => ieșire infix ('= , _ [ script( '% Gamma ,[[ k-1 , l-1 ],[ i-1 ]] ) , _ Christoffel(k , l , i) :: OUTFORM ] ) arată Ricci () == pentru eu in 1. . dim repetare pentru k în 1. . repet _ dacă Ricci(i , k) ~= 0 atunci i = k => infix de ieșire ('= , [ indice( ' R ,[ i-1 , k-1 ] ) , Ricci(i , k) :: OUTFORM ] ) i > k = > iesire infix ('= , [ indice( ' R ,[ i-1 , k-1 ] ) , _ indice( ' R ,[ k-1 , i-1 ] ) , _ Ricci(i , k) :: OUTFORM ] ) arată Riemann () == pentru k în 1. . dim repetare pentru l în 1. . dim repetare pentru m în 1. . dim repetare pentru eu in 1. . dim repetare dacă Riemann(k , l , m , i) ~= 0 atunci infix de ieșire ('= , _ [ script( ' R , [[ k-1 , l-1 , m-1 ], [ i-1 ]] ) , Riemann(k , l , m , i) :: OUTFORM ] ) ( 21 ) -> showChristoffel( ) Compilarea funcției sum cu tipul List Expression Integer -> Expression Integer Compilarea funcției Christoffel cu tipul ( PositiveInteger , PositiveInteger , PositiveInteger) -> Expression Integer Funcția de compilare showChristoffel cu tipul () -> Void % nu(r) , % e % nu ( r) unu % Gamma = --------------- 0 , 0 % lambda(r) 2 %e , % nu ( r) 0 0 % Gamma = % Gamma = ------ - 1 0 0 1 2 _ _ , % lambda ( r) unu % 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 Tip : Gol ( 22 ) -> Ricci(3 , 3 ) Compilarea funcției Riemann cu tipul ( PositiveInteger , PositiveInteger , PositiveInteger , PositiveInteger) -> Expresie Integer Funcția de compilare Ricci cu tip ( PositiveInteger , PositiveInteger) -> Expresie Integer , , % lambda(r) - r%nu ( r) + r%lambda ( r) + 2 %e - 2 ( 22 ) --------------------------------------- _ % lambda(r) 2 %e Tip : Expresie Integer

Galerie

Documentație

Axiom este un program literar . Codul sursă este disponibil într-un set de volume la axiom-developer.org . Aceste volume conțin codul sursă actualizat pentru sistem.

În prezent sunt disponibile următoarele documente:

Video

Un obiectiv important al proiectului Axiom este furnizarea de documentație. În noiembrie 2008, proiectul a anunțat primul dintr-o serie de videoclipuri tutoriale, care sunt disponibile și la axiom-developer.org . Primul videoclip vorbește despre sursele de informații despre Axiom. [5]

Note

  1. http://www.axiom-developer.org/axiom-website/releasenotes.html
  2. Richard Dimick Jenks . Consultat la 26 aprilie 2009. Arhivat din original pe 17 iulie 2011.
  3. ↑ Pagina de pornire Axiom Arhivată la 18 august 2004 la Wayback Machine .
  4. Patch -uri arhivate pe 23 mai 2009 la Wayback Machine .
  5. „Axiom Computer Algebra System Information Sources” Arhivat 29 martie 2016 la Wayback Machine , jgg899, YouTube , 30 noiembrie 2008.

Link -uri