Pachete matematice disponibile gratuit pentru gnu. Aplicații matematice FFTW și GNU Octave ca test pentru procesoare și PC-uri. Dependența rezultatelor de frecvența memoriei

În consecință, nu am putut acoperi totul - am avut aproximativ 15 minute pentru raport.

Introducere

Pachetele celebre sunt uriași toate intr-unul

Când vorbim despre software de matematică, ne vin în minte giganți precum Maple, Mathematica, MatLAB... Au un lucru în comun: încearcă să acopere totul. Desigur, Mathematica este cunoscută în primul rând ca sistem pentru calcule simbolice, iar Matlab - pentru calcule numerice, dar în același timp, Mathematica are algoritmi puternici pentru calcule în virgulă mobilă, iar Matlab are un pachet pentru calcule simbolice. Mai mult, acestea minor Funcțiile din programe, în comparație cu programele destinate acestui scop, arată patetic și ridicol. Și binecunoscutul MathCAD încearcă să includă totul, dar totul este implementat așa așa. Motivul este simplu: nu poți îmbrățișa imensitatea.

Software-ul liber face un lucru bine

În schimb, majoritatea software-ului liber urmează filozofia UNIX conform căreia un program ar trebui să facă un lucru, dar să îl facă bine. Există o mulțime de programe matematice gratuite, iar cele mai multe dintre ele sunt concepute pentru o singură sarcină. De exemplu, există programe care știu doar să construiască o plasă pentru metoda diferențelor finite. Sau un program care este conceput pentru a calcula cifrele lui Pi. Sau un program care poate construi doar grafice, dar foarte bine.

Cu toate acestea, există și programe care, într-o măsură sau alta, sunt analoge ale pachetelor binecunoscute. Voi vorbi despre trei.

Calcul simbolic: Maxima

Istoricul proiectului

Voi începe cu istoria acestui proiect.

În primul rând, permiteți-mi să vă reamintesc că computerele sunt, de fapt, mașini de calcul electronice, au fost create pentru a calcula cu numere. Cu toate acestea, deja la sfârșitul anilor 50, a apărut ideea că este posibil ca un computer să funcționeze nu numai cu numere, ci și cu expresii algebrice. La începutul anilor '60, au început să apară primele sisteme de algebră computerizată. Și, desigur, un astfel de sistem era nevoie de un departament pașnic american (Departamentul de Energie, care este practic o divizie a Pentagonului). A fost anunțată o licitație și a fost câștigată de un proiect numit Macsyma (ortografiat prin CS). Timp de mulți ani, DOE Macsyma s-a dezvoltat ca un proiect comercial finanțat de guvern. În 1982, William Shelter a creat un furk de Macsyma numit Maxima. La începutul anilor '90, URSS s-a prăbușit, Războiul Rece s-a încheiat și o consecință indirectă a acestui fapt a fost încetarea aproape completă a finanțării DOE Macsyma. Până la sfârșitul anilor 90, proiectul practic a încetat. Codul sursă Macsyma a fost vândut bucată cu bucată și a ajuns în Maple și Mathematica. În 1998, William Shelter a obținut permisiunea de la DOE pentru a publica codul sursă Maxima sub licența GPL. Maxima a devenit software liber. Shelter a murit în 2001, dar până atunci mulți oameni lucrau deja la Maxima și au preluat proiectul.

Interfață: linie de comandă sau wxMaxima

Maxima are o interfață tradițională de linie de comandă UNIX, dar poate asculta și un port de rețea, funcționând ca server. Acest fapt este folosit de diverse shell-uri (frontend) care oferă o interfață grafică. Cele mai comune sunt TeXmacs și wxMaxima. TeXmacs este un editor de text științific în care puteți insera o sesiune Maxima într-un document. wxMaxima arată cam așa:

Cea mai recentă versiune, 0.8.0, a devenit mai mult ca Mathematica și Maple: anterior linia de comandă pentru introducere era separată, în partea de jos.

Limbaj asemănător lispului

Limbajul Maxima preia idei de bază din Lisp, deoarece Maxima este scris în Lisp-e. În același timp, este similar atât cu limbajul Mathematica, cât și cu cel Maple, deoarece aceste programe au împrumutat multe idei și o parte din cod de la Macsyma. Pentru a evita o listă lungă și plictisitoare de posibilități, voi da un exemplu de rezolvare a problemelor tipice de la primul curs.

Să fie dată funcția

maxima>> f(x) := x*tanh(x) + x + 1/x + 2;

Să verificăm dacă este par sau impar:

După cum puteți vedea, funcția nu este nici pară, nici impară. Să găsim limitele funcției la plus sau minus infinit:

maxima>> limit(f(x),x,-inf);

maxima>> limit(f(x),x,inf);

Deci, la plus infinit funcția merge la infinit. Are o asimptotă oblică?

maxima>> limit(f(x)/x, x,inf);

Asimptota oblică este - y=kx+b, și k=2. Sa gasim b:

maxima>> limit(f(x)-2*x, x,inf);

În sfârșit, să construim un grafic:

maxima>> plot2d(f(x), , );

Să găsim derivata funcției noastre:

maxima>> diff(f(x),x);

Și în același timp - integrala nedefinită:

maxima>> integrate(f(x), x);

Integrala nu a funcționat până la sfârșit. Se poate arăta că această integrală nu este luată în funcții elementare. Cu toate acestea, Maxima poate lua unele dintre aceste integrale folosind funcții speciale:

maxima>> part: risch(x/(exp(2*x)+1), x);

maxima>> ir: -2*part + log(x) + x^2 + 2*x;

Ceva groaznic. Să extindem parantezele:

maxima>> expand(ir);

Ecuatii diferentiale

Sau iată un exemplu de calcule mai complexe. Să presupunem că trebuie să rezolvăm o ecuație diferențială:

maxima>> eq: "diff(y,x) + x*y = 1-x^2;

maxima>> solutie: ode2(eq,y,x);

maxima>> expand(solution);

Există o serie de manuale în limba rusă pentru Maxima care pot fi găsite pe Internet. În opinia mea, cea mai reușită introducere cu o privire de ansamblu asupra capacităților este conținută într-o serie de articole de Tikhon Tarnavsky în revista LinuxFormat. Acum aceste articole sunt postate în domeniul public, inclusiv pe site-ul web rusesc Maxima. Din păcate, documentația privind funcțiile avansate ale maxima este disponibilă numai în limba engleză. Documentația oficială este de 712 pagini.

Calcule numerice: Scilab

Scilab este compatibil cu MatLAB

Cel mai faimos pachet pentru calcule numerice este MatLAB. Scilab a fost creat ca un concurent al matlab, cu o politică de prețuri mai modestă. Cu toate acestea, proiectul nu s-a dovedit comercial, iar codul sursă a fost deschis sub o licență similară cu GNU GPL. Limbajul scilab este cât se poate de compatibil cu matlab, astfel încât majoritatea dezvoltărilor dumneavoastră matlab vor funcționa în scilab. Abia acum, după cum știți, puterea principală a matlab este concentrată în cutiile sale de instrumente - module furnizate separat. Există și module pentru scilab, dar sunt mult mai puține.

Octave este echivalentul GPL al Matlab

Ulterior, a apărut proiectul GNU Octave, care vizează crearea unui analog al matlab-a, distribuit fără probleme sub GNU GPL. Limbajul este practic compatibil și cu Matlab, dar nu există un analog al Simulink - un instrument pentru modelarea și simularea sistemelor dinamice.

Însă Octave are o interfață pur de consolă (desigur, există și front-end-uri grafice, cel mai dezvoltat este QtOctave), care îi permite să fie folosit în scripturi, pentru automatizarea calculelor și simplifică integrarea în sisteme software complexe. Pentru Octave au fost scrise zeci de pachete de extensii.

Există articole despre Scilab în limba rusă, în plus, nu cu mult timp în urmă, editura AltLinux a publicat cartea „Scilab: Solving Engineering and Mathematical Problems”. Cartea poate fi achiziționată în magazinul online, în plus, versiunea sa electronică este gratuită disponibil pe site-ul AltLinux.

Prelucrarea datelor: GNU R

Formal, instrumentele de prelucrare a datelor aparțin programelor de calcule numerice, deoarece nu fac decât calcule pe numere. Cu toate acestea, după cum știți, un instrument specializat este întotdeauna mai bun decât unul universal. Sub cuvinte procesarea datelor Sunt ascunse destul de multe tipuri diferite de activități: analiza statistică, modelarea statistică, eșantionarea doar a datelor necesare, transformarea datelor, construirea diferitelor grafice și histograme.

Programele de procesare a datelor pot fi clasificate în funcție de dimensiunea tipică a eșantionului pentru care sunt concepute. Pentru eșantioane mici, de exemplu, Statistica este potrivită. Pentru mostrele de dimensiuni medii, GNU R este bine potrivit (stochează toate datele în RAM, deci pe un PC obișnuit obținem o limită de 1-2-4 gigaocteți). Pentru volume mari și foarte mari de date (de la sute de gigabytes la sute de terabytes), sunt destinate sistemele gratuite PAW și ROOT dezvoltate la CERN.

GNU R este un limbaj de programare interpretat conceput pentru analiză și modelare statistică. R este o implementare gratuită a limbajului S. Acest limbaj este foarte eclectic, este în unele locuri similar cu C, în altele - ca Python, în altele - ca Haskell. Pentru GNU R, există aproape o mie și jumătate de pachete de extensii (scrise în R însuși, în C sau Fortran), colectate în depozitul CRAN (Comprehensive R Archive Network).

Tipuri de date - numere, șiruri, factori, vectori, liste și tabele de date

Principalele tipuri de date din limbaj sunt numerele, șirurile de caractere, factorii, vectorii, listele și cadrele de date. Un factor este datele care pot lua una dintre mai multe valori (sex, tip de lemn, tip logic etc.). Vectorii sunt analogi de matrice - sunt un set de mai multe valori de același tip, dimensiunea vectorului nu se poate modifica. De asemenea, trebuie remarcat că în R nu există scalari; de exemplu, un număr este, din punctul de vedere al lui R, un vector al unui element. Listele sunt o generalizare a vectorilor pot conține obiecte de diferite tipuri, iar lungimea lor poate varia. În plus, puteți atribui nume elementelor individuale ale listei și puteți face referire la elemente nu prin numere, ci prin nume. Exemplu:

(atribuirea în R este de obicei notă cu semnul , deși puteți folosi cele mai familiare = ; în plus, există o formă valoare → variabilă). Pentru a face referire la elementele listei după număr, se folosesc paranteze pătrate duble:

Să atribuim nume elementelor listei:

(funcţie c creează vectori). Acum puteți accesa elementele listei după nume:

Un tabel de date (cadru de date) în R este o listă formată din vectori. Tabelele de date sunt create cel mai adesea prin încărcare dintr-un fișier extern.

Acest articol este al doilea dintr-o serie dedicată diverselor aplicații reale care pot fi utilizate pentru testarea procesoarelor, computerelor, laptopurilor și stațiilor de lucru și care vor sta mai târziu la baza noului pachet de testare iXBT Application Benchmark 2017. Să reamintim că în primul În articolul din această serie am luat în considerare două aplicații specializate LAMMPS și NAMD, care sunt utilizate pentru rezolvarea problemelor de dinamică moleculară. În acest articol ne vom concentra pe pachetele matematice specializate FFTW și GNU Octave. Aceste aplicații, cum ar fi LAMMPS și NAMD, fac parte din binecunoscuta suită de teste specializate SPECwpc 2.0. Mai mult, am împrumutat sarcinile de calcul în sine (sarcina de lucru) și comenzile pentru lansarea programelor cu parametrii corespunzători din pachetul SPECwpc 2.0.

FFTW 3.3.5

Mediul GNU Octave acceptă lucrul cu fișiere script (), iar pentru a rula un script se folosește comanda:

octave-cli-4.0.3.exe

(Fișierul octave-cli-4.0.3.exe se află în folderul C:\Octave\Octave-4.0.3\bin\ când instalați pachetul în mod implicit.)

Pentru testare, folosim un fișier script care implementează operații cu bucle, calcul de integrale, transformată Fourier rapidă și operații cu matrice. Nu am scris acest script de la zero, ci l-am luat din pachetul SPECwpc 2.0, care include un test bazat pe GNU Octave. Acest script se numește obench.m. Rezultatul testului este timpul de execuție a scriptului.

Stand de testare și metodologia de testare

Pentru testarea utilizând aplicațiile FFTW și GNU Octave, am asamblat un banc cu următoarea configurație:

  • Procesor: Intel Core i7-6950X (Broadwell-E);
  • Placa de baza: Asus Rampage V Edition 10 (Intel X99);
  • Memorie: 4x4 GB DDR4-2400 (Kingston HyperX Predator HX424C12PBK4/16);
  • Placa video: Nvidia Quadro 600;
  • Stocare: SSD Seagate ST480FN0021 (480 GB).

În timpul testării, a fost măsurat timpul necesar pentru finalizarea sarcinilor de testare.

S-a luat în considerare dependența rezultatelor testelor de numărul de nuclee de procesor utilizate, de frecvența nucleelor ​​de procesor și de frecvența memoriei.

Dependența rezultatelor de numărul de nuclee de procesor

Numărul de nuclee ale procesorului Intel Core i7-6950X utilizat în timpul testării a fost reglementat prin setările UEFI BIOS ale plăcii Asus Rampage V Edition 10 Să ne amintim că procesorul Intel Core i7-6950X este de 10 nuclee, dar acceptă Hyper. -Tehnologia Threading, astfel încât sistemul de operare și aplicațiile pe care le este văzut ca 20 de nuclee (are 20 de nuclee logice).

Nu am dezactivat tehnologia Hyper-Threading și am schimbat doar numărul de nuclee de procesor fizic de la 1 la 10. În viitor, vom vorbi despre nuclee de procesor logic, al căror număr s-a schimbat de la 2 la 20 în trepte de 2.

Frecvența de operare a tuturor nucleelor ​​de procesor a fost fixată la 4,0 GHz.

După cum puteți vedea, rezultatele s-au dovedit a fi foarte ciudate. Interpretarea rezultatelor pentru pachetul GNU Octave este destul de simplă. În acest pachet, viteza de finalizare a unei sarcini de testare este practic independentă de numărul de nuclee de procesor, adică în versiunea de procesor Intel Core i7-6950X, chiar și două nuclee logice sunt suficiente pentru a finaliza sarcina de testare. Pe măsură ce numărul de nuclee de procesor disponibile crește, sarcina este paralelizată, dar cota de încărcare a fiecărui nucleu scade proporțional cu numărul lor. Ca urmare, viteza de execuție a sarcinii de testare nu se modifică pe măsură ce crește numărul de nuclee de procesor.

Dar cu aplicația FFTW totul este foarte ciudat și ilogic. Cu 6, 12 și 14 nuclee (logic), timpul de execuție a sarcinii de testare devine anormal de lung. În alte cazuri, timpul de execuție a sarcinii de testare este aproximativ același. Rezultatul este destul de ciudat, dar a fost reverificat de multe ori.

Dacă vă uitați la sarcina procesorului în timpul executării testului, situația este următoarea. În primul rând, sarcina este paralelizată pe toate nucleele procesorului. În al doilea rând, în anumite perioade de timp sarcina pe nucleele procesorului este scăzută, iar alteori este mare. Mai mult, acest comportament este observat pentru orice număr de nuclee. Și de ce, la un anumit număr de nuclee de procesor, timpul de execuție a testului devine anormal de mare este neclar.

Am efectuat cercetări suplimentare asupra acestui comportament ciudat al testului. Pentru a face acest lucru, am dezactivat tehnologia Hyper-Threading pe procesor și am testat repetat în aplicația FFTW, schimbând numărul de nuclee de procesor fizic de la 1 la 10. Rezultatele testului sunt următoarele:

Cu tehnologia Hyper-Threading dezactivată, rezultatul a fost și mai ilogic. Cu 3, 5, 6, 7 și 9 nuclee, timpul de execuție a testului a fost mare, iar cu 1, 2, 4, 8 și 10 nuclee a fost scurt. Adică, se dovedește că eficiența paralelizării unei sarcini depinde de numărul de nuclee de procesor, dar deloc în sensul că un număr mai mare de nuclee îmbunătățește rezultatul. Cu un anumit număr de nuclee, sarcina este bine paralelizată, dar cu un anumit număr, este slab paralelizată.

Cu toate acestea, încă mai aveam îndoieli cu privire la corectitudinea concluziilor noastre, deoarece în acest caz nu vorbeam despre un adevărat procesor cu două, patru, șase și așa mai departe, ci despre blocarea artificială a nucleelor ​​prin BIOS-ul plăcii de bază. Am decis să repetăm ​​testul cu un alt procesor - un Intel Core i7-5820K cu șase nuclee (12 nuclee logice inclusiv Hyper-Threading). După cum am văzut, cu 6 nuclee de procesor fizice sau 12 logice, timpul de execuție a testului devine anormal de mare. Și acest rezultat a fost confirmat pe procesorul Intel Core i7-5820K. Procesorul a funcționat la 3,6 GHz. Cu toate nucleele cu tehnologia Hyper-Threading activate (12 nuclee), timpul de execuție a sarcinii de testare este anormal de lung: 1886 s. Dacă opriți nucleele succesiv, atunci cu 10, 8, 4 și 2 nuclee timpul de execuție a testului este de 200-400 s, iar cu 6 nuclee - 1235 s.

După cum puteți vedea, același rezultat ciudat se obține pe procesorul Intel Core i7-5820K ca și pe procesorul Intel Core i7-6950X.

În ciuda acestei dependențe ciudate a rezultatelor testului FFTW de numărul de nuclee de procesor, am decis să o lăsăm în pachetul de aplicații care vor fi folosite în iXBT Application Benchmark 2017. Această aplicație demonstrează clar că multe nuclee nu sunt întotdeauna bune. Uneori se întâmplă altfel.

Poate că în versiunea finală vom reduce dimensiunea transformării Fourier în sine pentru a exclude cazurile în care un astfel de test durează mai mult de 30 de minute.

Dependența rezultatelor de frecvența procesorului

Acum să ne uităm la modul în care rezultatele testării în aplicațiile FFTW și GNU Octave depind de frecvența procesorului.

Frecvența de bază a procesorului Intel Core i7-6950X a fost modificată în setările UEFI BIOS ale plăcii Asus Rampage V Edition 10 prin modificarea factorului de multiplicare. Frecvența de funcționare a tuturor nucleelor ​​a fost fixă ​​(adică modul Turbo Boost a fost dezactivat). Au fost folosite toate nucleele de procesor (10 fizice/20 logice). Frecvența a variat de la 3,0 GHz la 4,2 GHz în pași de 200 MHz. Rezultatele testului sunt după cum urmează:

După cum se poate observa din rezultatele testelor, atât în ​​pachetul FFTW, cât și în pachetul GNU Octave, timpul de execuție a testului depinde de frecvența procesorului. În pachetul FFTW, când frecvența procesorului crește de la 3 la 4,2 GHz (creștere cu 40%), timpul de execuție a testului scade cu 21%. În pachetul GNU Octave, o creștere similară a frecvenței procesorului duce la o reducere cu 24% a timpului de execuție pentru sarcinile de testare.

Astfel, dependența rezultatelor testelor FFTW și GNU Octave de frecvența procesorului este destul de tipică. Sarcina de testare din pachetul GNU Octave se scalează puțin mai bine cu frecvența procesorului, iar sarcina din pachetul FFTW se scalează puțin mai rău.

Dependența rezultatelor de frecvența memoriei

Acum să ne uităm la dependența vitezei de execuție a sarcinilor de testare de frecvența de funcționare a memoriei. Memoria DDR4 a funcționat în modul cu patru canale (un modul pe canal), iar frecvența memoriei a fost modificată în setările UEFI BIOS în intervalul de la 1600 MHz la 2800 MHz în pași de 200 MHz. Timpurile memoriei au fost fixate și nu s-au schimbat când s-a schimbat frecvența. Toate nucleele de procesor rulau la 4,0 GHz.

Rezultatele testului sunt după cum urmează:

După cum putem vedea, viteza de execuție a sarcinilor de testare în pachetele GNU Octave și FFTW nu depinde în niciun fel de frecvența de operare a memoriei. Cel puțin în modul de operare cu patru canale, lățimea de bandă a memoriei DDR4 este destul de suficientă chiar și la o frecvență de 1600 MHz, iar creșterea în continuare a frecvenței de memorie nu permite accelerarea execuției sarcinilor de testare.

Acesta este un rezultat tipic pentru majoritatea aplicațiilor. Aplicațiile a căror viteză de funcționare depinde de frecvența memoriei sunt mai degrabă o excepție de la regulă.

Concluzie

Așadar, în al doilea articol din noua noastră serie, ne-am uitat la două teste bazate pe aplicații matematice specializate FFTW și GNU Octave. Folosind exemplul unui procesor Intel Core i7-6950X cu 10 nuclee, s-a demonstrat că sarcinile de testare din aceste pachete sunt paralelizate pe toate nucleele de procesor, dar nu le pot încărca 100%. Rezultatul testului în aplicația GNU Octave practic nu depinde de numărul de nuclee de procesor, iar rezultatul testului în aplicația FFTW, dimpotrivă, depinde puternic de numărul de nuclee de procesor, dar această dependență este foarte ciudată. La un anumit număr de nuclee (14, 12 și 6), timpul de execuție al sarcinii de testare devine anormal de mare, iar în toate celelalte cazuri timpul de execuție a sarcinii de testare depinde doar puțin de numărul de nuclee.

În plus, s-a demonstrat că viteza de execuție a sarcinilor de testare în pachetele FFTW și GNU Octave depinde liniar de frecvența nucleelor ​​procesorului (când frecvența se modifică în intervalul de la 3 la 4,2 GHz).

În final, s-a demonstrat că timpul de execuție a sarcinilor de testare în aplicațiile FFTW și GNU Octave nu depinde în niciun fel de frecvența memoriei DDR4 (în modul quad-channel și în intervalul de la 1600 la 2400 MHz).

Mai există o notă care poate fi făcută cu privire la aplicațiile FFTW și GNU Octave atunci când le folosiți pentru testare. Pachetul GNU Octave are o repetabilitate slabă și este recomandabil să faceți cinci rulări ale testului pentru a obține un rezultat cu eroare scăzută. Aplicația FFTW oferă rezultate mai consistente, dar această aplicație necesită și cel puțin trei rulări de testare.

În următorul articol din această serie, ne vom uita la trei aplicații care sunt utilizate pentru redarea scenelor 3D: POV-Ray 3.7, LuxRender 1.6 și Blender 2.77a.

  • Tutorial

# wget https://dl.fedoraproject.org/pub/epel/7/x86_64/ # yum localinstall epel-release-6-7.noarch.rpm

Și numai după aceea yum install octave va funcționa.
În cele din urmă, totul este gata și programul este instalat.


# octave GNU Octave, versiunea 3.8.2 Copyright (C) 2014 John W. Eaton și alții. Acesta este software gratuit; consultați codul sursă pentru condițiile de copiere. NU EXISTĂ ABSOLUT NU EXISTĂ GARANȚIE; nici măcar pentru VANTABILITATE sau ADEPTEREA PENTRU UN ANUMIT SCOP. Pentru detalii, tastați „garanție”. Octave a fost configurată pentru „x86_64-redhat-linux-gnu”. Informații suplimentare despre Octave sunt disponibile la http://www.octave.org. Vă rugăm să contribuiți dacă găsiți acest software util. Pentru mai multe informații, vizitați http://www.octave.org/get-involved.html Citiți http://www.octave.org/bugs.html pentru a afla cum să trimiteți rapoarte de eroare. Pentru informații despre modificările din versiunile anterioare, tastați „știri”. octava:1>

Operații cu matrice

Să nu pierdem timpul și să facem operații care pot fi repetate folosind bc și awk, despre care s-a discutat data trecută. Să ne jucăm puțin cu matricele.


Mai întâi o transpunere simplă a matricei:


octava:1> A= A = 1 3 5 2 4 6 octava:2> A" ans = 1 2 3 4 5 6

Să încercăm să rezolvăm un sistem de ecuații liniare:


x + y + z = 9 2x + 4y - 3z = 1 3x + 6y - 5z = 0

Conducem în matrice A, vector bși rezolvați ecuația Ax = b sub formă de matrice


octava:1> A= A = 1 1 1 2 4 -3 3 6 -5 octava:2> b= b = 9 1 0 octava:3> x=A\b x = 7.00000 -1.00000 3.00000

Găsim determinantul și valorile proprii ale matricei.


octava:4> det (A) ans = -1,00000 octave:5> eig (A) ans = -2,88897 2,76372 0,12525

Numerele complexe sunt, de asemenea, acceptate în calcule.


octava:6> A=[-3 0 2; 1 -1 0; -2 -1 0] A = -3 0 2 1 -1 0 -2 -1 0 octava:7> x=det (A) x = -6 octava:8> y=eig(A) y = -1.00000 + 1,41421i -1,00000 - 1,41421i -2,00000 + 0,00000i

Funcții și variabile

În Octave, variabilele și funcțiile sunt mult mai ușor de creat decât, de exemplu, în Java sau C. Folosind matrice ca exemplu, am văzut deja cum să declarăm variabile. Crearea unei noi funcții are următoarea sintaxă


function = function_name (arg1, arg2, ..., argN) function body endfunction
De regulă, o nouă funcție este creată fie într-un fișier separat, fie într-un fișier script Octave
înainte de primul ei apel. Dacă intenționați să utilizați o funcție personalizată în diferite fișiere script, atunci, desigur, este de preferat să o creați într-un fișier separat. În GNU Octave, fișierele de funcție au extensia .m și sunt încărcate automat. Numele fișierului trebuie să se potrivească strict cu numele funcției.

Să scriem o funcție pentru a rezolva ecuația pătratică ax² + bx + c = 0


octave:9> function = quadr(a, b, c) > D = sqrt(b^2-4*a*c); > x1 = (-b-D)/(2*a); > x2 = (-b+D)/(2*a); > octava funcției finale:10> =quadr(a, b, c) y1 = 2 y2 = 3

GUI

De fapt, aici vorbim despre matematica din linia de comandă, dar nu este încă clar cum să afișați graficul funcției pe ecran. Cu toate acestea, nu există niciun secret aici - Gnuplot este folosit în aceste scopuri. Puteți descrie Lorentz Attractor instalând pachetul suplimentar odepkg.


function = froessler (vt, vx) vyd = [- (vx(2) + vx(3));


vx(1) + 0,2 * vx(2);

0,2 + vx(1) * vx(3) - 5,7 * vx(3)];

endfunction A = odeset("MaxStep", 1e-1);


= ode78 (@froessler, , , A); subplot(2, 2, 1); grid("pe"); grafic (t, y(:,1), "-b;f_x(t);", t, y(:,2), "-g;f_y(t);", \ t, y(:,3 ), "-r;f_z(t);"); subplot(2, 2, 2); grid("pe"); grafic (y(:,1), y(:,2), "-b;f_(xyz)(x, y);");

subplot(2, 2, 3); grid("pe");

grafic (y(:,2), y(:,3), "-b;f_(xyz)(y, z);"); subplot(2, 2, 4); grid("pe");

Orice știință, de la fizică la filologie, folosește realizările matematicii. În acest sens, specialiștii non-matematici au nevoie de instrumente care să le permită să pună probleme sub formă matematică și să obțină soluții sub formă de formule sau un set de valori, adică au nevoie de sisteme de matematică computerizată care să-și asume munca de rezolvare. probleme matematice folosind diverse metode.

Din păcate, în țara noastră astfel de programe sunt frecvente într-o zonă destul de restrânsă a activității științifice și nu în ultimul rând acest lucru se datorează faptului că școlarii și elevii nu sunt introduși în pachete profesionale de matematică, costul unei singure licențe pentru care se ridică adesea la mii și zeci de mii de ruble.

Vă invităm să aruncați o privire în lumea pachetelor matematice gratuite care pot fi descărcate gratuit de pe Internet, utilizate pentru orice tip de cercetare (uneori cu rezerve) și, de asemenea, datorită disponibilității textelor sursă, să le studiați intern. structura și, dacă doriți, extindeți funcționalitatea acestora cu propriile forțe.

Calcule simbolice

Sistemele de matematică computerizată (CM) au fost dezvoltate de mult timp și Maxima() a fost unul dintre primii. Inițial a fost un produs comercial, dar, neputând să reziste concurenței, sistemul a devenit gratuit.

Coajă wxMaximași un element de meniu care vă permite să afișați sau să ascundeți panourile de operații matematice de pe ecran.

Avantajul principal Maximaînaintea altor sisteme libere este suportul pentru calcul simbolic. Adică, introducând o expresie sau o ecuație analitică, puteți obține și rezultatul sub formă analitică.

Maxima vă permite să rezolvați ecuații algebrice, sisteme de ecuații, să efectuați operații de integrare, diferențiere, extindere în serie și așa mai departe. În plus, ea poate rezolva ecuații diferențiale, probleme cu valori la limită, probleme Cauchy, poate efectua calcule algebrice cu matrici, poate construi grafice și suprafețe definite de diferite funcții în sistemele de coordonate carteziene și polare. Este dificil să enumerați toate posibilitățile.

Pentru SCM Maxima Au fost dezvoltate mai multe shell-uri, dintre care cel mai convenabil (pentru un utilizator începător) este wxMaxima(vezi fig. 1). Începând cu versiunea 0.8.0, se schimbă rapid în bine. Cea mai recentă versiune (0.8.3) conține caracteristici ale unor pachete comerciale cunoscute precum arțarȘi MathCAD. Lucrul în acest shell este destul de simplu și vă permite să obțineți rezultate acceptabile după doar câteva minute de utilizare. Multe operațiuni, ale căror nume sunt prezente în meniu și pe barele de instrumente, sunt echipate cu vrăjitori convenabile care vă permit să rezolvați probleme chiar și fără a cunoaște limbajul și comenzile încorporate. Maxima. Ei bine, încă un fapt important - toate carcasele pentru acest SCM sunt rusificate. De asemenea, privind pachetul gratuit Maxima, studenții se vor putea obișnui mai ușor cu pachetele comerciale, ceea ce se datorează atât asemănării relative a interfeței, cât și sintaxei utilizate (în special pentru MaximaȘi arțar).

Sistemul este bine documentat, dar materialul de referință este prezentat doar în limba engleză. Revista noastră a publicat materiale educaționale despre munca la CSM Maxima(LXF81–86). Fiind o aplicație de consolă, Maxima poate funcționa în modul lot, adică îi puteți trimite un fișier text cu o listă de comenzi pentru procesare și, din nou, puteți primi un fișier text cu rezultatele, iar dacă considerați că rezultatul poate fi formatat folosind sistemul de marcare TeX, atunci acest lucru vă permite să îl utilizați ca bază pentru construirea propriilor aplicații. Un exemplu de astfel de dezvoltare este extinderea TeXmacs.

Pe baza experienței de învățare existente, putem spune că studenții din anii juniori stăpânesc în muncă Maxima suficient de repede și începeți să îl utilizați atunci când finalizați sarcinile la alte materii. Dar cu fiecare curs au tot mai multe probleme.

Cert este că, alături de un număr mare de aspecte pozitive, Maxima sunt si negative. În primul rând, rezultatul final, mai ales atunci când rezolvați probleme complexe, depinde în mare măsură de nivelul de cunoștințe de matematică și de experiența în utilizarea unui anumit SCM, deoarece uneori trebuie să efectuați singur transformări preliminare. În al doilea rând, Maxima funcționează foarte bine cu expresii algebrice, dar are dificultăți semnificative cu expresii transcendentale, logaritmice și similare. Cu toate acestea, dacă este imposibil să obțineți o soluție analitică, atunci puteți utiliza întotdeauna calcule numerice. În al treilea rând, oportunități Maxima pentru construirea de grafice complexe sau de vizualizare, de exemplu, un câmp vectorial, nu poate fi comparat cu capabilitățile arțar. Și, în cele din urmă, în al patrulea rând, pentru o funcționare adecvată este necesar să se studieze numeroase comenzi și constante Maxima, iar asta necesită timp și răbdare.

SCM Maxima incluse în multe distribuții Linux, sau cel puțin necesar să fie prezente în depozite. Este inclus în produse educaționale precum AltLinux School, Edubuntu și EduMandriva.

Fereastră SMath Studio, în care funcția este definită, derivata ei este calculată și este trasat un grafic.

Trebuie remarcat faptul că inginerii sunt încă obișnuiți să lucreze cu o aplicație de calculator atât de puternică ca MathCAD. Acesta este un sistem de calcul ingineresc disponibil pentru orice platformă (vezi Pachete comerciale), dar cu un cost serios. Cu toate acestea, angajatorii cer ca absolvenții să poată lucra în acest sistem. Ce ar trebui să facă instituțiile de învățământ?

La noi s-a născut un proiect de salvare: SMath Studio(http://ru.smath.info/forum/). Acesta este un produs gratuit, dar, din păcate, încă nu gratuit, al cărui dezvoltator, Andrey Ivashov, încearcă să creeze o alternativă la monstru. MathCAD, și reușește (vezi Fig. 2). Aplicația este concepută pentru mediu .NET, și apoi adaptat pentru Mono.

SMath Studio vă permite să efectuați calcule analitice, operații cu matrice, grafice și calcule derivate și chiar acceptă funcții de programare. Din păcate, integrarea analitică nu este încă suportată, dar produsul se dezvoltă cu succes, iar în toamna anului 2009 autorul finalizează dezvoltarea unei infrastructuri care va permite utilizarea plug-in-urilor de la terți. Poate că atunci dezvoltarea aplicației va atinge un nou nivel și vom obține o alternativă cu drepturi depline MathCAD.

De remarcat, de asemenea, că în primăvara anului 2009, prin acord cu autorul, produsul a fost inclus în distribuția educațională EduMandriva. În ciuda funcționalității sale limitate, această aplicație vă permite să efectuați calcule de zi cu zi la nivel de școlari și elevi, precum și calcule simple de inginerie. Și dacă te gândești la asta SMath Studio se simte grozav pe computerele de buzunar și smartphone-urile controlate de Windows Mobile, așa că este o necesitate pentru școlari și elevi să-l cunoască.

Site-ul oficial conține întotdeauna documentație în formatele DOC și ODT, iar pe forumul oficial puteți adresa întrebări dezvoltatorului sau comunității și discuta despre algoritmii folosiți în dezvoltarea aplicației.

Fereastră wxMaxima cu rezultatele calculelor simbolice şi graficul funcţiei

Pentru a încheia această secțiune, aș dori să atrag atenția asupra faptului că pachetele de matematică simbolică produc ca rezultat o expresie, nu un număr. Luați în considerare exemplul prezentat în fig. 3, în care se definește o funcție personalizată și se găsește derivata a doua pentru aceasta; atunci funcția este integrată. În același timp, a fost creat un program. Astfel, școlarii și elevii pot efectua vizual o analiză completă a funcției. Și asta nu este tot: Maximaștie să simplifice expresii deschizând paranteze, aducând termeni similari, efectuând substituții și precizând anumite condiții și ipoteze impuse expresiei. Adăugați la aceasta capacitatea de a rezolva în mod simbolic ecuații și sisteme de ecuații, precum și ecuații diferențiale și veți înțelege că un elev modern nu se poate descurca fără aceste instrumente, iar profesorii de științe pot anima lecțiile și exercițiile practice prin introducerea de sarcini interactive sau material demonstrativ. .

Calcule numerice

După cum știți, nu orice problemă poate fi rezolvată analitic, adică o soluție poate fi obținută sub forma unei anumite formule. Apoi diverse metode numerice vin în ajutor pentru a obține o soluție cu o oarecare acuratețe. Cel mai cunoscut reprezentant al aplicațiilor pentru calcule numerice este sistemul de algebră computerizată (CAS) Matlab.

Matlab răspândită în întreaga lume (a se vedea comparația în LXF109), dar costul chiar și al licențelor educaționale depășește mijloacele nu numai ale școlilor, ci și ale multor universități rusești. În străinătate, ei preferă, de asemenea, să numere bani - și să investească resurse umane în dezvoltarea analogilor gratuiti Matlab. Să ne uităm la unele dintre ele.

În primul rând, după părerea mea, merită să ne concentrăm pe proiect GNU Ostave(http://www.gnu.org/software/octave/). Dezvoltatorii poziționează acest sistem ca „un limbaj de programare la nivel înalt pentru calcule numerice”. La fel ca multe proiecte *nix gratuite de lungă durată, oferă o interfață de linie de comandă. Intră în terminal octavă– și (dacă, desigur GNU Octave instalat pe computer), o solicitare pentru acest sistem va apărea în fața dvs. Începeți să tastați comenzi și terminalul va afișa rezultatele calculelor.

Interfața liniei de comandă are avantajele sale, deoarece practic nu ocupă resursele de calcul ale computerului, lăsând toată puterea procesorului pentru calculele în sine și nu pentru afișarea frumoasă a textului de comandă și a rezultatelor calculelor. Și totuși, utilizatorul modern este rareori dispus să suporte asta.

. Coajă qtOctave cu calculele efectuate.

Pentru o lungă perioadă de timp GNU Octave nu a avut o interfață grafică până când a apărut în sfârșit qtOctave(vezi fig. 4). Acest shell este foarte asemănător cu interfața Matlabși vă permite să automatizați execuția unor operațiuni de rutină (de exemplu, trasarea) folosind vrăjitori.

Limba sistemului este făcută cât mai asemănătoare cu limba Matlab; prin urmare, o persoană care a stăpânit GNU Octave, va putea lucra practic fără a se recalifica în Matlab, și exact de asta au nevoie angajatorii. În plus, pasionații mișcării software liber au creat un număr suficient de pachete de extensie pentru sistem. Datorită acestui fapt, funcționalitatea SKA în sine crește constant. Ei bine, prezența unei documentații cuprinzătoare (deși în limba engleză) atât pentru sistem, cât și pentru pachetele de extensie face ca acest produs nu numai să fie profitabil, ci și accesibil pentru studiu.

Dezavantajele includ interfața shell nu foarte ușor de utilizat qtOctave, mai ales că versiunea nu a fost actualizată din toamna lui 2008 (se pare că proiectul a fost abandonat). Pachetele de extensie nu sunt bogate în funcții și nu strălucesc cu capabilități grafice; în plus, nu sunt echivalente, întrucât situația este de așa natură încât un proiect a fost dezvoltat de un student din primul an, iar al doilea, de exemplu, de către o echipă de profesori universitari. Dar acesta este un proiect complet gratuit, cu care nu trebuie să vă faceți griji cu privire la puritatea licențierii soluțiilor rezultate.

Următorul pachet pe care aș dori să-l iau în considerare se numește Scilab(http://www.scilab.org), chiar al cărui nume indică asemănarea cu Matlab. Inițial a fost și un produs comercial și s-a numit Blaise, și apoi Basile. Creatorii săi s-au inspirat din primele versiuni Matlab, și au concurat de ceva timp. Cu toate acestea, la începutul anilor 90, Simulog a încetat să-l vândă, iar apoi șase dezvoltatori ai Institutului Național de Cercetare Franceză (INRIA) au fondat proiectul Scilab.

Scilab se remarcă de colegii săi prin interfața bine dezvoltată, prezența unui număr destul de mare de pachete de extensie specializate și faptul că este susținut de Consorțiu Scilab, care include instituții de învățământ și științifice importante din întreaga lume.

Interfață Scilab 5

Scilab- singurul sistem gratuit similar Matlab, care are propriul instrument de modelare a blocurilor numit Scicos. Distribuția produsului include un script încorporat și un editor de funcții cu capabilități de depanare. Scilab are capabilități grafice avansate pentru crearea de aplicații de înaltă tehnologie. Vă puteți familiariza cu funcționalitatea sistemului uitându-vă la demonstrații - unele dintre ele sunt destul de impresionante (selectați elementele de meniu ? > Demonstrarea capacităților).

Scilab conține funcții nu numai pentru efectuarea de tot felul de operații pe matrice, ci și pentru construirea de grafice și suprafețe tridimensionale în diverse sisteme de coordonate, funcții pentru lucrul cu algoritmi genetici, rezolvarea problemelor pe grafice, funcții statistice, instrumente de simulare și multe altele. Anual sunt organizate mai multe conferințe dedicate utilizării SKA Scilabîn știință, educație și producție.

În întreaga lume au fost publicate mai multe cărți care descriu munca în Scilab, precum și rezolvarea unui număr de probleme de specialitate. Din păcate, niciuna dintre ele nu a fost tradusă în rusă. Doar două cărți au fost publicate în Rusia, una ca parte a unui proiect național și a doua Scilab descrise împreună cu pachetele negratuite. Revista noastră a publicat în mod repetat și manuale despre munca în Scilab(LXF106–109 și ), și totuși documentația încă lipsește, iar materialele de referință nu vă permit întotdeauna să înțelegeți cum funcționează cutare sau cutare funcție.

Freemat- un rezultat impresionant de ceea ce este capabilă o echipă de trei oameni cu gânduri asemănătoare.

Lansarea celei de-a cincea versiuni Scilab a marcat începutul unei noi etape în dezvoltarea sistemului. Interfața aplicației s-a schimbat (dezvoltatorii au abandonat GTK-interfață), instrumentul de modelare a blocurilor a început să se schimbe Scicos, care în octombrie 2009 ar trebui să-și schimbe numele în Xcos.

O altă variantă a temei Matlab este Freemat(); acest pachet are o altă caracteristică comună importantă cu Matlab, și anume suport pentru programarea orientată pe obiecte. Interfața programului este destul de plăcută. Completarea automată a comenzilor este implementată în fereastra principală. Site-ul oficial conține un manual complet pentru lucrul cu sistemul (în engleză). Pachetul de distribuție a programelor este mic, conform standardelor actuale, ca dimensiune - 18 MB.

Sistemul permite rezolvarea numerică a ecuațiilor și sistemelor de ecuații, atât liniare, cât și neliniare, precum și procesarea numerică a semnalului (vezi Fig. 6); capabil să lucreze cu matrici multidimensionale. Principalele puncte pozitive Freemat, comparativ cu ScilabȘi Octavă, sunt o compatibilitate mai mare a limbajului intern al sistemului cu limbajul Matlab si foloseste OpenGL pentru a crea grafice și suprafețe, făcându-le să arate mai bine.

Dezavantajele Freemat sunt performanțe scăzute (unele sarcini sunt rezolvate de multe ori mai lent decât în ​​alte pachete) și lipsa pachetelor de extensie. Acest sistem este dezvoltat doar prin eforturile unei echipe de trei persoane. Proiectul nu are o comunitate mare.

Matematica la distanta

Sistemele menționate mai sus sunt proiecte locale, adică lucrul cu ele se realizează pe o singură mașină. Dar acest lucru poate fi incomod - de exemplu, în cazul învățământului la distanță; În plus, nu toți studenții vor fi de acord (și uneori vor putea) să instaleze aceste aplicații pe computerele lor de acasă. În acest caz, instrumentele sunt necesare pentru lucrul la distanță cu pachete matematice.

SMath Studio Live: calculează fără a părăsi browserul (deși nu foarte repede).

Printre cei pe care i-am luat în considerare, o astfel de oportunitate ne oferă SMath Studio. În capitolul Trăi Site-ul oficial (http://smath.info/live) conține o foaie de lucru virtuală pe care oricine își poate efectua calculele. Sistemul este foarte convenabil, deși nu este deosebit de rapid.

Și totuși sistemul este mai profesionist în acest sens SALVIE(http://www.sagemath.org/). Acest sistem constă dintr-un server web care oferă o interfață grafică pentru interacțiunea cu codul Piton, pe care este scris miezul său. Orice utilizator care folosește browserul său web preferat se poate conecta la server, se poate înregistra și obține spațiu personal. Poate fi deschis sau închis, adică accesibil doar administratorului serverului și proprietarului însuși. Fișele de lucru pot fi create în spațiul personal și toate calculele sunt efectuate pe ele.

În foaia de lucru, puteți utiliza orice limbă disponibilă și există multe dintre ele. Defectiune de sistem SALVIE combină următoarele produse: GAP, Maxima, Python, R, LaTeX. În plus, acestea pot fi conectate Octave, Axiom, Magma, Mathematica, Matlab, Maple, Mupad si altii. Ca rezultat, obținem un singur server de lucru la distanță care ne permite să predăm orice pachet de matematică și să efectuăm calcule folosind atât sisteme de matematică computerizate gratuite, cât și comerciale.

. Din motive necunoscute, Salvie refuză să lucreze în Firefox, dar în rest, aceasta este o soluție bună pentru lucrul la distanță.

Sistemul de drepturi de acces la spațiile personale și posibilitatea de a colabora cu o fișă de lucru de către mai mulți utilizatori simultan vă permite să organizați învățământul la distanță cu o fișă de explicație a materialului educațional care conține exemple de rezolvare a problemelor și fișe de teme personale pentru fiecare elev.

În prezent există mai multe publice SALVIE-servere - te poți conecta la ele, te uiți la foile postate în domeniul public, îți creezi propriul spațiu personal și, în caz de dificultăți, poți cere ajutorul comunității. Pentru a face acest lucru, pur și simplu faceți publică foaia de lucru. Vă asigur: sunt foarte mulți oameni dispuși să ajute, singura problemă este că limba de lucru este engleza.

Site-ul web oficial conține link-uri către un server public de testare (http://www.sagenb.org), precum și materiale educaționale și cărți create folosind acest sistem. Înregistrează-te și încearcă SALVIE– poate asta e ceea ce cauți? De asemenea, merită remarcat faptul că nu ne-am putut conecta la server Firefox, dar nu au existat probleme în alte browsere.

Așadar, ne-am uitat la cele mai populare sisteme gratuite de matematică pe computer. Dacă acestea pot fi folosite în antrenament și pentru muncă, rămâne la latitudinea dvs. să decideți. Am făcut deja alegerea noastră și nu regretăm.

Sisteme comerciale

Dintre sistemele comerciale, cele mai populare trei sunt: Matlab(calcule numerice), arțar(accentul principal este pus pe calculele simbolice) și Mathematica(combină cu succes aspirațiile primelor două). Pachetul de inginerie puternic iese în evidență MathCAD, deoarece este mai mult un calculator mare de inginerie și nu este destinat rezolvării problemelor complexe de fizică matematică sau a teoriei criptării, procesării semnalului și așa mai departe.

Toate aceste pachete au versiuni pentru cele mai comune platforme: Windows, Linux și Mac OS X. Iată costul unei licențe a acestor pachete pentru instituțiile academice, conform listei de prețuri Softline:

  • Matlab– 30.765 ruble;
  • Mathematica– 9002 ruble;
  • arțar– 36.286 ruble;
  • MathCAD– 5290 rub.

Puteți trage propriile concluzii.