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ć?
Odpowiedzi:
W 2008 roku spróbowałem zrobić to samo. Szybko zauważyłem następujące korki pokazowe:
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ć.
źródło
Zaraz z czubka mojej głowy:
źródło
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.
źródło
Octave ma kilka ulepszeń syntaktycznych w Matlabie, na przykład możesz powiedzieć
endif
endfor
iendfunction
zamiast justend
, 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
parcellfun
ipararrayfun
są bardzo potężnymi narzędziami do przetwarzania równoległego, których całkowicie brakuje Matlabowi. Jestparfor
w 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.
fsolve
ilsode
wydaje 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.
źródło
failed to open pipe: pipe: not supported on this system
. Używam gotowych plików binarnych systemu WindowsOctave_3.6.1_VS2010
.octave --force-gui
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.źródło
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.
źródło
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.
źródło
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.
źródło
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 .
źródło
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.
źródło
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.
źródło