יום שלישי, 12 באפריל 2011

שי לחג – גרסת R2011a

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


בתקופה הקרובה אסקור לעומק כמה מהחידושים המשמעותיים, אבל בינתיים – הנה משפט אחד על כל אחד מהעיקריים שבהם:
 
System Toolboxes חדשים לפיתוח ב-MATLAB ו-Simulink:
  • Computer Vision System Toolbox – מכיל אלגוריתמים חדשים מתחום הראיה הממוחשבת ומשלב בתוכו את יכולות ה-Video and Image Processing Blockset.
  • Phased Array System Toolbox – כלי חדש המשמש לתכנון, סימולציה וניתוח של מערכות מכ"מ, מערכות רפואיות (למשל Ultrasound), מערכות סלולר ועוד.
  • DSP System Toolbox – מאחד את יכולות ה-Filter Design Toolbox וה-Signal Processing Blockset.
  • Communications System Toolbox – מאחד את ה-Communications Toolbox וה-Communications Blockset.
כלי יצירת קוד חדשים:
  • MATLAB Coder – לייצור קוד C/C++ ישירות מתוך פונקציות MATLAB, ללא צורך ברישיון Simulink.
  • Simulink Coder – לייצור קוד C/C++ ישירות מתוך Simulink ו-Stateflow (מאחד את יכולות ה-Real-Time Workshop וה-Stateflow Coder, ומוסיף על יכולות ה-MATLAB Coder).
  • Embedded Coder – לייצור קוד Embedded ישירות מתוך MATLAB, Simulink או Stateflow (מאחד את יכולות ה-Real-Time Workshop Embedded Coder, Embedded IDE Link וה-Target Support Package, ולא מחייב רישיון Simulink).
בין היכולות החדשות במשפחת מוצרי MATLAB:
  • ביצועים משופרים לפונקציות רבות מתחום האלגברה הלינארית.
  • אפליקציות המקומפלות תוך שימוש ב-MATLAB Compiler וב-Parallel Computing Toolbox מסוגלות לרוץ באופן מקבילי על עד 8 ליבות אצל משתמש הקצה.
  • אפשרות לייצר אפליקציות Standalone מיישומים העושים שימוש ב-System Objects, באמצעות ה-MATLAB Compiler.
  • פותרן (Solver) חדש ב-Optimization Toolbox לבעיות תכנות רבועי (Quadratic Programming) בעלות אלפי אילוצים.
  • ממשק חדש לפתרון בעיות אופטימיזציה של תיקי השקעות ב-Financial Toolbox.
בין היכולות החדשות במשפחת מוצרי Simulink:
  • Signal Logging Selector להשוואת תוצאות סימולציה של מודלים שונים וריצות שונות של אותו מודל ב-Simulink.
  • FPGA-in-the-loop, Customizable I/O ותמיכה ברכיבי Xilinx ב-Simulink HDL Coder, EDA Simulator Link ו-xPC Target.
  • זיהוי אוטומטי של שגיאות Overflow וחלוקה באפס בעת שימוש בטכנולוגיית Polyspace ב-Simulink Design Verifier.     
מידע נוסף על הגירסה החדשה ניתן למצוא כבר כעת באתר MathWorks.

יום רביעי, 9 במרץ 2011

וגרה מטריצה עם וקטור

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

ראשית, הייתם מגרילים את המטריצה:















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










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














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















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








אולם פונקציה שרבים אינם מכירים יכולה להתמודד עם חוסר ההתאמה הזה בין מימדי המטריצה והוקטור כל עוד יש התאמה מינימלית – הרשו לי להציג בפניכם את bsxfun, והנה דוגמה לשימוש בה לצורך ביצוע פעולת החיסור (minus)
בין המטריצה A והוקטור b:















בשורת הקוד האחרונה נעשה שימוש ב-function handle, וכפי שניתן לראות, התוצאה שהתקבלה זהה לזו שהתקבלה בדרך הקודמת, אולם חשוב לציין שהדרך החדשה צורכת פחות זכרון, וברוב המקרים שבהם תשתמשו ב-bsxfun היא גם תניב את התוצאות מהר יותר מהאלטרנטיבה שהוצגה.


לסיום, שימו לב שכמובן היינו יכולים לעשות את כל המשימה עם שורת קוד אחת:














האם הכרתם את bsxfun? חשבתם על דרך אחרת לבצע את המשימה שהוצגה? יש פונקציה שעזרה לכם בעבר ולדעתכם רבים לא מכירים אותה? האם אתם מכירים את השימוש ב-@ בתוך MATLAB?

יום חמישי, 10 בפברואר 2011

הכל חוץ מקפה

בסוף ינואר ערכה MathWorks בבוסטון המושלגת את אירוע הפתיחה השנתי שלה לעובדים ומפיצים. בין שלל ההרצאות המעניינות על הכלים השונים, התקיימה תערוכה של אפליקציות שפיתחו המהנדסים השונים של החברה באמצעות MATLAB ו-Simulink. כפי שתיווכחו, אין גבול לדברים שאפשר לעשות עם כלי MathWorks.
למשל, ניתן היה להתרשם בתערוכה ממערכת המסוגלת לפתור תשבצי סודוקו ע"י צילום התשבץ עם מצלמה פשוטה, הזרמת התמונה לתוך MATLAB  באמצעות Image Acquisition Toolbox, זיהוי הספרות, פתרון התשבץ (קראו את הפוסט של רוני בנושא או את הפינה של קליב מולר, ממציא ה-MATLAB), והצגת התוצאה על גבי המסך:

אגב, מולר עצמו הסתובב בתערוכה והתרשם מאוד מ"הילדים שלו". יגאל ירוסלבסקי (מהנדס אפליקציה המתמחה ביצירת קוד HDL מתוך כלי MathWorks) ואני ניצלו את ההזדמנות כדי להצטלם איתו לתמונה למזכרת (יגאל מימין, מולר במרכז).


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


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



מה הדבר הכי מעניין שעשיתם עם כלי MathWorks? האם ידעתם שהחל מגרסת R2010b ה-Image Acquisition Toolbox תומך גם בסטנדרט GigE Vision? האם שיערתם שהשיא העולמי של פתרון קוביה הונגרית עומד על 6.77 שניות? ניסיתם פעם להמיר קוד MATLAB או מודל Simulink ל-vhdl או verilog?

יום חמישי, 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? ואיזו קבוצה אתם אוהדים?