ועוד. על טכנולוגיה, החיים ומה שביניהם

יום ראשון, 20 בספטמבר 2009

חלופות קוד חופשי ל-Matlab

יוצא לי להשתמש בעבודה די הרבה ב-Matlab, ולכן כשהתקנתי לינוקס על ה-PC שלי לפני כשנתיים וחצי, בדקתי אם אפשר להתקין עליו Matlab. שמחתי לגלות שקיימת גרסת Matlab ללינוקס (למעשה הגרסה ללינוקס ולמק היא אותה גרסה), אך כשבאתי להתקין את התוכנה קיבלתי הודעת שגיאה. נבירה קצרה באינטרנט גילתה את מקור הבעיה: Matlab דורשת פנטיום 4 ומעלה, בעוד לי יש (על ה-IBM X30 המזדקן שלי) פנטיום 3. מה איכפת ל-Matlab איזה מעבד אני מריץ? מסתבר שב-Matlab דורשים תמיכה במשהו שנקרא SSE2 שנתמך בגרסה 4 של פנטיום. אגב, גם לא כל מעבדי ה-Atom של אינטל תומכים בדבר הזה, אז אם חשבתם לקנות נטבוק ולהתקין עליו Matlab, כדאי שתוודאו מראש שהמעבד שנשפכם חשקה בו תומך באפשרות.

מעז יצא מתוק: גיליתי לא פחות משלוש תוכנות לתכנות מדעי שמופצות תחת רשיונות קוד פתוח, ושממצבות את עצמן כתחליף Matlab (בניגוד נניח ל-R, שהיא חבילת תכנות מדעי ללא יומרה לתאימות כלשהי ל-Matlab). השלוש הן Octave, Scilab ו-FreeMat.

לפני שצוללים לכל אחת מהאפשרויות, הערה כללית: אף אחת מהאלטרנטיבות לא תואמת למנוע הגרפי של Matlab או למנוע של Simulink. המשמעות: כל הפקודות שמתייחסות ל-properties של handle מסויים בגרף, או כל הפקודות שמתייחסות למודל ב-Simulink, לא רלוונטיות בתחליפים הנ"ל, ויגררו הודעת שגיאה בריצה.

Octave
יתרונות: החבילה הותיקה ביותר היא גם היציבה ביותר בשוק. התאימות שלה ל-Matlab כמעט מושלמת: רוב הפונקציות החישוביות שיש ב-Matlab (כולל מה-Toolboxes) קיימות גם ב-Octave, ודרך הקריאה להן זהה לזו שב-Matlab. למעשה, מה שסגור ב-Matlab הוא רק ה-kernel שמבצע את החישובים. מבחינה חוקית, אין דרך להגן בקניין רוחני על תחביר (syntax) של שפה. Octave מנצלים בדיוק את זה: הם פיתחו kernel משלהם שמשתמש באותו syntax, וכך מאפשרים הרצה של סקריפטים ופונקציות גם על Octave וגם על Matlab.
חסרונות: ל-Octave אין סביבת עבודה (IDE) שבאה איתו. יש ברשת פיתרון לא רע בכלל שנקרא qtOctave, אבל הוא רץ רק על לינוקס. דרך אחרת (בה אני משתמש) היא להריץ Octave ב-Terminal ולהשתמש -text editor החביב עליכם לעריכת הקבצים. למרות שאני מוצא את הדרך הזו מספקת, אין ספק שסביבת העבודה של Matlab עשירה בהרבה, והאפשרויות שמתלוות לה הופכות את העבודה לנוחה ויעילה יותר. בנוסף, ל-Octave אין מודול גרפי משל עצמו, אלא הוא משתמש (נכון להיום) ב-gnuplot. מודול זה עני בתכונות (אין אפשרות לשמור גרף מהחלון, רק משורת הפקודה, והזום זמין רק ב-windows ולא בלינוקס, שזה בכלל מוזר). ידוע לי משיחות שנערכות בקבוצות דיון של Octave שיש שם מחשבות לעבור בעתיד לחבילה גרפית אחרת, ואף התחילו לבחון כמה אפשרויות. חסרון אחרון: תמיכה קהילתית חלשה יחסית למה שהתרגלתי בעולם הקוד הפתוח, בין היתר בגלל שימוש במדיות מיושנות (mailing lists במקום פורומים ו-wiki. השנה היא 2009, לעזאזל).
Scilab
יתרונות
: מכילה IDE מלא. יותר מזה - מכילה חבילה שנקראת Scicos ושמהווה חלופה ל-Simulink. אמנם אין תאימות ל-Simulink, אבל מי שאוהב להשתמש בתכנות גרפי והמערכות שלו נראות כמו משוואות דיפרנציאליות, ימצא ב-Scicos פתרון לא רע בכלל.
חסרונות: התאימות ל-Matlab לא מתקרבת לזו של Octave.
FreeMat
גילו נאות: לא הרצתי מעולם FreeMat מסיבות שיוזכרו בחסרונות.
יתרונות: תאימות ל-Matlab; יעילות ריצה בזכות מהדר JIT (הלא הוא Just In Time Compiler, שמאפשר קומפילציה חלקית של הקוד, לדוגמה לפני לולאת for. קיים גם ב-Matlab, אך לא ב-Octave או ב-Scilab, שם רצוי להמשיך בכתיבה וקטורית); תיעוד מפורט וברור באתר.
חסרונות: הפרויקט מתנהל בלי גב של האקדמיה (Octave מפותח ע"י אוניברסיטאות בארה"ב ובאנגליה) או התעשיה (Scilab מפותח ע"י קונסורציום של חברות בצרפת). לכן התמיכה בפרויקט חלשה, ההתקדמות איטית (הגרסה האחרונה ממרץ 2008), והגרוע מכל - המחברים לא טרחו לסדר את עניין הרשיון הפתוח. המשמעות: הפצות רבות (וביניהן Mandriva בה אני משתמש) מסרבות לצרף את התוכנה ל-repositories שלהן. כלומר, כדי להקין את התוכנה יש צורך לקמפל את קוד המקור שלה, ואנחנו הרי באנו להנות.

סיכום
אם יש לכם כסף ו-EULA לא מעניין אתכם (ואת התעשיות הבטחוניות בארץ, לדוגמה, הוא מעניין ועוד איך), לכו על Matlab. הוא יעיל, הוא נוח, יש בו הכי הרבה אופציות, והוא יעשה לכם נעים בגב.

אם אין לכם כסף, או אם לא בא לכם להצהיר בפני Mathworks והדוד סם איזה שימוש אתם עושים בתוכנה, אני ממליץ על Octave. בחודשים האחרונים התחלתי להשתמש ב-Octave גם בעבודה, ואף אחד לא שם לב. כלומר, אני לא מתקשה להריץ פונקציות וסקריפטים שחבריי כתבו ב-Matlab (ובלבד שאלה לא מכילים קריאות ל-GUI או למודלים של Simulink), וחבריי מריצים ללא קושי פונקציות וסקריפטים שאני כותב ב-Octave. השימוש ב-command line ו- text editor לא נראה לי נורא, אבל אני מדור שלמד ש-terminal היא לא קללה. למעשה, גם כשאני משתמש ב-Matlab ורוצה לדעת משהו על משתנה אני משתמש בפקודת whos ולא ב-variabes editor או איך שלא קוראים לזה, כך שכנראה שאני לא דוגמה. אבל גם אם צריך לשלם מחיר מסויים באי-נוחות, אני סבור שהמחיר הזה, יחסית לאלטרנטיבות, משתלם.

תכנות נעים!

2 תגובות:

  1. אולי תסביר איך ניתן להשתמש בqtoctave מעל octave.כלומר איך מתקין
    תודה

    השבמחק
  2. היי, מצטער על ההשתהות בתגובה, זמנים עמוסים בעבודה.

    את QtOctave אפשר להוריד מהלינק שמצורף בגוף הפוסט. אם להיות יותר ספציפיים, הקבצים זמינים כאן:
    http://qtoctave.wordpress.com/download
    כדאי לשים לב לכך שהפרויקט הזה הוא שואו של איש אחד, כלומר לא סביר שתקבל פה אחריות ותמיכה לאורך זמן. אני לא ממליץ להשתמש בתוכנה לשימוש מסחרי, אלא רק לשימוש פרטי.

    באותה נשימה, אני חייב לציין שלאחרונה חזרתי לשחק עם Scilab, ובסדרה 5 הם עשו קפיצה מדהימה קדימה והוסיפו המון פיצ'רים (חלק גדול מהם בממשק המשתמש, אם כבר שאלת על QtOctave). בדקתי להם גם כמה גרסאות בטא והתגובתיות של קבוצת המפתחים היתה מרשימה. אני ממליץ לנסות ולהתרשם.

    השבמחק