Mathematica

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Wolfram Mathematica
software
Siglă
Exemplu de captură de ecran
Tip Sistem de algebră computațională
Analiza numerica
Dezvoltator Wolfram Research
Data primei versiuni 23 iunie 1988
Ultima versiune 12.3 (20 mai 2021)
Sistem de operare Microsoft Windows [1]
macOS [1]
Linux [1]
Limba Java
Limbajul Wolfram
C ++
C.
Set de instrumente Qt
Licență licență de proprietate
( licența nu este gratuită )
Site-ul web www.wolfram.com/mathematica/

Mathematica este un mediu de calcul simbolic și numeric multiplataforma, conceput de Stephen Wolfram și dezvoltat ulterior de o echipă de matematicieni și programatori. Mathematica folosește un limbaj de programare interpretat puternic, numit limbaj Wolfram . Wolfram și echipa sa au început să lucreze la program în 1986 și au lansat prima versiune în 1988. Versiunea actuală este 12.3, lansată pe 20 mai 2021. Sistemul Mathematica este disponibil pentru platformele Windows , MacOS și Linux [1] .

Introducere

Limbajul de programare al Mathematica - redenumit „Wolfram Language” - se bazează pe rescrierea expresiilor ( termen-rescriere ) și acceptă diverse paradigme de programare, inclusiv programarea funcțională , programarea logică , programarea bazată pe recunoașterea tiparelor ( pattern -matching ) și pe substituire reguli ( bazate pe reguli ), precum și programarea procedurală mai tradițională. Abordarea procedurală nu este, în general, recomandată în Mathematica, deoarece este mult mai puțin eficientă decât alternativele funcționale și bazate pe reguli . Mathematica este construită în principal în C și C ++ , dar majoritatea multor biblioteci furnizate împreună cu programul sunt scrise în limbajul propriu al Mathematica, care poate fi utilizat pentru a extinde în continuare funcționalitatea sistemului. În mod normal, noul cod este adăugat ca un pachet (pachet), un fișier text în format ASCII care conține cod scris în limba dvs. Mathematica. Pachetele au extensia .m .

În Mathematica, limbajul de bază este interpretat de un nucleu care efectuează procesarea propriu-zisă; rezultatele sunt apoi comunicate către o interfață specifică dintre cele disponibile. Comunicarea dintre nucleu și nucleu (sau orice alt client , cum ar fi programele scrise de utilizator) utilizează protocolul MathLink , adesea prin intermediul unei rețele. Este posibil ca mai multe procese front-end să se conecteze la același nucleu și că același front-end să fie conectat la nuclee diferite.

De regulă, interfața cu utilizatorul este reprezentată de un document text interactiv, blocnotesul ( caietul ), care poate afișa și interpreta notația matematică bidimensională în format WYSIWYG și încorporează rezultatele procesării sub formă de text, formule, grafică și sunete. Notebook-urile sunt fișiere text în format ASCII cu extensia .nb (sau .ma pentru versiuni până la 2.2) care pot fi transmise de la o platformă la alta. Wolfram Research pune la dispoziție un software gratuit, numit MathReader , care vă permite să vizualizați notebook-uri cu format matematic bidimensional. Cu versiunea 6 a fost introdusă o versiune avansată ( Mathematica Player ) care poate executa în timp real codul creat de Mathematica și stocat în fișiere cu extensia .nbp . Acestea sunt demonstrații interactive în care utilizatorul poate modifica anumiți parametri prin intermediul unei interfețe grafice create cu comenzi specifice limbajului Mathematica. Wolfram Demonstration Project colectează o gamă largă de demonstrații care vizează în special didactica.

Interfețe

Interfața implicită are un aspect extins care se remarcă prin capacitățile sale grafice integrate și o reprezentare care este mai aderentă la notația matematică tradițională (de exemplu, vă permite să scrieți în loc de x ^ 4 + 1 ).

Acces la nucleul Mathematica prin WITM pe un handheld HP iPAQ

În metafora caietului, textul și comenzile introduse de utilizator, precum și rezultatele procesate de nucleu (care includ, pe lângă expresii, și imagini și sunete) sunt reprezentate într-o structură ierarhică a celulelor. Cu versiunea 3.0, formatul notebook-urilor a suferit modificări pentru a se adapta la filosofia conform căreia în Mathematica totul este expresie (extensia fișierelor notebook s-a schimbat de la .ma la .nb). Un notebook este de fapt un fișier text care conține expresia Notebook [] ale cărui argumente sunt o ierarhie de celule care reprezintă text, formule, grafice, sunete, animații și la care se adaugă o serie de opțiuni care stabilesc modalitățile de vizualizare și utilizarea conținutului. Începând cu versiunea 6, chiar grafica, animațiile și sunetele au devenit obiecte care pot fi manipulate direct de limbă.

Ca exemplu, următoarea este reprezentarea internă a unui caiet care conține o secțiune, o subsecțiune, două celule de text și o formulă:

 '' 'Caiet [' '' {
  Cell [CellGroupData [{
     Celula ["Titlul secțiunii", "Secțiunea"],
     Celula ["Titlul subsecțiunii", "Subsecțiunea"],
       Celula ["text introductiv", "Text"],
       Cell [BoxData [
        FormBox [
          RowBox [{
            SuperscriptBox ["\ [ExponentialE]", 
              RowBox [{
                RowBox [{"cos", "(", "\ [Theta]", ")"}], "+",
                RowBox [{"\ [ImaginaryI]", "", 
                  RowBox [{
                  "păcat", "(", "\ [Theta]", ")"}]}]}]], 
            „\ [LongEqual]”, „1”}], 
          Forma tradițională]],
       "Intrare"]
      Celula [„cea de mai sus este o formulă formatată”, „Text”]
   }, Deschis]
  ]
} '' ']' ''

Această scriere, care este conținută în fișierul text ASCII cu sufixul .nb care constituie blocnotesul , este interpretată de interfața Mathematica sau Mathreader pentru a produce un afișaj de tip WYSIWYG al cărui conținut poate fi modificat ulterior de utilizator și eventual trimis la kernel. pentru evaluare.

Toate versiunile pentru UNIX / Linux vin, de asemenea, cu o interfață de linie de comandă; utilizatorului i se prezintă o interfață în format pur textual, un exemplu care este dat mai jos:

 % matematică
Mathematica 5.2 pentru Sun Solaris (UltraSPARC)
Drepturi de autor 1988-2005 Wolfram Research, Inc.
- Grafică terminal inițializată -

În [1]: = Rezolvați [x ^ 2 + 2 x - 9 == 0, x]

Out [1] = {{x -> -1 - Sqrt [10]}, {x -> -1 + Sqrt [10]}}

Primele versiuni ale Mathematica pentru MS-DOS prezentau doar interfața liniei de comandă.

Deși interfața standard Mathematica este cea mai populară, sunt disponibile alte câteva interfețe, cum ar fi:

  • WITM , care înseamnă Interfață web către Mathematica, este o interfață compatibilă cu orice computer echipat cu un browser Web care vă permite să utilizați Mathematica pe dispozitive portabile, cum ar fi PDA-uri pentru care nu este disponibilă o versiune de Mathematica.
  • JMath este o interfață bazată pe biblioteca GNU readline disponibilă pentru sistemele de operare asemănătoare UNIX.
  • MASH vă permite să rulați programe Mathematica autonome din linia de comandă a unui sistem UNIX.

Paradigma unică a Mathematica

Reprezentarea internă a expresiilor

Structura fundamentală a datelor Mathematica este expresia . Fiecare element unic al limbajului, tipurile de date pentru aceeași structură a caietului, este o expresie constă dintr-un antet (Head) și printr-o succesiune de argumente închise între paranteze pătrate și separate prin virgule. De exemplu, scrierea 1 + 1 este văzută de nucleu ca expresie

 Plus [1.1]

în timp ce atribuirea variabilei x (care nu trebuie declarată înainte de a fi utilizată) a sumei menționate anterior, adică scrierea x = 1 + 1, este reprezentată intern cu

 Setați [x, Plus [1,1]]

Avantajul acestei reprezentări este că tot conținutul caietelor și pachetelor (care la rândul lor nu sunt altceva decât expresii) pot fi reprezentate cu fișiere text simple în format ASCII, care pot fi partajate între diferitele platforme pe care este implementat Mathematica. Reprezentarea internă a unei expresii pot fi afișate utilizând comenzile Fullform și TreeForm.

 <small> În [5]: = </small> '' 'FullForm [1 + Sin [2 Pi (wt + a)]]
<small> Out [5]: = </small> Plus [1, Sin [Times [2, Pi, Plus [a, Times [t, w]]]]]

Antetul unei expresii poate fi afișat folosind comanda Head [] :

 <small> În [1]: = </small> '' 'Cap [1 + 1]' ''
<small> Out [1] = </small> Plus
<small> În [2]: = </small> '' 'Cap [{1,2,3}]' ''
<small> Out [2] = </small> Listă

Părțile sale interne sunt în schimb accesibile folosind procedura Partea [n1, n2, ...] a cărei formă scurtă este reprezentată de [[n1, n2, ...]]. Următorul exemplu extrage, respectiv: antetul, al doilea argument al lui Plus, primul (și singurul) argument al funcției Sin, al doilea addendum al celui de-al treilea factor din argumentul Sin.

 <small> În [3]: = </small> '' 'expr = 1 + Sin [2 Pi (wt + a)];
<small> În [4]: ​​= </small> '' '{Partea [expr, 0], expr [[2]], expr [[2, 1]], expr [[2, 1, 3 , 2]]} '' '
<small> Out [4] = </small> {Plus, Sin [2 Pi (a + tw)], 2 Pi (a + tw), tw}

Atomi

Mathematica oferă, de asemenea, tipuri atomice care identifică diferitele tipuri de numere (întreg, rațional, real, complex) și simbol (simbol de limbă, șir de caractere). Tipurile atomice din Mathematica sunt: întreg , rațional , real , complex , simbol și șir . Reprezentarea unui atom diferă într-un anumit sens de cea a expresiilor tradiționale (ale căror date sunt prezentate între paranteze pătrate ale expresiei) prin faptul că antetul nu este de obicei afișat, deși este returnat de comanda Head. Următoarele comenzi aplică procedura Head pentru fiecare element al listei care urmează / @ (notația infixată a Hărții []):

 <small> În [1]: = </small> '' 'Head / @ {7, 2/3, 2.71, 5 - 3 I, I, E, Pi}' ''
<small> Out [1] = </small> {Întreg, rațional, real, complex, complex, simbol, simbol}
<small> În [2]: = </small> '' 'Head / @ {Integer, Plus, Map, Solve, "Integer", "Pluto"}' ''
<small> Out [2] = </small> {Simbol, Simbol, Simbol, Simbol, Șir, Șir}

Evaluarea expresiei

Când o expresie este trimisă către nucleu, nucleul o procesează (sau, împrumutând termenul vorbitor de limba engleză Evaluează , o evaluează ) aplicând imediat (în ordine) la antet, argumentele și expresia în ansamblu o serie de reguli de transformare specificat de utilizator sau predefinit în limbă.

 <small> În [1]: = </small> '' '1 + 1' ''
<small> Out [1] = </small> 2

Spre deosebire de alte produse similare, cum ar fi Maxima și Maple , Mathematica aplică recursiv regulile de transformare stocate până când expresia procesată suferă modificări suplimentare (se spune că s-a atins un punct fix ) sau se atinge o limită de recursivitate. Pentru ca acest lucru să aibă sens, absența efectelor secundare este oportună - chiar dacă nu este obligatorie ; din acest element derivă asemănarea cu programarea funcțională. Funcțiile și codul sunt de primă clasă și nu sunt opace. Domeniul de aplicare este dinamic, dar există și câteva construcții care încearcă să simuleze domeniul lexical.

Evaluare transparentă pentru utilizator

Procesul de evaluare de către nucleu este parțial transparent pentru utilizator și acest lucru poate fi o sursă de frustrare pentru programatorul începător. Deoarece antetul și argumentele sunt evaluate mai întâi, atunci când expresia este evaluată ca un întreg, ea a suferit deja o transformare parțială a sintaxei sale. Deoarece regulile de rescriere se bazează pe substituții sintactice și nu semantice, se poate întâmpla ca anumite reguli de substituție să nu se mai aplice formei modificate și, prin urmare, să nu aibă efectul dorit. De exemplu, puteți înlocui simbolul 1 cu simbolul 3 prin următoarea regulă de substituție

 <small> În [1]: = </small> '' '1 /. (1-> 3) '' '
<small> Out [1] = </small> 3

reprezentat intern ca:

 Înlocuiți toate [1, regula [1,3]]

Cu toate acestea, dacă încercați să înlocuiți același simbol în scrierea 1 + 1, obțineți un rezultat diferit de valoarea așteptată 6:

 <small> În [2]: = </small> '' '1 + 1 /. (1-> 3) '' '
<small> Out [2] = </small> 2

Aceasta deoarece o evaluare transparentă a ReplaceAll[Plus[1,1],Rule[1,3]] avut loc înainte ca regula de înlocuire invocată de ReplaceAll să poată fi aplicată. De fapt, nucleul a evaluat argumentele ReplaceAll înainte de a apela acea funcție. Rezultatul a fost că ReplaceAll a avut următoarea sintaxă de apel:

 Înlocuiți toate [2, regula [1,3]]

și, neputând găsi simbolul 1, nu a avut niciun efect. Lipsa de înțelegere a mecanismului transparent de evaluare este una dintre principalele surse de erori în programarea cu Mathematica, evidențiată de numeroasele mesaje pe această temă pe grupul de discuții comp.soft-sys.math.mathematica.

Exemplu practic

Un exemplu non-banal al modului în care evaluarea transparentă a antetului poate duce la rezultate în contradicție aparentă cu cele așteptate este următorul: una dintre modalitățile de a calcula derivata simbolică a unei funcții în Mathematica este prin forma postfix a Derivatului operator; dacă f [x] este funcția variabilei x, atunci derivata este dată de f '[x]. Această operație este echivalentă cu forma de notație prefixată Derivată [1] [f] [x], care constă dintr-o funcție a variabilei x condusă de Derivată [1] [f]. Când evaluează expresia, Mathematica continuă să proceseze antetul, calculând derivata mai întâi a funcției pure f și apoi o evaluează la argument (în acest caz x). De exemplu, dacă f este funcția sinusoidală integrală specială, avem

 <small> În [3]: = </small> '' 'SinIntegral' [x] '' '
<small> Out [3] = </small> Sin [x] / x

Cu toate acestea, dacă dorim să calculăm derivata funcției SinIntegral [x ^ 2], următoarea evaluare

 <small> În [4]: ​​= </small> '' 'SinIntegral' [x ^ 2] '' '
<small> Out [4] = </small> Sin [x ^ 2] / x ^ 2

dă un rezultat care nu este de acord cu regulile de derivare compuse ale unei funcții. Acest lucru se datorează faptului că antetul a fost evaluat indiferent de argumentele funcției. Rezultatul operației este de fapt derivata funcțională a sinusului integral evaluată la valoarea x ^ 2. Pentru a obține un rezultat în conformitate cu regula de derivare a funcțiilor compuse este necesar să se utilizeze comanda D [expr, var] în care este specificată variabila față de care este derivată:

 <small> În [5]: = </small> '' 'D [SinIntegral [x ^ 2], x]' ''
<small> Out [5] = </small> 2 Sin [x ^ 2] / x

Reducerea la forma normală

Pentru ca regulile de substituție să fie aplicate în mod consecvent și evitând riscul de recursivitate infinită, este esențial ca diferitele forme sintactice cu care poate fi reprezentată o expresie să fie trasabile în mod univoc la o singură formă care nu este supusă unor transformări ulterioare. Această formă, care nu este altceva decât punctul fix al transformărilor aplicabile (fie ele predefinite sau definite de utilizator) este așa-numita formă normală . Reducerea în formă normală este importantă în scopul programării în Mathematica atât atunci când se datorează regulilor integrate în sistem, cât și când trebuie implementată în codul de utilizator.

De exemplu, este clar că polinomul 2x 2 -5x + 1-x 2 + (3 + 4) x poate fi reprezentat și cu următoarele scrieri (echivalent matematic)

x 2 + 2x + 1 == 2x + x 2 +1 == 1 + 2x + x 2

care derivă din aplicarea proprietății asociative și comutative a sumei (implementată în Mathematica prin intermediul atributelor „Flat” și „Orderless” ale funcției Plus). În mod implicit, Mathematica sortează automat polinoamele pornind de la cele mai mici puteri, astfel încât polinomul menționat anterior, dacă este evaluat, va fi convertit automat în forma 1 + 2x + x 2 . Prin urmare, este necesar să rețineți că regulile de substituție având ca argument una dintre celelalte forme echivalente s-ar putea să nu se aplice formei normale care le va fi transmisă.

De asemenea, este adevărat că același polinom poate fi reprezentat de scrieri

(x + 1) (x + 1) == (x + 1) 2

care nu sunt procesate automat de Mathematica în absența unor comenzi specifice. Un cod de utilizator ipotetic conceput pentru a extrage informații din polinom (cum ar fi coeficientul lui x) trebuie să aibă grijă de reducerea diferitelor reprezentări la aceeași formă normală, de exemplu prin forțarea expansiunii lor și, eventual, simplificarea în continuare a rezultatului. Odată ce forma normală este atinsă, va fi posibil să se aplice regulile pentru extragerea informațiilor și să se obțină rezultate consistente, indiferent de sintaxa utilizată pentru a transmite intrarea.

Mecanisme de control al evaluării

Mathematica oferă mai multe mecanisme care permit programatorului să influențeze modul în care este evaluată o expresie. Principalele sunt atributele asociate cu funcțiile și constructele de tipul Țineți și evaluați .

Manipularea expresiilor

Unul dintre principiile directoare ale Mathematica este structura unificată prezentă în spatele aproape tuturor obiectelor reprezentabile din Mathematica. De exemplu, dacă introducem expresia , va fi reprezentat ca și cum ar fi scris:

 <small> În [1]: = </small> '' 'x ^ 4 + 1' ''
<small> Out [1] = </small> 1 + x <sup> 4 </sup>

Cu toate acestea, dacă comanda FullForm este utilizată în această expresie:

 <small> În [2]: = </small> '' 'FullForm [x ^ 4 + 1]' ''
<small> Out [2] = </small> Plus [1, Putere [x, 4]]

Aproape toate obiectele din Mathematica au capul de formă de bază [ și 1 , și 2 , ... ] (care poate fi afișat sau inserat în alt stil). De exemplu, capul exemplului anterior este Plus , simboluri precum x au forma Simbol ["x"] . Listele au, de asemenea, această structură, unde Capul este Listă .

Acest principiu permite expresiilor obișnuite care nu au nimic de-a face cu listele să conțină operatori legați de liste:

 <small> In [3]: = </small> '' 'Expand [(Cos [x] + 2 Log [x ^ 11]) / 13] [[2, 1]]' ''
<small> Out [3] = </small> 2/13

Se poate întâmpla și invers - Listele pot fi editate cu operatori normali:

 <small> În [4]: ​​= </small> '' 'Hartă [Aplicare [Jurnal, #] &, {{2, x}, {3, x}, {4, x}}]' ' '
<small> Deconectare [4] = </small> {Jurnal [x] / Jurnal [2], Jurnal [x] / Jurnal [3], Jurnal [x] / Jurnal [4]}

În cazul în care funcția Aplicare schimbă Capul celui de-al doilea argument al acestuia cu cel al primului.

Exemple

Următorul exemplu de cod Mathematica găsește determinantul unei matrice 6 × 6 ale cărei elemente i , j -th conțin ij și elemente nule sunt înlocuite cu 1.

 <small> În [1]: = </small> '' 'Det [Array [Times, {6, 6}, 0] /. 0 -> 1] '' ''
<small> Out [1] = </small> 0

Deci determinantul acestei matrice este 0.

Următorul calcul numeric găsește rădăcina ecuației și x = x 2 + 2, începând de la punctul x = -1.

 <small> În [2]: = </small> '' 'FindRoot [Exp [x] == x ^ 2 + 2, {x, -1}]' ''
<small> Out [2] = </small> {x -> 1.3190736768573652}

Programare în Mathematica

Flexibilitate

Mathematica vă permite să programați urmând diferite paradigme. Să luăm în considerare un exemplu simplu: vrem să obținem un tabel cu valorile celui mai mare divizor comun ( x , y ) pentru 1 ≤ x ≤ 5, 1 ≤ y ≤ 5.

Cea mai concisă abordare este utilizarea uneia dintre diferitele funcții specializate:

 <small> În [3]: = </small> '' 'Array [GCD, {5, 5}]' ''
<small> Out [3] = </small> {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, { 1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}}

Există cel puțin alte trei moduri de a face același lucru:

 <small> În [4]: ​​= </small> '' 'Tabel [GCD [x, y], {x, 1, 5}, {y, 1, 5}]' ''
<small> Out [4] = </small> {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, { 1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}}

O abordare în stil APL:

 <small> În [5]: = </small> '' 'Exterior [GCD, Range [5], Range [5]]' ''
<small> Out [5] = </small> {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, { 1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}}

Exteriorul corespunde operatorului extern al produsului, Range corespunde operatorului iota .

O abordare iterativă:

 <small> În [6]: = </small> '' 'l1 = {}; (* inițializați ca listă goală, '' '
       '' 'deoarece în concluzie vrem o listă *)' ''
       '' 'Pentru [i = 1, i <= 5, i ++,' ''
       '' 'l2 = {};' '' 
          '' 'Pentru [j = 1, j <= 5, j ++,' ''
             '' 'l2 = Anexați [l2, GCD [i, j]]' '' 
             '' '];' ''
          '' 'l1 = Anexați [l1, l2]; 
             '' '(* adaugă sublista, adică linia *)' ''
       '' ']; l1 '' '
<small> Out [6] = </small> {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, { 1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}}

Observați cum această soluție este considerabil mai lungă decât celelalte.

Eficienţă

Rutinele încorporate ale Mathematica sunt în mare parte scrise în limbajul C și, ca atare, sunt deosebit de eficiente în ceea ce privește timpul de execuție. Cu toate acestea, având în vedere absența tastării în Mathematica, fiecare procedură invocată într-un pachet sau într-un notebook se referă la mai multe rutine de limbaj C specializate, fiecare dintre acestea gestionând execuția pe baza tipurilor de date transmise de utilizator. Pentru fiecare procedură, nucleul trebuie mai întâi să verifice dacă datele transmise sunt valide și apoi să aleagă, dintre algoritmii pentru tipul particular de date identificat, cel care se potrivește cel mai bine problemei. Toate acestea implică un cost general care este în general neglijabil pentru procedura unică, dar devine relevant atunci când mai multe proceduri sunt implicate în succesiune sau calculele trebuie repetate în cadrul unui ciclu.

Timpii de execuție ai unui program scris în Mathematica depind, prin urmare, de compromisul dintre eficiența rutinelor scrise în C și cheltuielile generale, din cauza lipsei de tastare. Există două modalități de a reduce timpii de execuție: utilizați construcția Compile [] pentru a instrui nucleul cu privire la tipul de date care trebuie transmise rutinei de nivel scăzut sau utilizați rutine de calcul scrise într-un limbaj compilat (cum ar fi C sau Fortran) care comunică (în ambele direcții) cu Mathematica prin MathLink.

Pachetele

Sistemul vine cu o gamă largă de pachete standard care acoperă o gamă largă de aplicații matematice și non-matematice. Numeroase alte pachete și caiete conexe pot fi găsite (în majoritate gratuite) pe web și în special pe site-ul web al Centrului de informații Wolfram .

Interfață cu alte aplicații

Comunicarea cu alte aplicații are loc prin protocolul MathLink . Nu numai că permite comunicarea între nucleu și interfețe, dar oferă și o interfață generală între nucleu și o aplicație arbitrară. Wolfram Research distribuie un kit de dezvoltare gratuit pentru conectarea aplicațiilor scrise în C la nucleul Mathematica prin MathLink . Alte două componente ale Mathematica, prin MathLink , permit dezvoltatorilor să conecteze nucleul la un program Java sau un program .NET: J / Link și .NET / Link .

J / Link vă permite să interfațați codul Java și programele Mathematica. Pe de o parte, programele Java folosesc comenzile Mathematica pentru a efectua calcule; pe de altă parte, Mathematica are voie să încarce clase Java, să manipuleze obiecte Java și să execute apeluri de metodă făcând posibilă, de exemplu, construirea unei interfețe grafice pentru executarea interactivă a codului Mathematica.

În mod similar, software-ul .NET poate invoca nucleul pentru a efectua calcule și a trimite rezultatele înapoi, iar dezvoltatorii Mathematica pot avea acces la funcționalitatea .NET cu ușurință.

Acces la kernel prin web

Wolfram Research produce, de asemenea, un program numit webMathematica, care permite unui server Web să interfețe cu nucleul Mathematica. În acest fel, este posibil să deservim utilizatorii paginilor interactive în care, prin intermediul unor formulare speciale, utilizatorii pot solicita procesarea kernelului pentru a efectua calcule sau pentru a vizualiza grafica.

Acces web prin kernel

De la versiunea 5.1, Mathematica are un pachet (numit WebServices.m) care vă permite să accesați serviciile puse la dispoziție de site-urile Web , făcând funcțiile lor disponibile ca și cum ar fi comenzi Mathematica. WebServices.m acceptă protocolul SOAP și este capabil să detecteze și să instaleze caracteristici suplimentare prin WSDL .

Începând cu versiunea 8, Mathematica vă permite să interacționați cu motorul de căutare Wolfram | Alpha direct din interfața notebook-ului .

Argumente pro şi contra

Beneficii

Interfața standard adoptată de cele mai recente versiuni ale Mathematica (practic toate cele suportate în prezent) simplifică drastic pregătirea calculelor și documentarea acestora. Codul este executat făcând clic pe el și apăsând tasta Shift-Enter. De asemenea, este posibil să selectați diferite celule care conțin codul (chiar și în blocuri organizate conform unei structuri ierarhice) prin evidențierea barelor laterale respective și executarea codului succesiv. Avantajul acestei abordări este că utilizatorii pot modifica unii parametri ai calculului și pot rula din nou codul în câteva secunde. Orice erori pot fi corectate direct în notebook și calculele se pot relua fără a fi nevoie să retipezi, să copiezi sau să recompilezi liniile de cod ulterioare. Alte medii de calcul, pe de altă parte, necesită, atunci când sunt utilizate în modul interactiv, să caute în istoric calculele făcute, să le copieze, să le modifice și apoi să le execute.

Un alt avantaj al Mathematica constă în capacitatea sa de a trata numerele cu precizie arbitrară și cantități exacte (cum ar fi numerele raționale). Este astfel posibil să se efectueze calcule exacte sau cu o precizie limitată doar de disponibilitatea resurselor mașinii hardware.

Mathematica oferă, de asemenea, funcții extrem de generalizate după domeniul de aplicare și numărul de dimensiuni ale datelor, delegând algoritmilor interni alegerea procedurilor optimizate pentru tipul particular de date anterioare. De exemplu, operația de convoluție poate fi aplicată listelor unidimensionale sau multidimensionale de valori numerice sau variabile simbolice, în timp ce procedura Fourier pentru calcularea FFT are aceeași sintaxă pentru cazurile mono și multidimensionale. Acest lucru simplifică modificarea codului la probleme mai generale. Numărul de funcții disponibile este, de asemenea, ridicat și vă permite să scrieți programe compacte și în același timp optimizate datorită algoritmilor interni de multe ori la stadiul tehnicii.

Critici

Spre deosebire de alte medii de calcul simbolice, care sunt open source și pot fi utilizate în mod liber, copiate și, dacă este necesar, modificate, Mathematica este un software proprietar care are restricții de utilizare, copiere și modificare.

Datele manipulate de Mathematica sunt în principal liste imbricate, a căror structură exactă este dificil de discernut pe măsură ce crește numărul de dimensiuni.

Natura predominant funcțională a programării în Mathematica face dificilă găsirea erorilor în cod (depanare). Mesajele de eroare nu indică direct instanța funcției care le-a provocat și nu sunt furnizate numere de linie sau alte funcții pentru a ajuta la urmărirea punctului din codul în care a apărut eroarea. Funcțiile oferite implicit de Mathematica (în special construcția Trace și variantele sale) returnează o masă de informații greu de interpretat pentru programatorii mai puțin experimentați. Există pachete gratuite care extind funcționalitatea Trace prin manipularea rezultatelor produse pentru a izola comportamentele anormale ale codului și pentru a urmări sursa problemei, dar nefiind incluse în versiunea standard a Mathematica, suportul (sau operația) lor în următoarele versiunile nu sunt garantate. Wolfram Research produce un mediu de dezvoltare achiziționat separat, numit Wolfram WorkBench, care se bazează pe Eclipse și oferă capabilități de lucru în echipă, versiuni și depanare avansată (inclus gratuit în întreținerea serviciului Premier).

Costul unei licențe standard unice de Mathematica 8 pentru utilizatorul profesionist care nu poate profita de reducerile rezervate studenților, profesorilor, guvernului și instituțiilor de învățământ este de 3185 euro pentru platformele Windows / Macintosh / Linux. Costul include licența perpetuă și un an de întreținere a serviciului Premier (a doua licență pentru laptop, actualizări și asistență). Utilizatorul neprofesionist poate achiziționa licența Home Edition oferită la un preț redus semnificativ [2]

O critică a forumurilor de pe site-ul web Wolfram Research și a grupului de discuții publice comp.soft-sys.math.mathematica este că acestea sunt grupuri moderate în care comunicarea este încetinită de nevoia de moderare. Una delle regole per postare sul gruppo di discussione pubblico, inoltre, prevede che non sia possibile citare altri sistemi di calcolo numerico o simbolico e questo viene percepito da alcuni come un ostacolo alla libertà di discutere di certi aspetti del linguaggio che sono realizzati meglio o peggio in altri software.

Mathematica sul Web

MathWorld è un'enciclopedia matematica in continua crescita e realizzata con la tecnologia di Mathematica. Moltissimi argomenti offrono un notebook da scaricare contenente le formule oi grafici più importanti.

The Wolfram Functions Site è un sito che riporta la più vasta collezione di formule e grafici relativi alle più disparate funzioni matematiche. È possibile scaricare i formulari e le applicazioni in formato notebook .

Wolfram Demonstration Project raccoglie un'ampia gamma di dimostrazioni realizzate con Mathematica 6 e fruibili per mezzo del programma gratuito Mathematica Player.

The Wolfram Integrator (precedentemente noto come 'The Mathematica Integrator') è un sito web in cui la tecnologia di Mathematica viene messa a disposizione dei navigatori che vogliano calcolare integrali in forma simbolica. Si immette la funzione da integrare con la notazione di Mathematica e la si sottopone a un kernel remoto per la valutazione.

Sulla Online Encyclopedia of Integer Sequences , Mathematica e Maple sono i due Computer Algebra System più usati per i quali sono forniti comandi per calcolare sequenze.

LiveGraphics3D è un'applet scritta in Java 1.1 che permette di inserire grafici interattivi all'interno di una pagina Web. I grafici, rappresentati con la sintassi di Mathematica, sono interpretati dall'applet Java e visualizzati in una finestra interattiva sulla pagina Web. L'utente può così ruotare a piacere le figure nello spazio 3D, attivare o fermare animazioni, e addirittura modificare determinati parametri della rappresentazione, spostando elementi predefiniti. L'applet non richiede la presenza di Mathematica sul sistema che produce o legge le pagine e può essere utilizzata gratuitamente per scopi personali (l'uso commerciale richiede invece una licenza da parte di Wolfram Research Inc.).

Versioni

Sono state pubblicate le seguenti versioni [3] :

  • Mathematica 1.0 (1988) [4]
  • Mathematica 1.2 (1989) [5]
  • Mathematica 2.0 (1991) [6]
  • Mathematica 2.1 (1992) [7]
  • Mathematica 2.2 (1993) [8]
  • Mathematica 3.0 (1996) [9]
  • Mathematica 4.0 (1999) [10]
  • Mathematica 4.1 (2000)
  • Mathematica 4.2 (2002) [11]
  • Mathematica 5.0 (2003) [12]
  • Mathematica 5.1 (2004) [13]
  • Mathematica 5.2 (2005) [14]
  • Mathematica 6.0 (2007) [15]
  • Mathematica 6.0.1 (2007)
  • Mathematica 6.0.2 (2008)
  • Mathematica 6.0.3 (2008)
  • Mathematica 7.0 (2008) [16]
  • Mathematica 7.0.1 (2009)
  • Mathematica 8.0 (2010) [17]
  • Mathematica 8.0.1 (2011)
  • Mathematica 9.0 (2012) [18]
  • Mathematica 10.0 (2014)
  • Mathematica 10.0.1 (2014)
  • Mathematica 10.0.2 (2014)
  • Mathematica 10.1 (2015)
  • Mathematica 10.2 (2015)
  • Mathematica 10.3 (2015)
  • Mathematica 10.3.1 (2015)
  • Mathematica 10.4 (2016)
  • Mathematica 10.4.1 (2016)
  • Mathematica 11.0 (2016)
  • Mathematica 11.0.1 (2016)
  • Mathematica 11.1 (2017)
  • Mathematica 11.1.1 (2017)
  • Mathematica 11.2 (2017)
  • Mathematica 11.3 (2018)
  • Mathematica 12 (2019)
  • Mathematica 12.1 (2020) [19]
  • Mathematica 12.2 (2020)
  • Mathematica 12.3 (2021)


Note

  1. ^ a b c d ( EN ) System Requirements , su wolfram.com . URL consultato l'8 settembre 2018 .
  2. ^ Costo delle licenze di Mathematica sul sito Wolfram.com
  3. ^ ( EN ) Mathematica Latest Version and Quick Revision History , su www.wolfram.com . URL consultato l'8 luglio 2021 .
  4. ^ Supercomputer Pictures Solve the Once Insoluble , John Markoff, October 30, 1988.
  5. ^ Mathematica 1.2 adds new graphics options: upgrade also promises concurrent operations by Elinor Craig, MacWee k, July 25, 1989.
  6. ^ Mathematica + 283 functions = Mathematica 2.0 by Raines Cohen, MacWeek , January 15, 1991.
  7. ^ New Mathematica: faster, leaner, linkable and QuickTime-compatible: MathLink kit allows ties to other apps. (Wolfram Research Inc. ships Mathematica 2.1, new QuickTime-compatible version of Mathematica software) by Daniel Todd, MacWeek, June 15, 1992.
  8. ^ New version of Mathematica Archiviato il 23 ottobre 2012 in Internet Archive ., Mechanical Engineering , June 1, 1993.
  9. ^ New Mathematica by Stephen H. Wildstrom, BusinessWeek , June 15, 1997.
  10. ^ Mathematica 4.0 ( JPG ), in MCmicrocomputer , n. 199, Roma, Pluricom, ottobre 1999, pp. 172-175, ISSN 1123-2714 ( WC · ACNP ) .
  11. ^ Mathematica 4.2: Feature-Rich Math Program Integrates with the Web, Adds Full Java Support Archiviato il 21 novembre 2007 in Internet Archive . by Charles Seiter, Macworld , November 1, 2002.
  12. ^ Mathematica 5.0 Adds Up: Exactly 15 years after Mathematica's initial release, Wolfram Research has released Mathematica , PC Magazine , September 3, 2003.
  13. ^ Mathematica 5.1's Web Services Add Up; Mathematica 5.1 delivers improvements over Version 5.0 that are vastly out of proportion for a .1 upgrade. by Peter Coffee, eWeek , December 6, 2004.
  14. ^ Mathematica hits 64-bit , MacWorld UK, July 13, 2005.
  15. ^ Mathematica 6: Felix Grant finds that version 6 of Wolfram Research's symbolic mathematical software really does live up to its expectations. Scientific Computing, 2007.
  16. ^ Mathematica 7: Released Wolfram Blog, 2008.
  17. ^ ( EN ) Mathematica 8!—Wolfram Blog , su blog.wolfram.com . URL consultato l'8 luglio 2021 .
  18. ^ ( EN ) Mathematica 9 Is Released Today!—Wolfram Blog , su blog.wolfram.com . URL consultato l'8 luglio 2021 .
  19. ^ ( EN ) In Less Than a Year, So Much New: Launching Version 12.1 of Wolfram Language & Mathematica—Wolfram Blog , su blog.wolfram.com . URL consultato l'8 luglio 2021 .

Bibliografia

Voci correlate

Altri progetti

Collegamenti esterni

Controllo di autorità LCCN ( EN ) sh93005423 · GND ( DE ) 4268208-3