אני שמח לארח בבלוג פעם נוספת את רוני פאר, אשר כתב פוסטים רבים עד כה, האחרון שבהם - לפני שלושה חודשים. הפוסט של רוני יעסוק הפעם ביכולות הפקת הדו"חות מתוך סביבת MATLAB.
בעברי כסטודנט מצאתי את עצמי לא מעט פעמים מבצע פעולות העתק+הדבק על מנת לקחת גרפים שהופקו מ-MATLAB ולשתול אותם במסמך שאותו הייתי צריך להגיש. תמיד הנחתי שישנה דרך נוחה יותר לעשות זאת, ושגם בטח יש שיטה יעילה יותר מה-Equation Editor בשביל לשתול את כל הנוסחאות הרלוונטיות. אבל בשעה אחת בלילה, בזמן ששאר חבריי למעונות היו מבלים או ישנים, לא כל כך היה את מי לשאול...
לא הרבה יודעים את זה, אבל מתוך קבצי MATLAB, גרפים, דיאגרמות Simulink וטבלאות Stateflow ניתן להפיק בקלות מסמכי תיאור ודו"חות בפורמטים שונים, כמו:
RTF, XML, PDF, DOC ו-HTML. יכולות אלו עשויות לחסוך לכם לא מעט זמן, בין אם אתם סטודנטים ובין אם אתם חוקרים או מהנדסים בתעשיה.
אז, אם ברצוני לבצע את הפעולות הבאות:
• לייצר נוסחאות הכוללות פקודות LaTeX
• לפרמט את הטקסט והפונטים כך שיכללו הדגשות, קווים נטויים, לינקים וכו'
• להפיק רשימות ממוספרות או עם Bullets
• לתפוס גרפים שהוכנו בעזרת MATLAB ולשלב אותם במסמך חיצוני
יש כמה דרכים לעשות זאת !
הדרך הראשונה היא על ידי שימוש בפקודה "publish" המובנית ב-MATLAB, ורועי התייחס אליה כחלק מהפוסט שלו שנקרא "עולם הפרסום" שפורסם לפני כשלוש שנים. פקודה זו לוקחת קובץ MATLAB, ובהתאם למבנה שלו היא מפיקה ממנו מסמך הכולל קטעי קוד, הערות, גרפים ותמונות שמופקים כתוצאה מהרצת הקוד וכו'. בגרסת R2012b כל היכולות הרלוונטיות שולבו ב-TAB בעל השם PUBLISH, והוא יתגלה לכם כאשר תהיו במצב עריכה של קובץ m:
אופציה זו היא שימושית מאוד, בעיקר אם עובדים עם פונקציה או סקריפט בודד, ודוגמה לכך נמצאת בתיקיה מכווצת זו (פשוט בצעו publish לדוגמה מספר 1). באופן אישי, בסמינרים שאני מעביר כיום, אני נעזר בפונקציה הזו בכדי לסנכרן את כל ההדגמות שלי (אני משלב מקטעי תיאור של ההדגמה, מוסיף נוסחאות שמתארות התהליך, לינקים שמעבירים אותי בין קבצים ובין הרצות, וכמובן - כל המסמך הזה יכול להיפתח ב-browser של MATLAB או אחד חיצוני). אבל - השיטה הזו בעייתית כאשר רוצים לייצר מסמכים ממספר קבצים או כשרוצים לפרמט את התוצר הסופי בצורה מסויימת, למשל: אם רוצים לייצר מסמך Word שיהיה בעל עמודים ממוספרים, או אם מעוניינים בגרפים עם כותרות משתנות (כתוצאה מעשרות הרצות), או אם רוצים אפשרות לקבוע שלפעמים כן יופקו גרפים ולפעמים לא
(Conditional Reporting).
השיטה השניה מרחיבה את יכולות האפשרות הראשונה והיא בעלת גמישות גבוהה יותר (אבל - לא מגיעה כחלק מחבילת ה-MATLAB הבסיסית). היא נעזרת בפונקציות המובנות במוצר MATLAB Report Generator לצורך שליטה מירבית על פורמט הדו"ח המתקבל. אני מאד אוהב להשתמש בממשק המשתמש שמגיע יחד עם המוצר הזה, ונפתח על ידי הפעלת הפקודה "report". ממשק זה, כפי שניתן לראות למטה, מורכב מ-3 חלקים: בחלק השמאלי רואים את מבנה הדו"ח שהולך ונבנה, בפורמט היררכי של "עץ". בחלק האמצעי ניתן לראות רשימה של אובייקטים מוכנים, המחולקים לנושאים (אובייקט הוא בעצם פקודה שתשמש לפירמוט הדו"ח, ופקודה שכזו לדוגמא יכולה להיות "פרק חדש", "תת-פרק חדש", "טבלה", "figure" או "לולאת FOR"). בחלק הימני ניתן לראות את התכונות המשוייכות לאובייקט (למשל, עבור תמונה, ניתן לראות את הגודל שלה, האוריינטציה ועוד).
כלי זה מאפשר לבנות את ה"Template" לדו"ח שאותו רוצים להפיק, ואז לשתף אותו עם עוד אנשים. בכדי להקל על השימוש בכלי, מספר דוגמאות ודו"חות בסיסיים כבר משולבים כחלק ממנו. באופן אישי, הדרך שלי להפיק את המירב מהכלי הזה היא לרוב על ידי שימוש בו כחלק מסביבת ניסוי, כלומר לצורך ביצוע אנליזת "מונטה-קרלו".
הרעיון בשיטת "מונטה-קרלו" הוא ביצוע בדיקות רבות תוך כדי שינוי חלק מהפרמטרים של המערכת. למשל, אם מפתחים מסנן חדש בעולם עיבוד האותות, או אם רוצים לבדוק כיצד האלגוריתם שלנו מתמודד עם שינוי במסה או אינרציה של מערכת מכנית, מעוניינים לבצע סט של פעולות שלוקחות מספר רב של כניסות, מעבירות אותן דרך המערכת ובודקות מה התוצאה, ואת זה היינו רוצים לבצע עבור הערכים האפשריים השונים של הפרמטר. בתהליך שכזה היינו מעוניינים לבצע כמה פעולות:
• טעינת מידע מתוך קבצים (m, MAT) וביצוע פעולות מקדימות נוספות
• הגדרת פרמטרי הבעיה ומספר ההרצות (או התנאים) לכל פרמטר
• בדיקה בלולאות (לרוב לפחות 2 לולאות עבור לפחות 2 פרמטרים)
o חישוב תוצאות נקודתיות
o הצגת גרפים עבור כל מקרה ושמירה לצורך תיעוד
• ריכוז נתונים בטבלה או בגרף מסכם
• פעולות לאחר הריצה – שמירת תוצאות ל-MAT, מחיקת משתנים
את כל הפעולות הללו ניתן לבצע בעזרת פקודת report, ודוגמה לכך נמצאת בתיקיה מכווצת זו (בדוגמה מספר 2 יש קובץ לדוגמה וכן מסמך PDF שנוצר בעקבות הפעלתו).
ולפני סיום, כמה מילים על הפקת דו"חות מסביבת Simulink - אלה מכם שעובדים בסביבת Simulink ישמחו לדעת שה-Simulink Report Generator, שהוא מוצר נוסף, מוסיף לכל היכולות שהוזכרו לעיל אובייקטים מוכנים לבלוקים של Simulink ושל Stateflow, וגם הוא כולל בתוכו טמפלייטים מוכנים של דו"חות. ניתן להיעזר במוצר זה ישירות מתוך תפריט ה-File:
אני בטוח שהמידע לעיל יחסוך לכם שעות של עבודה. השאלה שכמובן נשאלת היא האם הזמן שתחסכו ישמש לצורך בילוי והנאה או לצורך ביצוע בדיקות נוספות והתמקדות באלגוריתמים משופרים וטובים יותר...
האם אתם מפיקים דו"חות רבים במסגרת עבודתכם? האם אתם משתמשים באופציית ה-publish, באופציית ה-report או באף אחת מהן? האם אתם מבצעים סימולציות מונטה-קרלו?
בעברי כסטודנט מצאתי את עצמי לא מעט פעמים מבצע פעולות העתק+הדבק על מנת לקחת גרפים שהופקו מ-MATLAB ולשתול אותם במסמך שאותו הייתי צריך להגיש. תמיד הנחתי שישנה דרך נוחה יותר לעשות זאת, ושגם בטח יש שיטה יעילה יותר מה-Equation Editor בשביל לשתול את כל הנוסחאות הרלוונטיות. אבל בשעה אחת בלילה, בזמן ששאר חבריי למעונות היו מבלים או ישנים, לא כל כך היה את מי לשאול...
לא הרבה יודעים את זה, אבל מתוך קבצי MATLAB, גרפים, דיאגרמות Simulink וטבלאות Stateflow ניתן להפיק בקלות מסמכי תיאור ודו"חות בפורמטים שונים, כמו:
RTF, XML, PDF, DOC ו-HTML. יכולות אלו עשויות לחסוך לכם לא מעט זמן, בין אם אתם סטודנטים ובין אם אתם חוקרים או מהנדסים בתעשיה.
אז, אם ברצוני לבצע את הפעולות הבאות:
• לייצר נוסחאות הכוללות פקודות LaTeX
• לפרמט את הטקסט והפונטים כך שיכללו הדגשות, קווים נטויים, לינקים וכו'
• להפיק רשימות ממוספרות או עם Bullets
• לתפוס גרפים שהוכנו בעזרת MATLAB ולשלב אותם במסמך חיצוני
יש כמה דרכים לעשות זאת !
הדרך הראשונה היא על ידי שימוש בפקודה "publish" המובנית ב-MATLAB, ורועי התייחס אליה כחלק מהפוסט שלו שנקרא "עולם הפרסום" שפורסם לפני כשלוש שנים. פקודה זו לוקחת קובץ MATLAB, ובהתאם למבנה שלו היא מפיקה ממנו מסמך הכולל קטעי קוד, הערות, גרפים ותמונות שמופקים כתוצאה מהרצת הקוד וכו'. בגרסת R2012b כל היכולות הרלוונטיות שולבו ב-TAB בעל השם PUBLISH, והוא יתגלה לכם כאשר תהיו במצב עריכה של קובץ m:
סרגל PUBLISH בגרסת R2012b
|
אופציה זו היא שימושית מאוד, בעיקר אם עובדים עם פונקציה או סקריפט בודד, ודוגמה לכך נמצאת בתיקיה מכווצת זו (פשוט בצעו publish לדוגמה מספר 1). באופן אישי, בסמינרים שאני מעביר כיום, אני נעזר בפונקציה הזו בכדי לסנכרן את כל ההדגמות שלי (אני משלב מקטעי תיאור של ההדגמה, מוסיף נוסחאות שמתארות התהליך, לינקים שמעבירים אותי בין קבצים ובין הרצות, וכמובן - כל המסמך הזה יכול להיפתח ב-browser של MATLAB או אחד חיצוני). אבל - השיטה הזו בעייתית כאשר רוצים לייצר מסמכים ממספר קבצים או כשרוצים לפרמט את התוצר הסופי בצורה מסויימת, למשל: אם רוצים לייצר מסמך Word שיהיה בעל עמודים ממוספרים, או אם מעוניינים בגרפים עם כותרות משתנות (כתוצאה מעשרות הרצות), או אם רוצים אפשרות לקבוע שלפעמים כן יופקו גרפים ולפעמים לא
(Conditional Reporting).
השיטה השניה מרחיבה את יכולות האפשרות הראשונה והיא בעלת גמישות גבוהה יותר (אבל - לא מגיעה כחלק מחבילת ה-MATLAB הבסיסית). היא נעזרת בפונקציות המובנות במוצר MATLAB Report Generator לצורך שליטה מירבית על פורמט הדו"ח המתקבל. אני מאד אוהב להשתמש בממשק המשתמש שמגיע יחד עם המוצר הזה, ונפתח על ידי הפעלת הפקודה "report". ממשק זה, כפי שניתן לראות למטה, מורכב מ-3 חלקים: בחלק השמאלי רואים את מבנה הדו"ח שהולך ונבנה, בפורמט היררכי של "עץ". בחלק האמצעי ניתן לראות רשימה של אובייקטים מוכנים, המחולקים לנושאים (אובייקט הוא בעצם פקודה שתשמש לפירמוט הדו"ח, ופקודה שכזו לדוגמא יכולה להיות "פרק חדש", "תת-פרק חדש", "טבלה", "figure" או "לולאת FOR"). בחלק הימני ניתן לראות את התכונות המשוייכות לאובייקט (למשל, עבור תמונה, ניתן לראות את הגודל שלה, האוריינטציה ועוד).
ממשק המשתמש בכלי MATLAB Report Generator |
כלי זה מאפשר לבנות את ה"Template" לדו"ח שאותו רוצים להפיק, ואז לשתף אותו עם עוד אנשים. בכדי להקל על השימוש בכלי, מספר דוגמאות ודו"חות בסיסיים כבר משולבים כחלק ממנו. באופן אישי, הדרך שלי להפיק את המירב מהכלי הזה היא לרוב על ידי שימוש בו כחלק מסביבת ניסוי, כלומר לצורך ביצוע אנליזת "מונטה-קרלו".
הרעיון בשיטת "מונטה-קרלו" הוא ביצוע בדיקות רבות תוך כדי שינוי חלק מהפרמטרים של המערכת. למשל, אם מפתחים מסנן חדש בעולם עיבוד האותות, או אם רוצים לבדוק כיצד האלגוריתם שלנו מתמודד עם שינוי במסה או אינרציה של מערכת מכנית, מעוניינים לבצע סט של פעולות שלוקחות מספר רב של כניסות, מעבירות אותן דרך המערכת ובודקות מה התוצאה, ואת זה היינו רוצים לבצע עבור הערכים האפשריים השונים של הפרמטר. בתהליך שכזה היינו מעוניינים לבצע כמה פעולות:
• טעינת מידע מתוך קבצים (m, MAT) וביצוע פעולות מקדימות נוספות
• הגדרת פרמטרי הבעיה ומספר ההרצות (או התנאים) לכל פרמטר
• בדיקה בלולאות (לרוב לפחות 2 לולאות עבור לפחות 2 פרמטרים)
o חישוב תוצאות נקודתיות
o הצגת גרפים עבור כל מקרה ושמירה לצורך תיעוד
• ריכוז נתונים בטבלה או בגרף מסכם
• פעולות לאחר הריצה – שמירת תוצאות ל-MAT, מחיקת משתנים
את כל הפעולות הללו ניתן לבצע בעזרת פקודת report, ודוגמה לכך נמצאת בתיקיה מכווצת זו (בדוגמה מספר 2 יש קובץ לדוגמה וכן מסמך PDF שנוצר בעקבות הפעלתו).
ולפני סיום, כמה מילים על הפקת דו"חות מסביבת Simulink - אלה מכם שעובדים בסביבת Simulink ישמחו לדעת שה-Simulink Report Generator, שהוא מוצר נוסף, מוסיף לכל היכולות שהוזכרו לעיל אובייקטים מוכנים לבלוקים של Simulink ושל Stateflow, וגם הוא כולל בתוכו טמפלייטים מוכנים של דו"חות. ניתן להיעזר במוצר זה ישירות מתוך תפריט ה-File:
דו"חות אוטומטיים עבור Simulink |
לדעתי - אחת מהתכונות הכי משמעותית של המוצר הזה עבור מודלי Simulink היא האפשרות לבצע בעזרתו השוואה בין 2 מודלים שונים. כאשר יש 2 גרסאות שונות של מודל מסויים, ניתן לבצע השוואה גרפית בין 2 המודלים, השוואה בין פרמטרים של בלוקים, השוואה בין ה-configuration parameters, ואפילו השוואה בין פונקציות האתחול. ואם אותר הבדל מסויים, אפשר לבחור האם למחוק אותו או למזג אותו בין המודלים בעזרת כלי גרפי מתאים. דוגמה לכך נמצאת בתיקיה מכווצת זו (בדוגמה מספר 3, הכוללת גם מסמך PDF שנוצר כתוצאה מהתהליך), וצילום מסך מופיע למטה:
השוואה ומיזוג בין מודלי Simulink |
אני בטוח שהמידע לעיל יחסוך לכם שעות של עבודה. השאלה שכמובן נשאלת היא האם הזמן שתחסכו ישמש לצורך בילוי והנאה או לצורך ביצוע בדיקות נוספות והתמקדות באלגוריתמים משופרים וטובים יותר...
האם אתם מפיקים דו"חות רבים במסגרת עבודתכם? האם אתם משתמשים באופציית ה-publish, באופציית ה-report או באף אחת מהן? האם אתם מבצעים סימולציות מונטה-קרלו?