Dlaczego / kiedy powinienem preferować MATLAB zamiast Octave?

82

W naszej najkrótszej operacji musimy prototypować algorytmy w jakimś języku wyższego poziomu, zanim zdecydujemy się na implementację C na sprzęcie wbudowanym.

Do tej pory używaliśmy do tego MATLABA, ale koszty licencji zaczynają boleć. Rozważamy przeniesienie naszego kodu MATLAB do Octave.

Czy jest jakiś szczególny powód, żeby tego nie robić? Czy złamiemy jakąkolwiek kompatybilność, zwłaszcza jeśli mamy zewnętrznych partnerów, którzy nalegają na używanie MATLAB? Czy są jakieś kary za wydajność, których możemy się spodziewać?

lindelof
źródło
7
Należy wziąć pod uwagę koszty migracji i szkolenia.
Daniel Moura
10
Dlaczego nie Python? stackoverflow.com/questions/1776290/… NumPy dla użytkowników MATLAB: mathesaurus.sourceforge.net/matlab-numpy.html
Michaił
5
@Mikhail: Dzięki kontaktom z partnerami, którzy używają Matlab.
Jonas
2
@Jonas: partnerzy zewnętrzni też mogą być przekonani ... Jeśli zobaczą, że wszyscy mówią o migracji do Pythona ...
Michaił
To pytanie wciąż często pojawia się w powiązanych tematach, ale jest teraz strasznie nieaktualne (ponad 10 lat).
Tasos Papastylianou

Odpowiedzi:

52

W 2008 roku spróbowałem zrobić to samo. Szybko zauważyłem następujące korki pokazowe:

  • Skrzynki narzędziowe nie są tak kompletne i nie są tak dobrze przetestowane. W szczególności zestaw narzędzi do przetwarzania obrazu, na którym opierała się moja praca (dużym utrudnieniem było to, że imtransform nie został zaimplementowany).
  • Debugger i profiler Octave były prymitywne w porównaniu do Matlaba.
  • Jeśli pracujesz z innymi, może być bardzo trudno ich zmienić.
  • Jeśli korzystasz z przyborników innych firm, musisz je uruchomić samodzielnie.
  • Działki Octave nie mają jakości publikacji.

Muszę jednak powiedzieć, że ogólnie byłem pod wrażeniem tego, jak kompatybilny jest Octave z Matlabem, jeśli używasz Matlab w podstawowym zakresie, możesz mieć szczęście. W końcu było to w 2008 roku, za dwa lata wiele może się zmienić.

carlosdc
źródło
8
Nie sądzę, żeby problem miał cokolwiek wspólnego z użytkownikami MATLAB-a. To wspaniale, że istnieje alternatywa FOSS i ludzie, którzy chcą nad tym pracować, robią to. Ludzie zajmują się swoim czasem, cokolwiek chcą. Krytykowanie użytkowników danego programu jest dziecinne.
carlosdc
2
Dla każdego, kto jest zainteresowany, kliknij link do instalatora Octave 3.8 dla systemu Windows: mxeoctave.osuv.de
juliohm
2
Te problemy można przezwyciężyć za pośrednictwem strony internetowej bountysource.com/teams/gnu-octave/issues, która kosztuje dziesięć razy mniej niż jedna licencja Matlab.
Siergiej
2
Od 2017 roku naprawdę powinieneś spróbować. Będziesz zaskoczony, że większość, jeśli nie wszystkie, skrypty MATLAB-a będą działać natychmiast po wyjęciu z pudełka (z wyjątkiem określonych skrzynek narzędziowych), będziesz musiał spędzić jedno popołudnie na poprawianiu kilku drobnych niezgodności. Czym jest jedno popołudnie w porównaniu z korzyściami płynącymi z tworzenia wolnego oprogramowania o otwartym kodzie źródłowym?
Hugo Raguet
24

Zaraz z czubka mojej głowy:

  1. Istnieje wiele skrzynek narzędziowych, których Octave nie ma, o czym przekonałem się, gdy dwa semestry temu próbowałem odrobić pracę domową na kursie uczenia maszynowego.
  2. Octave ma znacznie gorszy debugger. Praca z tym była prawie niemożliwa.
  3. Matlab jest znacznie szybszy w przypadku wielu rodzajów operacji.
  4. Działki Matlaba są o wiele ładniejsze.
  5. Octave nie ma natywnego GUI. Istnieją GUI dla Octave, ale są one gorsze od rodzimego Matlaba.
Nathan Fellman
źródło
+1 za punkt # 5. Nie znalazłem nawet darmowego GUI dla Octave, które mogę zainstalować i które działa niezawodnie, nie mówiąc już o dobrym. SciLab może być dobrą alternatywą dla Matlaba, ale nie wiem, jak dobry jest w odniesieniu do punktów 1-4.
Stefan Smith
15

Przetestowałem też oktawę i R.

Odnośnie oktawy: Byłem pod wielkim wrażeniem podobieństwa składni oktawowej. Przeniesienie moich skryptów MATLAB-a na oktawę nie zajęło mi dużo czasu. Tymczasem mam szczególny problem z drukowaniem znaczników razem z paskiem błędu, który został naprawiony przez Jarno Rajahalme w Nabble i ze zmianą rozmiaru czcionki xtick, co obejście otrzymałem w odpowiedzi na pytanie w Nabble. Więc nadal ma kilka błędów, które można pokonać przy pewnym wysiłku. Jeśli napotkasz jakieś problemy, możesz spróbować forum mailingowego nabble: [email protected]. Nawiasem mówiąc, mój zespół nie może się do niego dostosować (przyjazny dla użytkownika), ponieważ dostosowuje się do MATLAB-a, więc nadal używamy MATLAB-a. Ponieważ MATLAB jest zbudowany pod gnuplotem, innym sposobem naprawienia jego błędów jest edycja wygenerowanego pliku gnuplot. Najlepszym IDE, jakie znalazłem, było QtOctave, w którym zrobiłem krótką recenzję w "

Odnośnie R: według badań przeprowadzonych przez SciViews, wydajność R jest lepsza niż MATLAB i oktawa. Nie mam dużego doświadczenia z R. Studiowałem pakiet mclust, aby napisać rozdział wikibook o klastrowaniu EM w R. Nawiasem mówiąc, wydaje się, że mają bardzo aktywną społeczność. Możesz więc znaleźć pakiety stron trzecich do propozycji, które nie są tak znormalizowane przez IMO. Najlepszym IDE, jakie znalazłem, była wtyczka StatET dla eclipse, JGR (Java GUI for R) i emacs. Pomimo kosztów nauki nowego języka programowania, gdybym wybrał platformę open source do wykonania grafiki mojego eksperymentu i analizy eksploracji danych, wypróbowałbym R.

Emanuel Vianna
źródło
10

Octave ma kilka ulepszeń syntaktycznych w Matlabie, na przykład możesz powiedzieć endif endfori endfunctionzamiast just end, co znacznie ułatwia debugowanie.

Octave pozwala również na dynamiczne generowanie funkcji i ma wiele funkcji zdefiniowanych w skryptach i pliku funkcji. Co jest o wiele ładniejsze niż podejście Matlab polegające na jednym pliku i jednej funkcji.

Wreszcie, oktawa ma parcellfuni pararrayfunsą bardzo potężnymi narzędziami do przetwarzania równoległego, których całkowicie brakuje Matlabowi. Jest parforw Matlabie, ale moim zdaniem nie jest to najlepszy sposób na zrobienie tego.

Wadą oktawy jest to, że są nieco w tyle na skrzynkach narzędziowych, chociaż jeśli spojrzysz, możesz znaleźć podobne rzeczy. fsolvei lsodewydaje się trochę wolniejszy, ale z jakiegoś powodu mocniejszy w oktawie. Dużym kłopotem dla niektórych ludzi jest również brak linku symbolicznego i zestawu narzędzi DAQ, ale i tak będzie to zastrzeżone.

Python / Numpy jest zdecydowanie wart uwagi: jest potężniejszy, ale ich składnia jest ukierunkowana na bardziej złożone fragmenty kodu.

user1240280
źródło
1
Właśnie go wypróbowałem i, o ile wiem, pararrayfun / parcellfun nie są obsługiwane w systemie Windows (no nie natywnie bez Cygwin) failed to open pipe: pipe: not supported on this system. Używam gotowych plików binarnych systemu Windows Octave_3.6.1_VS2010.
Amro
2
tak, wydaje mi się, że jest to spowodowane różnicami w sposobie uruchamiania skryptów powłoki w systemie Windows i Linux, ponieważ pararrayfun / parcelfun działa poprzez tworzenie niektórych procesów potomnych. Nie wiem, jak to działałoby w systemie Windows, nie jestem nawet pewien, czy plik binarny systemu Windows jest wykonywany w powłoce, czy też jest emulowany?
user1240280
1
szkoda, (przenośna) równoległa wersja cellfun / arrayfunc wydaje się dobrym pomysłem ... Może MATLAB też powinien :)
Amro
@ user1240280: możliwość definiowania funkcji w skrypcie to IMHO ogromna przewaga Octave nad Matlab. Umożliwia napisanie całego programu w sposób modułowy i przechowywanie go w jednym pliku, dzięki czemu można go łatwo wysłać do siebie lub innych. Ale brak GUI w Octave jest dużą wadą.
Stefan Smith
@stefan smith: Octave ma teraz natywne GUI, wciąż eksperymentalne, ale z moich ostatnich doświadczeń wynika, że ​​jest całkiem użyteczne i mniej więcej stabilne. możesz to wypróbowaćoctave --force-gui
Legionair
9

Octave nie ma guide, co sprawia, że ​​tworzenie GUI jest bardzo łatwe. Regularnie używam przewodnika do tworzenia narzędzi dla moich kolegów spoza MATLABA.

Doresoom
źródło
6
Czy Octave ma odpowiednik przewodnika? Czy to dlatego zostałem odrzucony?
Doresoom
8

W twoim przypadku oktawa może być lepsza niż MATLAB:

  • Ma składnię, która pozwoli ci napisać kod, który jest nieco bliższy C. tj. + =, - =, domyślne wartości parametrów funkcji, podwójne cudzysłowy literały łańcuchowe itp.

  • Zakładając, że twoje chipy są wolniejsze niż procesor do komputerów stacjonarnych, szybkość prawdopodobnie nie będzie problemem.

  • Ponieważ uruchamia się znacznie szybciej niż MATLAB, bardziej praktyczna jest integracja ze skryptami powłoki w celu testowania.

  • W przypadku prototypowania kreślenie jest więcej niż wystarczające; ludzie są po prostu przyzwyczajeni do stylu MATLAB-a.

  • Względny brak skrzynek narzędziowych nie jest wielkim problemem, ponieważ i tak nie byłyby dostępne na Twojej platformie docelowej.

Używam obu i za każdym razem, gdy się przełączam, brakuje mi funkcji innych.

Andrew Wagner
źródło
6

Ciekawie jest zobaczyć, jak alternatywa open source działa w przypadku statystyk, ale nie w przypadku analizy numerycznej. R (oktawa statystyki) jest obecnie bardziej popularna niż komercyjna S-plus (matlab statystyki). Kwestie wymienione jako powody, dla których nie należy odchodzić od Matlab, znalezione w innych odpowiedziach, miały również zastosowanie do R. Ale nadal wszyscy dopiero zaczęli się wnosić, a teraz R jest standardem, z lepszą grafiką, lepszymi pakietami i brakiem blokady dostawcy.

Więc możesz również preferować oktawę od matlab, jeśli możesz przejść przez dylemat więźniów.

SiggyF
źródło
4
Powinieneś zamieścić to w komentarzu, a nie w odpowiedzi.
Dima
5

W MATLAB jest dobry WikiBook z listą różnic między MATLAB a Octave .

Z mojego doświadczenia wynika, że ​​rdzeń MATLAB-a jest dobrze przeniesiony do Octave, ale zestawy narzędzi mają różne poziomy zgodności, więc Twoja decyzja zależy od tego, co dokładnie próbujesz zakodować.

Niektóre rzeczy, których brakuje Octave, AFAIK, to ścisła integracja z kodem .NET i konstruktorem gui guide(chociaż istnieje wiele innych narzędzi do budowania GUI, których Octave może używać).

Ponadto, jak zauważyli inni, wiele z tego, za co płacisz w MATLAB, to zgrabny interfejs i narzędzia do debugowania / profilowania. Doświadczeni programiści prawdopodobnie poradzą sobie z alternatywami, ale początkujący mogą mieć problemy.

Richie Cotton
źródło
3

Zauważ, że Octave obsługuje konstrukcje językowe, które nie są obecne w Matlabie (np. Operatory autoinkrementacji, instrukcje do-until itp.). To sprawia, że ​​czasami denerwuje kod portu opracowany (przez kogoś, kto nie jest zaznajomiony z ograniczeniami Matlab) w Octave w środowisku Matlab.

W Octave FAQ jest kilka innych ograniczeń / różnic .

jhfrontz
źródło
2

Zdecydowanie powinieneś preferować Matlaba od Octave, jeśli możesz sobie na to pozwolić.

Nie miałem dużego doświadczenia z Octave, ale spodziewałbym się problemów, jeśli twój kod używa narzędzi Matlab, fantazyjnych wykresów lub GUI Matlab.

Spodziewałbym się, że będzie to jak OpenOffice kontra MS Office. W większości kompatybilne, ale na tyle różne, że przyprawiają Cię o ból głowy.

Dima
źródło
0

Z powodzeniem przeniosłem niektóre aplikacje do regresji liniowej i programowania kwadratowego do Octave.

Regresja liniowa (operator odwrotnego ukośnika) działała bez żadnej korekty. W przypadku programowania kwadratowego musiałem przełączyć się z fmincon () na sqp () , dając podobne rezultaty.

Mimo to, skrzynki narzędziowe i GUI w Octave są rzeczywiście mniej dojrzałe (spędziłem tyle czasu na podstawowych rzeczach), chociaż przez ostatnie dwa lata robił postępy.

Ben
źródło