Axiom | |
---|---|
Typ | systém počítačové algebry |
Vývojář | nezávislá skupina lidí |
Zapsáno v | Lisp |
Operační systém | multiplatformní software |
Nejnovější verze | |
Licence | upravená licence BSD |
webová stránka | axiom-developer.org |
Mediální soubory na Wikimedia Commons |
Axiom je bezplatný univerzální systém počítačové algebry . Skládá se z prostředí tlumočníka, kompilátoru a knihovny, která popisuje silně typovanou, matematicky správnou hierarchii typů.
Vývoj systému zahájila v roce 1971 skupina výzkumníků IBM vedená Richardem Jencksem [2] [3] . Systém se původně jmenoval Scratchpad . Projekt se vyvíjel pomalu a byl vnímán hlavně jako výzkumná platforma pro vývoj nových nápadů ve výpočetní matematice.
V 90. letech 20. století byl systém prodán společnosti Numerical Algorithms Group (NAG) s názvem Axiom a stal se komerčním produktem. Ale z řady důvodů nebyl systém komerčně úspěšný a v říjnu 2001 byl stažen z trhu.
NAG se rozhodl vytvořit svobodný software Axiom a otevřít jej pod upravenou licencí BSD .
V roce 2007 měl Axiom dva open source forky : OpenAxiom a FriCAS .
Vývoj systému pokračuje, nové verze vycházejí každé dva měsíce [4] .
Knuthova technika literárního programování je použita v celém zdrojovém kódu. Projekt Axiom plánuje použít osvědčené technologie (jako je Coq a ACL2 ) k prokázání správnosti algoritmů.
V Axiomu mají všechny objekty svůj typ. Příklady typů jsou matematické struktury (jako jsou kruhy , pole , polynomy ) a také datové struktury z výpočetní techniky (jako seznamy , stromy , hashovací tabulky ).
Funkce může mít typ jako argument a její návratová hodnota může být také typ. Například Fraction je funkce, která přijímá IntegralDomainjako argument a vrací pole vztahu svého argumentu. Jako další příklad může být kruh matice reálného čísla konstruován jako . Samozřejmě, pokud pracujete v této doméně, je interpretována jako matice identity a umožňuje vám získat inverzní matici , pokud existuje. SquareMatrix(4, Fraction Integer)1A^-1A
Některé operace mohou mít stejný název, v takovém případě se používají typy argumentů a výsledků k určení, která operace se použije, podobně jako OOP .
Jazyk rozšíření Axiom se nazývá SPAD. Celý matematický základ Axiomu je napsán v tomto jazyce. Tlumočník používá téměř stejný jazyk.
SPAD byl dále vyvíjen pod názvem A# a později Aldor . Ten lze navíc použít jako alternativní jazyk rozšíření. Upozorňujeme však, že je distribuován pod jinou licencí.
Výpočet symbolů 3j a Clebsch-Gordanových koeficientů .
j3Součet ( j1 , j2 , j3 , m1 , m2 , m3 ) = = maxz : = snížení ( min , [ j1+j2-j3 , j1-m1 , j2+m2 ] ) minz : = max(0 , max ( -( j3-j2+m1) , -( j3-j1-m2) )) minz > maxz = > 0 maxz < 0 = > 0 součet ( ( -1 ) ^( z+j1-j2-m3) / _ ( faktoriál(z) * faktoriál(j1+j2-j3-z) * faktoriál(j1-m1-z) * _ faktoriál(j2+m2-z) * faktoriál(j3-j2+m1+z) * faktoriál(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 ne celé číslo? ( j1+j2+j3 ) = > 0 sqrt ( _ faktoriál(j1+j2-j3) * faktoriál(j1-j2+j3) * faktoriál( - j1+j2+j3) / _ faktoriál(j1+j2+j3+1) * _ faktoriál(j1+m1) * faktoriál(j1-m1) * _ faktoriál(j2+m2) * faktoriál(j2-m2) * _ faktoriál(j3+m3) * faktoriál(j3-m3) ) * j3 Součet ( 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" odvozuje Christoffelovy symboly a Riemannovy a Ricciho tenzory ve Schwarzschildově řešení .
x : = vektor [ ' t , ' r , ' % theta , ' % phi ]; dim : = #x; % nu : = operátor ' % nu ; % lambda : = operátor '% lambda ; lg : = matice [ [ 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 : = inverzní lg ; grSetup( metric , names ) == free x volné roztm zdarma lg zdarma ug x : = jména tlumené : = #x lg : = metrický ug : = inverzní lg součet(seznam ) == snížit (+ , seznam ) Christoffel ( k , l , i ) = = ( 1 /2) * součet [ ug(i , m) *( D(lg(k , m) , x(l) ) + D(lg(m , l) , x(k) ) - D(lg(k , l) , x(m) )) pro m v 1. . šero ] Riemann ( k , l , m , i ) = = D(Christoffel(k , m , i) , x(l) ) - D(Christoffel(k , l , i) , x(m) ) + součet [ Christoffel(n , l , i) * Christoffel(k , m , n ) - Christoffel(n , m , i) * Christoffel(k , l , n ) pro n v 1. . šero ] Ricci ( i , k ) = = součet [ Riemann(i , l , k , l) pro l v 1. . šero ] skalárníKřivka () == součet [ součet [ ug(i , k) * Ricci(i , k) pro já v 1 . dim ] pro k v 1. . šero ] 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 ) = = součet [ lg(i , n ) * Riemann(k , l , m , n ) pro n v 1. . šero ] showChristoffel () == pro k v 1. . matné opakování pro l v 1. . k - opakovat pro já v 1 . matné opakování jestliže Christoffel(k , l , i) ~= 0 pak k > l = > výstupní infix ('= , [ script( '% Gamma ,[[ k-1 , l-1 ],[ i-1 ]] ) , _ script( '% Gamma ,[[ l-1 , k-1 ],[ i-1 ]] ) , _ Christoffel(k , l , i) :: OUTFORM ] ) k = l => výstupní infix ('= , _ [ skript( '% Gamma ,[[ k-1 , l-1 ],[ i-1 ]] ) , _ Christoffel(k , l , i) :: OUTFORM ] ) showRicci () == pro já v 1 . matné opakování pro k v 1. . opakuji _ jestliže Ricci(i , k) ~= 0 pak i = k => výstupní infix ('= , [ dolní index( ' R ,[ i-1 , k-1 ] ) , Ricci(i , k) :: OUTFORM ] ) i > k = > výstupní infix ('= , [ dolní index ( ' R ,[ i-1 , k-1 ] ) , _ dolní index ( ' R ,[ k-1 , i-1 ] ) , _ Ricci(i , k) :: PŘEDMĚT ] ) showRiemann () == pro k v 1. . matné opakování pro l v 1. . matné opakování pro m v 1. . matné opakování pro já v 1 . matné opakování jestliže Riemann(k , l , m , i) ~= 0 pak výstupní infix ('= , _ [ script( ' R , [[ k-1 , l-1 , m-1 ], [ i-1 ]] ) , Riemann(k , l , m , i) :: OUTFORM ] ) ( 21 ) -> showChristoffel( ) Kompilace funkce sum s typem List Expression Integer -> Expression Integer Kompilační funkce Christoffel s typem ( PositiveInteger , PositiveInteger , PositiveInteger) -> Expression Integer Kompilační funkce showChristoffel s typem () -> Void % nu(r) , % e % nu ( r) jeden % Gamma = --------------- 0 , 0 % lambda(r) 2 % e , % nu ( r) 0 0 % Gamma = % Gamma = ------ - 1 0 0 1 2 _ _ , % lambda ( r) jeden % 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 hřích ( % theta) 2 1 r hřích ( % theta) % Gamma = - -------------- 3 , 3 % lambda(r) % e 2 % gama = - cos ( % theta)sin( % theta) 3 , 3 Typ : Neplatné ( 22 ) -> Ricci(3 , 3 ) Kompilace funkce Riemann s typem ( PositiveInteger , PositiveInteger , PositiveInteger , PositiveInteger) -> Expression Integer Kompilační funkce Ricci s typem ( PositiveInteger , PositiveInteger) -> Výraz celé číslo , , % lambda(r) - r%nu ( r) + r%lambda ( r) + 2 %e - 2 ( 22 ) --------------------------------------- _ % lambda(r) 2 % e Typ : Výraz celé čísloRozhraní Axiom v prohlížeči Mozilla Firefox
Axiom zjednodušuje rovnici tepla
Práce s maticemi v Axiomu
Axiom je literární program . Zdrojový kód je dostupný v sadě svazků na axiom-developer.org . Tyto svazky obsahují aktuální zdrojový kód systému.
V současné době jsou k dispozici následující dokumenty:
Důležitým cílem projektu Axiom je poskytnout dokumentaci. V listopadu 2008 projekt oznámil první ze série výukových videí, která jsou také dostupná na axiom-developer.org . První video hovoří o zdrojích informací o Axiomu. [5]
Matematický software | |
---|---|
Symbolické výpočty | |
Numerické výpočty |
Systémy počítačové algebry | |
---|---|
Proprietární |
|
Volný, uvolnit | |
Free/shareware |
|
Není podporováno |
|