Wykorzystanie wolnego oprogramowania w nauce
Transkrypt
Wykorzystanie wolnego oprogramowania w nauce
Wykorzystanie wolnego oprogramowania w nauce Piotr Gawron, Jarek Miszczak 24 stycznia 2007 Streszczenie Celem pracy jest porównanie komercyjnych pakietów służących do prac naukowych z ich wolnymi odpowiednikami. Postaramy się porównać cechy dużych pakietów pogrupowanych w trzy kategorie: obliczenia numeryczne, statystyka i obliczenia symboliczne. 1 Wstęp Skupimy się na kilku dużych komercyjnych pakietach oprogramowania i ich wolnych odpowiednikach. Postaramy się dokonać przeglądu i ocenić jakość tych produktów z punktu widzenia studenta czy pracownika naukowego. Szczególną uwagę zwrócimy na wachlarz możliwości (ilość dostępnych funkcji, łatwość pisania rozszerzeń) oraz wygodę użytkowania i interfejs użytkownika. 2 Obliczenia numeryczne W tej kategorii omówimy trzy duże pakiety oprogramowania: komercyjny Matlab oraz dwa darmowe pakiety, które starają się go zastąpic: GNU Octave oraz Scilab. 2.1 Matlab Produkt firmy MathSoft jest jedym z najbardziej zaawansowanych narzędzi przeznaczonych do zastosowań inżynierskich. Matlab jest rozwijany od przełomu lat siedemdziesiątych i osiemdziesiątych. Cleve Moler, wykładowca algebry na Uniwersytecie Nowy Meksyk, napisał w Fortranie prosty język skryptowy umożliwiający studentom korzystanie z bibliotek numerycznych 1 bez konieczności pisania w Fortranie. Co ciekawe język ten był rozprowadzany na zasadach public domain. W roku 1983 powstała firma MathWorks, która zastąpiła Fortrana językiem C i dodała zintegrowana grafikę i zaczeła sprzedawać Matlaba. Matlab jest dostępny na systemy operacyjne Windows, Linux oraz Macintosh. Wersja dla studentów kosztuje 99 $, wersja do użytku akademickiego dla uczelni to wydatek 500 $ za jedno stanowisko, natomiast wersja komercyjna kosztuje 1900 $. Jest to spory koszt, ale Matlab to de facto standard jeżeli chodzi o obliczenia numeryczne. Porównanie wydajności [7] z Octavem i Scilabem wskazuje też na przewagę Matlaba. Niestety dokupienie dodatkowych pakietów jest bardzo kosztowne – dla studentów jeden toolbox kosztuje od 50 do 90 $, natomiast dla instytucji komercyjnych dodatkowe pakiety kosztują od 700 do 4000 $ każdy. 2.2 GNU Octave Octave powstał pod koniec lat osiemdziesiątych XX wieku jako specialistyczne narzędzie przeznaczone do obliczeń chemicznych. Od tamtej pory został rozwinięty w narzędzie pozwalające na elastyczne operowanie na danych. Jest rozprowadzany na licencji GPL. Podstawową strukturą danych w GNU Octave jest macierz – bez problemu można wykonywać dodawanie, mnożenie i odwracanie macierzy. Przykładowo octave:1> a = [1,2;3,4]; octave:2> a a = 1 3 2 4 octave:3> a**-1 ans = -2.00000 1.50000 1.00000 -0.50000 Można też łatwo definiować funkcje, operować na strukturach, napisach i tablicach. Język GNU Octave jest bardzo prosty, przypominający nieco fortrana i nie wymaga od użytkownika zbyt wielkiej dbałości o szczegóły. 2 Jedną z największych zalet Octava jest możliwość rozszerzania języka. Wykorzystując bibliotekę liboctave można pisać moduły, które mogą być następnie wykorzystywane identycznie jak wbudowane funkcje. Działają one przy tym znacznie szybciej niż funkcje napisane w języku GNU Octave. Jeżeli chodzi o pakiety rozszerzeń to projekt GNU Octave Repository [3] skupia wiele użytecznych dodatków do GNU Octave. Teoretycznie Octave może wykorzystywać skrypty napisana dla Matlaba, ale w praktyce nie zawsze to działa. 2.3 Scilab Konkurencją dla GNU Octava jest Scilab [8]. Zosał on stworzony przez Institut National de Recherche en Informatique et en Automatique i Ecole Nationale des Ponts et Chaussées jako zastępstwo Matlaba. Program ten jest zaopatrzony w interfejs użytkownika, który nie jest może zbyt estetyczny, ale wystarczająco funkcjonalny. Ze Scilabem powiązany jest pakiet Scicos, który przeznaczony jest do modelowania i symulacji układów dynamicznych. Scilab posiada silne wsparcie dla importu programów z Matlaba. Rysunek 1: Scilab w pracy Składnia Scilaba jest bardzo podobna do składni Octava. -->a = [1,2;3,4] 3 a ! ! = 1. 3. 2. ! 4. ! -->a**(-1) ans = ! - 2. ! 1.5 1. ! - 0.5 ! Najsłabszą stroną Scilaba jest jego wydajność. Nieco poprawiła się ona w nowo wydanej wersji 3.0 pakietu. 3 Pakiety statystyczne Niestety nie istnieje zbyt wiele wolnych pakietów z oprogramowaniem dedykowanym do badań statystycznych. Najbardziej rozbudowany wolny pakiet to GNU R. Dorównuje on pod względem możliwości komercyjnej Statistice. Scilab i Octave posiadają szeroką gamę funkcji statystycznych, jednakże nie są one przeznaczone ściśle do obrabiania danych statystycznych. Wyraźnie brakuje wolnego oprogramowania, które posiadałoby przyjazny użytkownikowi interfejs graficzny. 3.1 Statistica firmy StatSoft Statistica jest pakietem przeznaczonym do prowadzenia obliczeń statystycznych. Pakiet programów z tej rodziny jest bardzo rozbudowany, jednakże my skupimy się tylko na możliwości zastosowania go do obliczeń naukowych, a w szczególności medycznych. Statistica została zaimplementowana jedynie dla systemów operacyjnych z rodziny Windows. Zawiera wsparcie dla mechanizmu OLE, własny interepreter języka Visual Basic oraz możliwość komunikacji z bazami danych. Do zalet programu można zaliczyć to, iż wszystkie opcje dostępne są z poziomu GUI oraz z poziomu Visual Basica. Ta druga możliwość jednak nie jest przydatna przeciętnemu użytkownikowi. Program posiada wiele zaimplementowanych testów i algorytmów, które dodatkowo są dobrze udokumentowane. Interefejs graficzny niestety pozostawia wiele do życzenia. Na pierwszy rzut oka jest on przyjazny, jednakże wykonanie jakichkolwiek trochę bardziej zaawansowanych obliczeń wymaga przedzierania się przez 4 Rysunek 2: Prezentacji wyników obliczeń w Statistice dziesiątki okienek, które zostały bardzo źle zaprojektowane. Początkujący użytkownik nie ma szans na wykonanie obliczeń w szybkim czasie. Program udostępnia możliwość automatycznego generowania raportów, jednkaże często się zdarza, że trzeba dokonywać wielu poprawek ręcznie, aby raport nadawał się do odczytania lub wydruku. W zakresie podstawowych operacji pakiet sprawuje się dobrze, jeżeli pozna się szereg sztuczek, które omijają błędy i niedociągnięcia programu. Program jest też stosunkowo niestabilny i trzeba być przygotowanym na utratę wyników. Koszty zakupu pakietu Statistica w wersji jednostanowiskowej wynoszą około 6000 złotych. Przy zakupie tego oprogramowania dla laboratorium dydaktycznego (25 stanowisk) należy się liczyć z koszami w granicy 10000 złotych. Warto zauważyć, że mimo swojej bardzo wysokiej ceny, Statistica jest standardem na polskich uczelniach. 3.2 GNU R GNU R jest to zarazem pakiet jak i język stworzony na potrzeby obliczeń statystycznych. Pierwowzorem języka i środowiska był rozwijany przez 5 AT&T język S. Komercyjnym odpowiednikiem GNU R jest S-PLUS firmy Insightful1 . Zarówno GNU R jaki i S-PLUS są dostępne na systemy UNIXowe i Windows. R jest językiem wysokiego poziomu. Użytkownik może operować na zaawansowanych strukturach danych takich jak: lista, wektor, tablica wielowymiarowa. Pakiet R pozwala także na operowanie na typach takich jak dataframe, który umożliwia łatwe obrabianie danych statystycznych. Zawansowany przykład użycia pakietu R – krzywa Kaplana-Meyera: # załaduj bibliotekę -- analiza przeżycia library(survival); # utwórz obiekt z danymi na podstawie pliku CSV datasheet <- read.csv2("2004LAST1.csv"); # wybierz podzbiór danych datasheet <- subset(datasheet, datasheet["CZASCADO"]>60); # utwórz obiekt przeżycia surv1 <- Surv(data.matrix(datasheet["CZASCADO"]), data.matrix(datasheet["LOS.CADO"])); # wykonaj analizę przeżycia sf <- survfit(surv1); # przygotuj wyjście do pliku PDF pdf(encoding="ISOLatin2", file="R.pdf"); # narysuj wykres plot(sf, xlab="Dni", ylab="Procent przeżywających"); # opatrz go stosownym komentarzem title(paste("Krzywa Kaplana-Meyera dla osób poddanych dializie")) # deaktywuj wyjście graficzne dev.off() Wynik działania tego programu jest przedstawiony na Rys.3. Istnieje kilka projektów mających na celu stworzenie GUI ułatwiającego pracę. Są to między innymi: R Commander, RGtk czy świeżo powstający i rokujący duże nadzieje RKward. R jest bardzo aktywnie rozwijany. Odznacza się bardzo dużą ilością dostępnych pakietów dodatkowych. Mogą one być w prosty sposób zainstalowane z jednego z wielu serwerów lustrzanych CRAN (Comprehensive R Archive Network). 1 http://www.insightful.com/ 6 0.6 0.4 0.0 0.2 Procent przeżywających 0.8 1.0 Krzywa Kaplana−Meyera dla osób poddanych dializie 0 500 1000 1500 2000 2500 3000 3500 Dni Rysunek 3: Wynik działania programu w R 4 4.1 Obliczenia symboliczne Mathematica Pakiet Mathematica został stworzony w latach osiemdziesiątych przez S. Wolframa [5] – ma już 15 lat. Program dostępny jest na wiele systemów operacyjnych, m.in. MS Windows, Linux 32 i 64 bitowy, HP Tru64 Unix 5.1, HP-UX 11, IBM AIX 5.1, SGI IRIX 6.5, Mac OS X 10.2 oraz 10.3. Matematica umożliwia symboliczne i numeryczne rozwiązywanie układów równań, całkowanie i rozwiązywanie układów równań różniczkowych. Wraz z programem dostarczanych jest wiele wyspecjalizowanych pakietów, przykładowo do operacji na grafach czy definujących stałe fizyczne. Bardzo silną stroną pakietu jest zintegrowana grafika. Przykład wykorzystania jest przedstawiony poniżej: In[1]:= a = {{1,2}, {3,4}} Out[1]= {{1, 2}, {3, 4}} In[2]:= Det[a] Out[2]= -2 (** Operacja na poszczególnych elementach **) In[3]:= a^-1 7 1 1 1 Out[3]= {{1, -}, {-, -}} 2 3 4 (** Odwrócenie macierzy**) In[4]:= Inverse[a] 3 1 Out[4]= {{-2, 1}, {-, -(-)}} 2 2 (** Rozwiązanie równania logarytmicznego **) In[5]:= Solve[Log[x]*x==Log[y],{y}] x Out[5]= {{y -> x }} Interfejs użytkownika nie jest zbyt przyjazny, ale na pewno jest lepszy niż w przypadku programu Maxima. Możliwa też jest praca pod konsolą. Mathematica dostarcza doskonałego systemu pomocy, który może służyć za encyklopedię matematyki. Zaletą programu jest także dostępność literatury w języku polskim opisującej możliwości programu. Pakiety MathLink i J/Link dają możliwość pisania rozszerzeń przy użyciu C++ czy interfejsu użytkownika w Javie. Cechą, która odstrasza, jest cena pakietu. Według strony firmy Gambit, polskiego dystrybutora programu, Mathematica 5.0.1 Win + Premier Service wersja jednostanowiskowa edukacyjna po rabacie 20%: kosztuje 4517,14 zł + 22% VAT, natomiast wersja komercyjna z rabatem 20% kosztuje 7733,95 zł + 22% VAT. 4.2 Maxima Wśród wolnego oprogramowania za odpowiednika pakietu Mathematica uważana jest Maxima. Jest to następca programu Macsyma rozwijanego od lat 60-tych w MIT. W 1998 roku kod programu został opublikowany dzięki staraniom Williama Scheltera na licencji GPL. Możliwości programu są spore, ale jak piszą sami twórcy, jest jeszcze sporo do zrobienia. Program może pracować zarówno w środowisku graficznym, jak i pod konsolą. Graficzny interfejs użytkwnika nie jest zbyt przyjazny – jest nieco podoby do interfejsu programu Mathematica, ale przy tym znacznie uboższy. System pomocy jest dostępny poprzez wbudowaną w program przeglądarkę WWW. Z naszego punktu widzenia najważniejsze zalety to możliwość symblicznego rozwiązywania równań różniczkowych oraz różniczkowanie i całkowanie 8 symboliczne. Program umożliwia programowanie w języku LISP, wykonywanie operacji na macierzach oraz wykonywanie wykresów. Program pozwala na zapis wyników pracy w TEX-u, a wykresów w PostScripcie. Możliwa jest także współpraca Maximy z TEXmacsem. Rysunek 4: Maxima w pracy 4.3 GiNaC Na zakończenie tego rozdziału opiszemy pokrótce pakiet GiNaC (GiNaC is Not a CAS2 ). Jest to biblioteka, która pozwala na wykonywanie obliczeń symbolicznych bezpośrednio z poziomu języka C++. Może być ona alternatywą dla dwóch wcześniej opisanych pakietów, chociaż jego możliwości są uboższe. Poniżej podany jest za tutorialem przykład wykorzystania GiNaCa do generowania współczynników wielomianu. #include <iostream> #include <ginac/ginac.h> using namespace std; 2 CAS - Computer Algebra System 9 using namespace GiNaC; int main() { symbol x("x"), y("y"); ex poly; for (int i=0; i<3; ++i) poly += factorial(i+16)*pow(x,i)*pow(y,2-i); cout << poly << endl; return 0; } Minimalistyczna powłoka ginsh rozprowadzana z biblioteką pozwala na wykorzystanie niektórych dostępnych funkcji. GiNaC dostarcza także skryptów do wykorzystania w trakcie zarządzania projektem narzędzi GNU autotools. GiNaC bazuje na bibliotece CLN (ang. Class Library for Numbers) zawierającej klasy C++ do operacji na wielu rodzajach liczb. 5 Podsumowanie Przedstawiony opis nie wyczerpuje bogactwa oprogramowania dostępnego dla naukowców i studentów – nie opisaliśmy chociażby dość popularnych programów Maple3 czy MathCAD4 . Istnieje też cała gama wolnych programów i bibliotek, które mogą być przydatne w zależności od celów jakie przyświecają użytkownikowi. Warto wspomnieć tu dwa rozwiązania oparte na popularnych językach programowania – są to Perl Data Language5 oraz ScientificPython6 . Największą zaletą pakietów komercyjnych jest spójność dostarczanych środowisk. W zakresie wolnego oprogramowania ciekawym rozwiązaniem jest TEXmacs. Pozwala on na intergrację wielu pakietów wraz ze środowiskiem do tworzenia publikacji opartych na TEX-u. 3 http://www.maplesoft.com/ http://www.mathsoft.com 5 http://pde.perl.org/ 6 http://starship.python.net/ hinsen/ScientificPython/ 4 10 Literatura [1] J. Eaton, GNU Octave Manual, Network Theory Ltd., 2002. [2] W. N. Venables, D. M. Smith oraz R Development Core Team, An Introduction to R, Network Theory Ltd, 2002. [3] http://octave-forge.sourceforge.net/ [4] M. Murphy, Octave: A Free, High-Level Language for Mathematics, Linux Journal, Issue 39. [5] S. Wolfram, The Mathematica Book, Wolfram Media/Cambridge University Press, 1999. [6] http://www.ginac.de/, http://www.ginac.de/CLN [7] http://www.sciviews.org/other/benchmark.htm [8] http://www.scilab.org/ 11