יום חמישי, 21 באפריל 2016

פחית משקה אופטימלית

נניח שעליכם לתכנן פחית משקה על פי אילוצים מסויימים. למשל, גובה הפחית (h) חייב להיות קטן מ-15 ס"מ (בגלל המרווח בין מדפים בסופרמרקט). אילוץ נוסף שעליכם להתחשב בו, למשל, הוא שכמות המשקה בפחית צריכה להיות 300 מ"ל (נסמן את רדיוס הפחית באות r, ואז למעשה יש לעמוד בתנאי h*pi*r^2=300). כמו כן, משיקולי יציבות של הפחית – נדרש לשמור על יחס מסוים בין גובהה ורדיוסה – למשל, על גובה הפחית לא להיות גדול מארבע פעמים הרדיוס שלה (או, אם נעביר אגף, נקבל: 4*r-h>=0). ולסיום, משיקולי עלות של חומר הגלם המשמש לייצור מעטפת הפחית – יש למזער את פונקציית המחיר S(r,h)=2*pi*r*h+2*pi*r^2, המורכבת משטח המכסים (עליון ותחתון) ומשטח מעטפת הגליל שביניהם. אם נוציא גורם משותף ונגדיר וקטור x המכיל את משתני התכנון גובה ורדיוס, הרי שפונקצית המטרה sodaCost הינה:


האם יש דרך נוחה לפתור את בעיית האופטימיזציה הזו ?

התשובה היא כמובן כן, בעזרת MATLAB.

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

נפתח את ממשק המשתמש המוזכר לעיל בעזרת הפקודה optimtool, ונזין לתוך חלקו השמאלי את הנתונים השונים כפי שמופיע בתמונה למטה (ניתן ללחוץ עליה להגדלה). יש לשים לב שפרט לקריאה לפונקצית המחיר (תוך שימוש באופרטור ה-@), הוזנו אי-השיוויון הלינארי (שיקולי היציבות של הפחית, אחרי שהבאנו אותם לצורה A*x<=b), הגבול התחתון של פרמטרי התכנון (רדיוס וגובה אי-שליליים), הגבול העליון שלהם (כאמור גובה קטן מ-15 ס"מ, אין מגבלה על הרדיוס) האילוץ הלא-לינארי (כמות המשקה בפחית. הפונקציה fooNonLin מובאת בהמשך, וגם לה קוראים בעזרת אופרטור ה-@) וערכים התחלתיים לאלגוריתם האופטימיזציה (רדיוס של 5 ס"מ, גובה של 4 ס"מ).



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


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

יום ראשון, 27 במרץ 2016

תכנון אנטנות מרובות אלמנטים בסביבת MATLAB


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

הקדמה

אנטנות הן חלק אינטגרלי בכל מערכת אלחוטית היום, והתכנון שלהן נעשה על ידי מומחים בתחום.  הכלים בהם מומחים אלו משתמשים הינם יקרים מאד, ולמרבה הצער ברוב המקרים קשה לשלבם בשלב החשוב של הסימולציה המערכתית. לעומת אותם כלים, בכלים Antenna Toolbox ו-Phased Array System Toolbox יש למהנדסי מערכת אפשרות לשלב בשלבים מוקדמים של תכנון המערכת שלהם מערכי אנטנות, בצורה נוחה ומהירה.

אנליזת אנטנה מרובת אלמנטים - Antenna Toolbox

ה– Antenna Toolbox הינו כלי שיצא לפני כשנה, ובאמצעותו ניתן לבצע אנליזה על מערך אנטנות. הגדרת האלמנט הבודד הינה פשוטה ביותר, וניתן לבחור מתוך למעלה מ-20 אנטנות מוכנות מראש או לייבא את הRadiation Pattern מתוכנות עיבוד אחרות (דוגמת CST). לאחר בחירת האלמנט הבודד נדרש להגדיר את המיקום של כל אלמנט בתוך מבנה מוגדר מראש (דוגמת URA) או בתוך מבנה שמוגדר על ידי המשתמש. דוגמאות לתוצאות אנליזה ניתן לראות בתרשים 1 למטה (ניתן ללחוץ להגדלה) - במקרה זה נבנה מערך של ארבעה אלמנטי-דיפול המסודרים בצורה ריבועית, וסביבת MATLAB ביצעה חישוב מלא של משוואות Maxwell על מנת לחשב השפעות coupling, edge ו-substrate characteristics.

 תרשים 1 – אנליזה של מערך אנטנות עם ארבעה אלמנטי דיפול. מצד שמאל-למעלה בכיוון השעון: כיווניות אנטנה תלת-ממדית, הצגה של מערך האנטנות, חתך דו-ממדי של כיווניות האנטנה, התפלגות הזרם באלמנטים

שילוב בסימולציה - Phased Array System Toolbox

Phased Array System Toolbox הינו כלי בעל יכולות רבות לעיבוד אות מרחבי, אך בפוסט הנוכחי נתעמק רק בתחום האנטנות. לאחר אנליזת האנטנה והחלטה על מבנה המערך, שבוצעו בחלק הקודם, נרצה לראות את אפקט האנטנה בסימולציה. ובעזרת ה- Phased Array System Toolbox ניתן לבצע חישוב מרחבי של מעבר אות דרך האנטנה אל מגוון ערוצים וחזרה לאנטנה אחרת, וכמובן שהפלטפורמות לא חייבות להיות נייחות.
גם באמצעות ה- Phased Array System Toolbox קיימת אפשרות לבנות מערך אנטנות, אך במקרה זה לא יבוצעו חישובי משוואות Maxwell אלא חישובי סופרפוזיציה. קרי, תופעות לא לינאריות כמו coupling או edge effects לא יבואו לידי ביטוי. מצד שני – זמני החישוב יהיו קצרים יותר. מתי נעדיף להשתמש בכלי אחד לצורך סימולציה ולא בכלי האחר ? אפשר לראות סיכום ממצה בתרשים 2 (ניתן ללחוץ להגדלה).

תרשים 2 – תרשים החלטה לחישוב כיווניות אלמנט בודד בסביבת MATLAB
מידע נוסף
למידע נוסף על  Antenna Toolbox, לחצו פה.
למידע נוסף על Phased Array System Toolbox, לחצו כאן.

יום שני, 29 בפברואר 2016

תכנות מונחה-עצמים בסביבת MATLAB

תכנות מונחה-עצמים (Object-Oriented Programming) היא גישת תכנות המשתמשת בעצמים (Objects), המספקת למתכנת דרכים שונות לארגון ופישוט עבודתו, דבר חשוב במיוחד בפרויקטי תוכנה מורכבים. מרכיב עיקרי בגישה זו הוא המחלקה (Class), אשר מתאפיינת בתכונות (Properties) המגדירות אותה כלפי חוץ, ופעולות (Methods) אשר הינן פונקציות ייחודיות למחלקה. לעתים מבוצע גם שימוש באירועים (Events), אשר הינם הודעות השייכות למחלקה המוזנקות בהקשרים שונים.

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

למה לבצע תכנות מונחה-עצמים בסביבת MATLAB ? בעיקר בגלל שהדבר מאפשר לפתח תוכנות מיחשוב-טכני מורכבות - מהר יותר מאשר בעזרת שפות תכנות אחרות (כמו C++, C# ו-Java ), ומבלי צורך להתעסק ב-low-level שהן דורשות. ב-MATLAB המשתמש יכול להגדיר מחלקות בעצמו ישירות מהתפריט הראשי של התוכנה 

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

ואחרי שיש לנו תוכנה – הגיע הזמן לבדוק אותה...

בדיקות יחידה (Unit Testing), למי שלא מכיר/ה את המושג, הן בדיקות ברמת יחידות המערכת הקטנות, שנועדו לאמת את פעילותן התקינה. עבור פיתוח מתקדם של תוכנות – בגרסת R2013a הוכנסה לסביבת MATLAB מסגרת בדיקות-יחידה (Unit Testing Framework), המאפשרת לכתוב בדיקות, להריץ אותן, ולנתח אותן. למידע נוסף, לחצו כאן.

למידע נוסף על תכנות מונחה-עצמים בסביבת MATLABלחצו כאן.

יום רביעי, 27 בינואר 2016

MATLAB ו-ThingSpeak - הבסיס ל-Internet of Things

Internet of Things (או בקיצור, IoT) היא מגמה שבמסגרתה מספר הולך ועולה של התקנים הופכים להיות מחוברים לאינטרנט, כאשר עם ההתקנים המחוברים האלה מתקשרים אנשים או התקנים אחרים. אני מתכבד לארח בבלוג את רוני פאר, מנהל צוות מהנדסי האפליקציה בחברת סיסטמטיקס, לפוסט מיוחד פרי עטו (או מקלדתו...) בנושא הקשר בין MATLAB ו-IoT:

דמיינו לעצמכם נער בן 14 מדרום אמריקה שבונה חיישן סיסמי לחיזוי רעידת אדמה שעולה פחות ממאה דולר. החיישן הזה עולה לרשת, משוכפל ע"י מאות ואלפי אנשים, וכעת אנשים ביבשת שלמה זוכים להתרעה של כ-15 דקות לפני התרחשות רעידת אדמה. 15 דקות שבהן אנשים יכולים לצאת מבניינים, למצוא מחסה, ולהציל את חייהם !

עכשיו דמיינו חברה ישראלית שמפתחת חיישן לניטור נשימה, ובאמצעות הטלפון הנייד כל המידע הזה מועבר בזמן-אמת למערכת לניתוח מידע, אשר בוחנת את נתוני החיישן ויכולה להתריע מבעוד מועד על כשל נשימתי.

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

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

- רכישת המידע ע"י חיישני הקצה (או Edge Nodes),
- איסוף ואגירת המידע במערכת איסוף הנתונים (או Data Aggregator),
- ניתוח המידע ושימוש בו לצורך פיתוח אלגוריתמים, הצגתו ואף עדכון פעולת חיישני הקצה.

אלו מכם שעושים כיום שימוש ב-MATLAB או Simulink, בוודאי מכירים את היכולת לייצור קוד המותאם למערכות Embedded, כדוגמת אלו שמשמשות לחיישני הקצה. "דברים" רבים היום ממומשים על גבי חומרה זולה כמו Arduino, Raspberry Pi, ARM ובעזרת MATLAB ו-Simulink ניתן להגדיר אותם, לתכנן עבורם אלגוריתמיקה רצויה, לשלוט על אופן פעולתם, ואף לחברם למערכות נוספות. וכל זאת – בחינם. רק צריך להוריד את חבילת התמיכה המתאימה (Hardware Support Package) מהאתר של MathWorks או ישירות מתוך MATLAB באמצעות תפריט ה-Add-Ons שהתווסף לפני כשנתיים לתפריטים של התוכנה.

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

לצורך הגישה למידע וניתוחו, מומלץ לעשות שימוש בשתי פקודות פשוטות – thinkSpeakWrite ו-thingSpeakRead, עם פרמטרים של מספר הערוץ והשדות הרלוונטים. למשל, קטע הקוד הבא מראה כיצד ניתן לקרוא נתוני טמפרטורה ולחות, לחשב את נקודת הטל, ולכתוב אותה חזרה לערוץ (לחצו להגדלה):


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

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

למידע נוסף מתוך מתחם ה-Data Analytics של חברת סיסטמטיקס, לחצו כאן.

יום רביעי, 16 בדצמבר 2015

מערכות הפעלה, ארכיטקטורות, עננים ו-MATLAB


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

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

Microsoft הגבירה את קצב שחרור הגרסאות של מערכת ההפעלה Windows (Windows 8/8.1/10) וגם שחררה פלטפורמת ענן חדשה בשם Azure. מלבד השינויים שחלו במערכת ההפעלה Windows, שוחררו גם גרסאות חדשות של Red Hat Enterprise Linux 7 ו-SUSE Linux Enterprise 12. גם Apple לא קפאה על השמרים ושחררה לאחרונה גרסאות חדשות של MAC OS X (10.10 ו-10.11).

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

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

לאור השינויים המתוארים למעלה, גם חברת MathWorks החלה בהתאמת מוצריה לעולם המחשוב המשתנה. להלן השינויים שחלו בגרסאות האחרונות של MATLAB בהקשר הזה, והשינויים שיחולו בגרסאות הבאות:

Windows:
·         MATLAB R2015b הינה גרסת ה-MATLAB האחרונה שנתמכת להתקנה על גבי מחשבים עם מערכות הפעלה Windows בארכיטקטורת 32 ביט. MATLAB R2016a תהיה זמינה למערכות הפעלה Windows בארכיטקטורת 64 ביט בלבד. הדבר תקף גם לגרסאות של MATLAB Runtime (MCR) , לתוצרים של MATLAB Compiler ולתוכנה לניהול רישיונות רשת של MATLAB. יצוין כי תמיכה בארכיטקטורת 32 ביט על גבי לינוקס נזנחה עוד ב-MATLAB R2012b, ותמיכה ב-32 ביט תחת MAC OS X נזנחה עוד ב-MATLAB R201b.
·         הגרסה האחרונה ביותר של MATLAB הזמינה להתקנה על גבי Windows XP הינה MATLAB R2015a. גרסאות חדשות יותר של MATLAB אינן ניתנות להתקנה על גבי Windows XP.
·         MATLAB R2015a הינה הגרסה הנמוכה ביותר של MATLAB הנתמכת להתקנה על גבי Windows 10.

Linux:
·         MATLAB R2013a הינה הגרסה העדכנית ביותר של MATLAB הנתמכת להתקנה תחת Red Hat Enterprise Linux 5.
·         MATLAB R2014b הינה הגרסה הראשונה של MATLAB הנתמכת להתקנה תחת Red Hat Enterprise Linux 7.

MAC OS X:
·         MATLAB R2014b הינה הגרסה הראשונה של MATLAB הזמינה להתקנה על גבי MAC OS X 10.10
Cloud:
·         בשנת 2015 חברת MathWorks שחררה רישיון מיוחד המיועד להתקנה על מחשבים הנמצאים על פלטפורמות ענן. שמו של הרישיון הוא LNU (Login Named User). רישיון זה מסוגל לפעול ללא אקטיבציה ומיועד לרישיונות אינדיבידואליים של MATLAB. הפעלת MATLAB תחת רישיון זה אפשרית כאשר משתמש התוכנה מחובר לרשת האינטרנט ומבצע הזדהות עם שם משתמש וסיסמה בזמן הפעלת התוכנה (המשתמש חייב להיות בעל רישיון MATLAB).

למידע נוסף על MATLAB בענן והגדרת הרישיון האינדיבידואלי של MATLAB כרישיון LNU, ניתן לפנות לקישור הבא (מצריך חשבון באתר MathWorks):

לדרישות המערכת של גרסת ה-MATLAB העדכנית בכל הקשור לתמיכה במערכות הפעלה וגרסאות שונות של מהדרים – ניתן לפנות לקישור הבא:

לדרישות המערכת של גרסאות המ-MATLAB הקודמות, ניתן לפנות לקישור הבא:

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