יום חמישי, 2 בדצמבר 2010

מהר יותר, גבוה יותר, ולא בהכרח על מחשב חזק יותר !

זהו הפוסט השני בסדרת הפוסטים בנושא החידושים בגרסת R2010b של כלי MathWorks והפעם נעסוק באפשרות להאיץ את ביצועי MATLAB על ידי שימוש במעבד הגרפי (GPU) הנמצא בכרטיס המסך של המחשב שלכם.
ה-GPU מאפשר להוריד מהמעבד הראשי (CPU) עומס בזמן ביצוע חישובים גרפיים שונים. ולהבדיל מבקרי הגרפיקה הראשונים, ניתן כיום לתכנת את המעבדים הגרפיים, בדומה למעבדים אחרים. למשל, המעבדים הגרפיים של חברת NVIDIA ניתנים לתכנות באמצעות שפת CUDA, אשר מבוססת על שפת C.
בשנים האחרונות, עם התגברות הדרישה לכח חישוב חזק יותר, יותר מפתחי תוכנה "זונחים" את ה-CPU, המכיל cores בודדים, ומתחילים לנצל את מאות ה-cores הממתינים בחוסר מעש ב-GPU לצורך ניתוח כמויות גדולות של מידע באופן מקבילי. בעקבות כך, אפליקציות רבות מתחומים שונים עושות כיום שימוש במעבדים גרפיים. בין היתר, המעבד הגרפי מבצע כיום חישובים פיננסיים, משימות עיבוד אות, תמונה ווידאו, סימולציות כימיות, ניתוחים סיסמיים, חישובים של אלגברה לינארית, סימולציות של דינמיקת נוזלים ומשימות מעולם הביולוגיה החישובית. למעשה, במקרים רבים, ה-GPU שבכרטיס המסך משמש כיום ככח עבודה זול וזמין לטחינת נתונים (data crunching) אשר אפילו לא יבואו לידי ביטוי על גבי המסך...
התוצאה הישירה של שימוש ב-GPU על מנת לבצע חישובים שונים הינה האצה של משך הזמן הנחוץ לקבלת תוצאות. רבים בארץ כבר גילו את הפוטנציאל הטמון בכך, והדבר הפך את ישראל לאחת המדינות המובילות בתחום. אולם בישראל, כמו בכל העולם, עדיין חסר ניסיון בכתיבה בשפת CUDA, דבר הגורם לאי מיצוי הפוטנציאל הגלום בטכנולוגיה הזו.

ניסיון בשימוש ב-MATLAB, לעומת זאת, לא חסר בארץ ובעולם. מעל מיליון משתמשים מתכנתים כיום ב-MATLAB, ונהנים מיכולות ניתוח הנתונים והויזואליזציה של הכלי אשר הולך ומשתבח עם השנים, והמהווה בסיס לעוד כ-90 כלים נוספים, ביניהם ה-Parallel Computing Toolbox. בגרסה החדשה של הכלי, R2010b, אשר יצאה בספטמבר 2010, נוספה לו היכולת לתקשר ישירות עם ה-GPU, בשלוש דרכים:

1. אפשרות להפעיל מעל 100 פונקציות built-in של MATLAB הפועלות על מערכים ישירות על ה-GPU,
    עם מינימום שינוי של קוד קיים.
2. אפשרות להמיר קוד MATLAB לקוד היכול לרוץ בצורה מקבילית על ה-GPU.
3. אפשרות לקרוא לקוד CUDA קיים ישירות מתוך MATLAB.

למעשה, בגרסת ה-MATLAB החדשה הושלמה בניית הכביש המהיר המחבר בין סביבת ה-MATLAB על כל יתרונותיה לבין חומרת ה-GPU על כל הפוטנציאל הטמון בה. ובאמצעות החידוש ב-MATLAB, ניתן כעת לתקשר עם ה-GPU ישירות מתוך MATLAB, מבלי לדעת CUDA !

לשני סמינרים שערכנו בנושא זה באמצע נובמבר הגיעו 200 משתתפים, ואם פספסתם, אתם מוזמנים להתעדכן במצגות. בין היתר, הוצגה בסמינר דוגמה בה קוד MATLAB שהיה רץ במשך 180 שעות (7.5 ימים!) רץ כיום על ה-GPU בחמש דקות בלבד! הפידבקים שקיבלנו על הסמינר ועל הפיצ'ר החדש היו די טובים, ונראה שרבים עכשיו שואלים את עצמם למה לעבוד עם dual-core או לשדרג ל-quad-core, כאשר מאות cores זמינים במחשב שלהם ויכולים לקצר את זמני הריצה של האלגוריתם שהם כתבתו.

איזה GPU יש לכם במחשב? כמה זמן לוקח לאלגוריתם הכי ארוך שלכם לרוץ? האם אתם מכירים את השימושים האחרים של ה-Parallel Computing Toolbox? על אילו עוד חידושים בגרסת R2010b תרצו שאכתוב?

יום רביעי, 20 באוקטובר 2010

The Marker

בפוסטים הקרובים אתייחס לחידושים ב-MATLAB בגרסת R2010b, אשר יצאה בתחילת חודש ספטמבר ומכילה יכולות חדשות ב-MATLAB ו-Simulink, וכן עדכונים ל-85 מוצרים אחרים, וביניהם כלי PolySpace עבור וריפיקציה של קוד. החידוש הראשון בו אעסוק הינו Editor highlighting, והוא מאוד שימושי כאשר רוצים לדעת היכן עושים שימוש במשתנה מסוים, ובמיוחד כשיש כמה nested functions בתוך הקוד ורוצים לדעת אם משתנה מסוים נגיש רק ל-nested function מסויימת (משתנה מקומי) או לעוד nested functions ואולי אפילו לפונקציה הראשית (משתנה גלובלי).
Editor highlighting משמש גם לאיתור השימוש ב-nested functions עצמן ולאיתור השימוש ב-subfunctions (כלומר – לא מדובר רק באיתור שמות משתנים, אלא גם באיתור שמות פונקציות).

במקרה של ריבוי MATLAB - nested functions  צובע בצבע (שאינו שחור...) את כל המופעים של המשתנה (וניתן גם לקבל הסברים לגבי משמעות הצבע שנבחר).

במקרה של ריבוי שימושים במשתנה כלשהו בפונקציה פשוטה – קליק על מופע אחד של המשתנה יאיר אותו ואת כל יתר המופעים, וכן יהיו סימונים בצד ימין של ה-editor (כמו הסימונים הכתומים והאדומים של ה-m-lint, אבל הפעם – בצבע אפור).

אם הפונקציה אינה פשוטה – יתקבל גם חיווי לגבי המספר הכולל של המופעים, בשורת הססטוס (צד שמאל למטה, ליד תפריט Start של MATLAB).

ניווט בין המופעים השונים מתאפשר על ידי לחיצה על הסימונים בצד ימין של ה-editor או על ידי חץ למעלה + Alt (למופע הקודם) או חץ למטה + Alt (למופע הבא).

ביטול המירקורים – על ידי Esc או על ידי הקלקה עם העכבר במקום אחר.
למי שהפיצ'ר החדש מעצבן אותו – ניתן לבטל אותו ע"י

file -->Preferences --> Colors --> Programming Tools

והורדת ה-V מה-checkbox של Automatically highlight:

אם מי שביטל ירצה להתחרט כאשר ימצא את עצמו בעתיד רוצה לדעת היכן מופיע משתנה מסוים, הוא תמיד יוכל לעמוד על המשתנה וללחוץ Ctrl+Shift+h או קליק ימני ואז Highlight usages.
 
האם אתם יודעים מה ההבדלים בין סוגי הפונקציות שהוזכרו
(nested functions, subfunctions) ?
אילו עוד סוגים של פונקציות אתם מכירים? האם הספקתם לשים לב לחידושים אחרים בגרסת ה-MATLAB החדשה ?

יום ראשון, 8 באוגוסט 2010

MATLAB - הדרך להימנע מהתמכרות ל-Sudoku!

"הרשו לי לפנות את הבמה בפוסט הזה לטובת בלוגר אורח – רוני פאר, אשר עובד יחד עמי בחברת סיסטמטיקס.  רוני מתמחה בכלי The MathWorks לתחומי מערכות הבקרה והמידול הפיסי, וכפי שתגלו – הוא גם חובב סודוקו לא קטן..."

הי אני רוני, ואני מכור לסודוקו.
 

עד לפני כחודש, הייתי משקיע שעות רבות ומאמצים בזמני החופשי, בכדי לפתור את תשבצי הסודוקו בעיתון סוף השבוע. זה היה סיוט. הגעתי למצב שבו עוד לפני הקפה של הבוקר, כבר הייתי שקוע בספרות אחת עד תשע, ומנסה לנחש עוד מיקום נוסף בלוח הזה. הצמחים שלי סבלו מחוסר השקייה, היו לי עיגולים אדומים סביב העיניים, ותזונה לקויה – סבלתי מכל הסממנים של התמכרות קשה.
 

לפני חודש חלה נקודת המפנה. כחלק מעבודתי בחברת סיסטמטיקס, נכנסתי לאתר ה-User Community של MathWorks, ובמקרה גיליתי קובץ MATLAB, אשר פותר את התשבץ! כמובן שהייתי כולי נסער – איך לא חשבתי על זה קודם? הרי MATLAB, מבוססת על מטריצות – כמובן תאפשר פתרון קל ומהיר של האלגוריתם הסבוך הזה. 

הפתרון הראשוני שמצאתי לקח כ-1,000 שניות (או 15 דקות) – כנראה שמי שכתב אותו לא שמע על דרכים להאיץ אלגוריתם של MATLAB. הגרסה השניה והשלישית היו טובות יותר וכותביהן היו מתכנתים טובים יותר, ואפילו תיעדו את הקוד כדי שאוכל להבין מה נעשה – ולשפר אותו. הגרסה הטובה ביותר שמצאתי, הייתה מבוססת על רקורסיה וארכה רק 100 שניות (או דקה וחצי) לפתרון – אכן פתרון מהיר.לא האמנתי – סופסוף אוכל להשקיע את זמני הפנוי בפעולות חיוביות יותר – כמו לטייל עם הכלב או לבלות עם בני הקטן. אגב, אתמול – מצאתי את הגרסה הטובה ביותר – אשר לוקח רק כ-2 שניות להגיע לפתרון, והוא כלל לא מבוסס על רקורסיה.
 


לאלו מכם שעדיין מבזבזים את זמנם - מצורף כאן קובץ הפתרון, אשר הורדתי בחינם מהאתר של MathWorks. תיהנו, ואל תשכחו – MATLAB היא הרבה מעבר לתוכנה שמקצרת את זמן הפיתוח – זו תוכנה שמאפשרת לכם לבלות זמן איכות עם המשפחה והחברים, ונלחמת עבורכם במפלצות יפניות.

נ.ב.
לאלו שלא שמעו על תשבץ זה, להלן עיקריו: דמיינו לוח של 9X9 משבצות. כל משבצת יכולה להכיל אחת מהספרות 1 - 9. המטרה היא למקם ספרות בכל אחת מהמשבצות. החלק הקשה הוא למקם את הספרות כך שלא ייווצר מצב שבו באותה השורה ובאותה עמודה מופיעה אותה הספרה. כמו כן, כל תת-ריבוע של 3X3 משבצות צריך להכיל את כל הספרות (1-9). ולבסוף, בכדי שיהיה מעניין – כל לוח סודוקו מתחיל בכך שישנן מספר משבצות שכבר שובצו בהן ספרות, ויש להשלים את כל היתר. אבל תקשיבו למי שכבר היה שם – אל תתקרבו לזה אם אין לכם רישיון של MATLAB.


יום ראשון, 18 ביולי 2010

שימו לינק ל-Simulink !

זו, פחות או יותר, היתה בקשה שהתקבלה באחת מהתגובות לפוסט של חודש אפריל. אז לרגל סיום המונדיאל, ולקראת שני סמינרים בנושא Simulink, הנה פוסט שבמקרה הטוב יעשיר את הידע שלכם בשימוש בתוכנה, ובמקרה הרע – רק יסייע לכם להעביר את הזמן... אז מה זה בכלל Simulink ? Simulink היא סביבה לביצוע סימולציות המשלבות מגוון תחומים (multidomain simulations) וכן לתכנון מבוסס-מודל (Model-Based Design) של מערכות דינמיות ומשובצות-מחשב. היא מספקת ממשק גרפי אינטראקטיבי ואוסף של ספריות בלוקים (הניתן להתאמה אישית), אשר יחד, מאפשרים למשתמש לתכנן, לסמלץ, לממש ולבדוק מגוון מערכות תלויות-זמן, כולל מערכות תקשורת, בקרה, עיבוד אות, עיבוד וידאו ועיבוד תמונה.
כדי לפתוח את התוכנה, יש לכתוב Simulink ב-command window של MATLAB, או פשוט ללחוץ על האייקון של Simulink:


הדבר הראשון שייפתח לפניכם הוא ה-Simulink Library Browser, שמכיל את אוסף אבני הבניין בהן אתם יכולים להשתמש בסביבת Simulink (משתמשים ותיקים מוזמנים להיזכר כיצד התפריט הזה השתנה עם השנים) .


אבני הבניין מחולקות לכלים מתחום הבקרה, מערכות תקשורת, עיבוד אות, עיבוד וידאו ותמונה, אוירונאוטיקה וכו'. חבילת Simulink בסיסית מגיעה, כמו חבילת MATLAB בסיסית, עם אוסף די עשיר של בלוקים שאמורים לסייע לכם במידול מערכות. אך כמובן ששימוש באוספי הבלוקים הנוספים, המכונים Blocksets והנמכרים בנפרד, אמור לחסוך מכם את הצורך לבנות בלוקים מאבני הבניין הבסיסיות, וכמובן את הצורך לוודא שהבלוקים שיצרתם עושים את העבודה כהלכה...

כעת, על מנת להדגיש את היתרון של Simulink על MATLAB בפיתוח של מערכות תלויות-זמן, ננסה להשתמש בכל אחד מהכלים על מנת לצייר גרף של אות סינוס, על פני 10 שניות.

ב-MATLAB, עלינו להשתמש בשורות הקוד הבאות:


ב-Simulink, לעומת זאת, אין צורך ב"כתיבת" השורה הראשונה (זו שמגדירה את וקטור הזמן) ! ראשית, יש לפתוח מודל ריק חדש (המקבילה של פתיחת m-file ריק חדש) על ידי לחיצה על New Model מתוך ה- Simulink Library Browser:

ואז, יש לגשת למחיצת sources של Simulink, לסמן את בלוק ה-Sine Wave, ולא לעזוב את לחצן העכבר עד שמביאים אותו אל מעל המודל הריק.

בצורה דומה, יש להביא למודל את בלוק ה-Scope שבמחיצת Sinks של Simulink, לקבלת:


כעת, כל שנותר הוא רק להגדיר ל-Simulink איזה בלוק מכניס נתונים לבלוק האחר (די טריוויאלי במקרה הזה, אך לא כל כך טריוויאלי במקרה של מודל המכיל חצי מיליון בלוקים). הדבר נעשה על ידי סימון בלוק המוצא (Sine Wave), לחיצה על מקש Ctrl במקלדת, ועזיבת המקש רק לאחר סימון בלוק היעד (Scope).


כך בעצם חיברנו בין הבלוק שיוצר לנו את גל הסינוס, ובין הבלוק שמציג אותו. המודל הסופי מופיע לעיל, ואם תלחצו על לחצן ה-Start simulation המסומן בשורה השניה מלמעלה, ואז קליק-כפול על בלוק ה-Scope, תקבלו את הגרף המבוקש. לחיצה על לחצן המשקפת  (Autoscale) תניב תוצאה זהה לזו שהניב קוד ה-MATLAB, אך כפי שנכתב – ללא צורך בהגדרת וקטור הזמן.

מדוע ב-Simulink אין צורך להגדיר את וקטור הזמן? מה קורה כשלוחצים פעמיים על בלוק ה-Sine Wave? כיצד ניתן לשלב קוד MATLAB או קוד C בתוך מודל Simulink? האם ידעתם שניתן להמיר מודל Simulink לקוד C, VHDL או Verilog בצורה אוטומטית? ולמשתמשים המנוסים – מה המודל הכי גדול שיצרתם עד כה? אגב, אין צורך לספור ידנית את מספר הבלוקים, פשוט ניתן להשתמש בפקודת sldiagnostics...

יום שני, 14 ביוני 2010

ה-System Objects כבר כאן !

בגרסת R2010a, שיצאה בתחילת חודש מרץ, נוספו לסביבת MATLAB כלים ואלגוריתמים המאפשרים עיבוד רצף (Stream Processing), מידול מורחב ב-fixed-point והמרה אוטומטית של קוד MATLAB לקוד C גם עבור אפליקציות מתחום עיבוד האות והתמונה. בעזרת אובייקטי המערכת (System Objects) הללו, לא צריך, למשל, לטעון את כל סרטון הוידאו רק בשביל לבצע edge detection על הפריים הראשון שלו, ולא צריך להמתין לטעינת כל סיגנל השמע רק על מנת לבצע FFT ל-256 הדגימות הראשונות.
הכתבה הבאה סוקרת את החידוש הנ"ל: לחץ לקבלת הכתבה. 
ואגב – בגרסת R2010b צפויים להצטרף עוד 95 אובייקטי מערכת אשר אמורים להקל על פיתוח מערכות תקשורת. אבל אל תגלו לאף אחד מאיפה אתם יודעים את זה...

האם אובייקטי המערכת עשויים להיות שימושיים עבורכם? לאילו עוד Blockset-ים של Simulink הייתם רוצים גישה ישירה מתוך MATLAB?

יום ראשון, 2 במאי 2010

עולם הפרסום


אני זוכר שבתור סטודנט לתואר ראשון הייתי מסתבך לא מעט כשהייתי מנסה לשמור Figure של MATLAB בתוך מסמך Word שבו נדרשתי לרכז את תשובותיי לתרגיל בית בקורס זה או אחר. קורס אחרי קורס, תרגיל בית אחרי תרגיל בית, שאלה אחרי שאלה, גרף אחרי גרף, הייתי ניגש לחלון ה-Figure, בוחר בתפריט File ובו באופציה Export Setup. וכל זאת, רק בשביל ללחוץ על לחצן Export בחלון שנפתח. ואז, הייתי צריך לבחור שם שבו הייתי רוצה שהגרף יישמר, לזכור לשמור אותו בצורה של תמונת JPEG או כקובץ bmp, ולשנות את מיקום ברירת המחדל בו הקובץ יישמר. לאחר מכן, הייתי צריך לבחור בתפריט Insert במסמך ה-Word, ובו ב-Picture, וב-From File. וכדי לשמור על הסדר הטוב, כמובן שגם הייתי טורח למחוק את קובץ התמונה אחרי הכנסתה למסמך ה-Word...
 


נזכרתי בתלאות שתוארו למעלה בעקבות הפוסט של Doug Hull מחברת The MathWorks מתאריך 21.4.2010. בבלוג שלו, Doug מתאר את הדרך שגיליתי רק אחרי סיום התואר הראשון, והיא להשתמש בפקודת
Print-dmeta;
אחרי ציור הגרף.
אחרי השימוש בפקודה הזו ניתן לעבור למסמך ה-Word, ופשוט ללחוץ על המקשים Ctrl+v. זה הכל ! Doug, אגב, גם מציע לעשות מההפקודה הזו Shortcut.

ואפרופו הפצה של נתונים מ-MATLAB לתוכנות אחרות, אני מזמין אתכם להשתמש בלחצן ה-Save and Publish שמופיע כחלק מה-Editor של MATLAB, וכן בלחצן ה-Select and publish configuration שמימינו. שני הלחצנים מוקפים בעיגול בתמונה הבאה, ואני חייב להודות שהם ממש משדרגים את המראה של פתרונות תרגילי הבית שאני מגיש במסגרת התואר השני, ובמיוחד כאשר אני עושה שימוש ב-Cell mode.


מי שלא מכיר את הלחצנים, מוזמן למצוא עליהם מידע כאן. ומי שמכיר, ודאי ישמח לגלות שכבר החל מהגרסה הקודמת של MATLAB (שיצאה בספטמבר 2009) ניתן להפיץ קוד MATLAB ישירות לתוך קבצי PDF. הלינק האחרון, אגב, הוא מתוך הבלוג של Michael Katz (גם הוא מ-The MathWorks).

ונקודה אחרונה – אם ברצונכם לייצר בצורה אוטומטית דו"חות מותאמים אישית מתוך קוד ה-MATLAB שלכם, אתם מוזמנים לבדוק את ה-MATLAB Report Generator. אגב, אם אתם עובדים עם Simulink, כדאי לכם לבדוק גם את ה-Simulink Report Generator. ואם לא, אז לא...

אילו עוד בלוגים בנושא MATLAB ו-Simulink אתם קוראים ? איך אתם מעבירים גרפים מ-MATLAB לתוכנות אחרות? האם אתם יודעים מה עומד מאחורי ראשי התיבות JPEG ו-PDF? האם עד הפוסט הזה הזדמן לכם לעבוד עם הפיצ'רים והכלים השונים שהוצגו בו? ואם הכרתם את ה-Simulink Report Generator, האם גם ידעתם שהוא מאפשר לכם להשוות בקלות בין שתי גרסאות שונות של מודל Simulink?

יום שני, 5 באפריל 2010

מה חדש ב-MATLAB ? (חלק 3)

Push the button

בסוף הפוסט הקודם שאלתי אתכם האם יש לחצנים שחסרים לכם ב-MATLAB. קיבלתי רק תשובה אחת, והייתי רוצה להאמין שזה בגלל שלרובכם לא חסר דבר ב-MATLAB, אבל אני בספק שזו אכן האמת. בהנחה שאתם מתביישים לכתוב על הלחצנים שחסרים לכם, עומדות לרשותכם שתי אפשרויות. האחת, היא לחכות ש-The MathWorks תקבל בקשה דומה מקולגה שלכם ותבחר לממש אותה. והשניה, היא ליצור את הלחצן בעצמכם. האופציה השניה, מסתבר, היא די פשוטה, והיא אפילו רצויה במידה שחסר לכם לחצן אקזוטי, דוגמת כזה שישתמש בפקודה web כדי לפתוח עבורכם את אתר האינטרנט של אוהדי מכבי פתח תקוה.


כשאני עומד לספר ללקוחות על האופציה להוסיף לחצן לסביבת MATLAB, אני בדרך כלל מתחיל בשאלה "האם אתם יודעים כיצד ניתן לבצע clear all, close all ו-clc בלחיצה אחת?". אנשים בדרך כלל לא יודעים כיצד לעשות זאת, למרות שכבר הייתי עד מספר פעמים לתשובה המקורית "פשוט לוחצים על ה-X הקטן בצד ימין למעלה". במקרה שאני מקבל את התשובה הזו, אגב, אני משנה את השאלה ל"איך ניתן לבצע את שלוש הפעולות בלחיצה אחת ולהמשיך לעבוד בסביבת MATLAB"... והתשובה – שימוש ב-Shortcuts.


Shortcuts, או קיצורי דרך, אינם דבר חדש ב-MATLAB,
ועדיין – רבים לא מודעים ליכולת שלהם להריץ בלחיצת עכבר אוסף של פקודות או סקריפטים שהם מקישים מידי יום או מידי שעה. בין אם זה clear all + close all + clc, פתיחת מספר M-Files, מעבר ממחיצה אחת למחיצה אחרת או גישה מהירה מתוך ה-MATLAB לאתר האינטרנט של קבוצת הכדורגל האהודה – Shortcuts הם הפתרון.


אז איך יוצרים Shortcut?
כדי להוסיף קיצור דרך, יש ללחוץ על המקש הימני של העכבר כשהסמן מעל ה-Shortcuts Bar, השורה השנייה מתחת לשורת התפריטים.



ואז, יש לבחור ב-New Shortcut. בחלון שייפתח אפשר לתת שם לקיצור הדרך, לבחור תמונה שתוצג לצד השם הזה בשורת ה-Shortcuts, וכמובן – לכתוב קוד MATLAB או שם של M-File שהייתם רוצים שיתבצע כשתלחצו על הלחצן. בדוגמה למטה, למשל, יתבצעו שלוש פקודות הניקוי שהוזכרו קודם, יחד עם פקודה הסוגרת מודלים פתוחים של Simulink.




ובדוגמה הבאה, למשל, תתבצע פתיחה של אתר האינטרנט שהוזכר קודם:


כפי שבטח שמתם לב, אפשר ליצור קיצורי דרך רבים. וברגע שיהיו לכם יותר מידי קיצורי דרך, תמיד תוכלו לארגן אותם באמצעות ה-Shortcuts Organizer האינטואיטיבי, אליו ניתן להגיע או דרך קליק ימני על שורת ה-Shortcuts (כמו קודם), או דרך תפריט ה-Start של MATLAB בפינה השמאלית התחתונה של התוכנה (ראו צילום מסך למטה). לחצן ה-Start, אגב, מאפשר גישה נוחה לעוד כלים שימושיים ותפריטים חשובים, אבל אותו אני כבר אשאיר לכם לחקור לבד.

האם שמתם לב ל-Start של MATLAB לפני הפוסט הזה? אילו Shortcuts מעניינים יש לכם? האם הכרתם את פקודת web? ומה לגבי bdclose all? ואיזו קבוצה אתם אוהדים?

יום שבת, 6 במרץ 2010

מה חדש ב-MATLAB ? (חלק 2)

 תאים, רבותי, תאים
השבוע שוחחתי עם לקוח, לא אפרט מאיזו חברה, שהתעניין ביכולת לעבור בצורה אוטומטית מקוד MATLAB לקוד C. מפה לשם מצאתי את עצמי מספר לו על העזרה שמספק ה-
M-Lint Code Analyzer בכל הקשור ליצירת קוד C מתוך MATLAB, כשלפתע התברר לי שאותו מהנדס בכלל לא מכיר את הפונקציונליות הבסיסית של הכלי. כמובן שהסברתי לו עליה בקצרה ואף הפניתי אותו לפוסט הקודם בבלוג הזה, ולאחר מכן התחלתי לעבור איתו על דוגמה שעושה שימוש ב-Cell Mode. אז, התברר לי שגם את ה-Feature הזה הוא לא מכיר, רק שהפעם לא היה לאן להפנות אותו להשלמת הידע החסר, והתיישבתי לכתוב את הפוסט הנוכחי.

כמו ה-M-Lint Code Analyzer, גם Cell Mode הוא כלי די ותיק. ייתכן ששמתם לב אליו, אבל לא השתמשתם בו. ואם לא שמתם לב אליו, כנראה שהוא פשוט מנוטרל אצלכם (ניתן לתקן זאת על ידי פתיחת M-File, ובחירה בתפריט Cell, ובו – Enable Cell Mode). ה-Feature הזה מאפשר לכם לחלק את ה-M-File שלכם למקטעים, אשר לא חייבים לרוץ כולם יחד. ניתן, למשל, לשנות מקטע מסויים ולהריץ אותו מספר פעמים, ורק אחרי שאתם מרוצים מביצועיו – לעבור הלאה, ל-Cell הבא.

יצירת מקטע מבוצעת על ידי הסימן %%, ואם תכתבו גם טקסט לצידו, הוא יהפוך לכותרת המקטע (דבר שימושי במיוחד אם אתם נעזרים ביכולת ליצור מסמך Word, PowerPoint, PDF או HTML מתוך ה-m-file שלכם). הרצת תא מתבצעת על ידי בחירה בלחצן השמאלי התחתון בשורת הלחצנים שב-Editor (Evaluate Cell, אפשר גם ללחוץ על מקשי Ctrl ו-Enter יחד). הרצת תא ומעבר לתא הבא מתאפשרת על ידי בחירה בלחצן מימין ללחצן הקודם (או Ctrl+Shift+Enter).
 




שני האלמנטים הבאים מאפשרים לשנות מספר בתא (שהסמן ממוקם לידו או מסמן אותו) על ידי הפחתת/הוספת מספר ממנו (במקרה שבאיור למעלה, המספר 1.0) או הכפלה/חלוקה בפקטור מסויים (במקרה הנ"ל, הפקטור 1.1). כל שינוי של המספר ילווה גם בהרצה מחודשת של התא, והדבר שימושי כאשר מעוניינים לבחון פרמטר כלשהו (למשל, סף מסויים או מספר המקדמים של מסנן).

את יתר הלחצנים אני בטוח שתצליחו לפענח לבדכם (ובקשר ללחצן השני מימין, נסו אותו אחרי שתיתנו שמות לתאים שיצרתם). שימו לב, אגב, שבגרסת R2010a, שמתוכננת לצאת ב-5/3/2010, מסתמן שאמורים להתווסף שני לחצנים חדשים, המאפשרים לעבור לתא הבא או לתא הקודם מבלי להריץ את התא הנוכחי (הלחצנים מופיעים בצד שמאל באיור למטה, ואגב, הפונקציונליות שלהם כבר קיימת – חץ למטה + Ctrl או חץ למעלה + Ctrl).
 

ייתכן שלא תראו את הלחצנים החדשים מבלי לבצע קסטומיזציה של האייקונים שמופיעים בסרגל הכלים התחתון. תוכלו לעשות זאת על ידי בחירה ב-File-Preference-Toolbars-Editor-Cell Mode.  שם גם תוכלו להשפיע על המראה של סרגלי כלים נוספים בסביבת העבודה.
למה אתם משתמשים ב-Cell Mode? אילו לחצנים הייתם מוסיפים לו? האם יש לחצנים אחרים שחסרים לכם ב-MATLAB? מה עומד מאחורי ראשי התיבות PDF
ו-HTML? האם השתמשתם בקדם-גרסה (Prerelease) של R2010a? ומדוע לא עניתם על אף שאלה מתוך אלה ששאלתי בסוף הפוסט הקודם?

יום רביעי, 17 בפברואר 2010

מה חדש ב- MATLAB ?

לפעמים אנחנו כל כך עסוקים בלסיים את המשימות שעל השולחן במועד, כך שאנחנו לא מקדישים זמן לחשוב על דרכים לבצע אותן בצורה יעילה יותר
את שבוע העבודה הראשון שלי בחברת סיסטמטיקס, לפני יותר משלוש שנים, הקדשתי להתעדכנות בחידושים בכלי MATLAB ו-Simulink. אם להגיד את האמת, חשבתי שאוכל לסיים את המשימה תוך פרק זמן קצר, אולם מהר מאוד גיליתי כי על אף שבראיון העבודה הצהרתי שאני דובר שלוש שפות - עברית, אנגלית ו-MATLAB - יהיה עליי להקדיש לא מעט זמן לשיפור ידיעותיי בשפה השלישית. התחוור לי כי כל כך הרבה פקודות, לחצנים וממשקי משתמש גרפיים נוספו לכלים במהלך השנים, ואני, שהייתי עסוק בלסיים את המשימות שלי במועד, לא הקדשתי זמן להתעדכנות בחידושים שהיו יכולים לגרום לי לסיים את העבודה אפילו לפני הדד-ליין.

חברת The MathWorks, מפתחת הכלים MATLAB ו-Simulink, מוציאה גרסת מוצרים
חדשה פעמיים בשנה, ואותה זכאים לקבל הלקוחות אשר נמצאים תחת חוזה שירות (אשר מקנה גם את הזכות לקבלת תמיכה טכנית).

הגרסה האחרונה, R2009b, יצאה בתחילת חודש ספטמבר 2009, והיא מכילה
עדכונים ל-85 מכלי The MathWorks, וביניהם – MATLAB 7.9 ו – Simulink 7.4. המשתמשים מצאו 420 באגים בגרסאות הקודמות והם תוקנו בגרסה החדשה (תודו שהיה לכם כיף למצוא אותם...),  ו-580 פיצ'רים חדשים התווספו. בפוסטים הקרובים נדון בכמה מהחידושים בגרסה האחרונה של כלי The MathWorks, אבל עוד קודם לכן – נעסוק במספר "חידושים ותיקים" שאני בטוח שרבים מכם בכלל אינם מודעים אליהם. אלה מכם שכבר עובדים עם הכלים שנסקור את החידושים בהם מאוד יהנו מהקריאה, אבל גם מי שעדיין לא עובד עם כלים מסוימים יוכל ללמוד על היכולות שלהם.

אחד ממרכיבי המפתח של MATLAB, שמניסיוני לא רבים מודעים אליו, הוא ה- M-Lint Code Analyzer.  הכלי הזה, אשר מגיע כחלק מ-MATLAB, בודק את הקוד שהמשתמשים כותבים ב-editor ומחפש בעיות או מציע שינויים שאמורים לשפר את ביצועי האלגוריתם. אם הקוד שלכם "מושלם", תראו בפינה הימנית העליונה של ה-editor ריבוע ירוק. במקרה שיש לכלי הצעות לייעול האלגוריתם או להפיכתו לקוד שירוץ ללא הודעות שגיאה, תראו באותו מקום ריבוע כתום או אדום, בהתאמה.

הנה דוגמה לקוד בעייתי (ראו את הריבוע האדום בפינה הימנית העליונה של ה-editor):

בדוגמה הנ"ל, ה- M-Lint Code Analyzer מתריע על אי סיומה של שורה מספר 2 עם התו ";" (גורם לאי יעילות), על אי סגירת סוגריים בשורה 3 (דבר שימנע מהקוד לרוץ ללא הודעת שגיאה) ועל משתנה שמימדיו משתנים בתוך לולאה (גורם לאי יעילות).

מגרסה לגרסה מורחב מאגר הבעיות שהכלי הזה מסוגל לאתר, וההודעות שהכלי מציג הופכות ליותר ויותר ברורות, דבר שאמור להקל על המשתמשים כשהם מנסים להחליט אם לקבל את העצה שלו או לא. שימו לב שלעצלנים שבינינו יש אפשרות ללחוץ על כפתור ה-Fix המופיע בהודעה המלווה את שורה 2, ובך לחסוך חיפוש אחר התו ";" במקלדת. נקודה נחמדה נוספת היא העובדה שה-M-Lint Code Analyzer הוא כלי מאוד מנומס, ולראיה – קראו שוב את ההערה המלווה את שורה 3. הכלי לא מאשים אתכם ששכחתם סוגריים, הוא פשוט רומז בעדינות שקיים חוסר איזון בין תווי פתיחת הסוגריים ותווי הסגירה.

האם הכרתם את ה-M-Lint Code Analyzer לפני הפוסט הנוכחי? האם ידעתם של-The MathWorks יש מעל 80 מוצרים? יש חידוש מסויים שהייתם רוצים שארחיב עליו יותר בפוסט הבא? אם הייתם המפתחים של הגרסה העברית של MATLAB, 
איך הייתם מעירים למשתמש שהוא שכח סוגריים?