שילוב של קוד MATLAB בפרויקט שנכתב ב-NET.
שילוב של קוד MATLAB בפרויקט שנכתב ב-NET.: רוצים לשלב פרויקט שנכתב ב-NET. עם קוד שכתבתם ב-MATLAB? הגעתם למקום הנכון […]
שילוב של קוד MATLAB בפרויקט שנכתב ב-NET.: רוצים לשלב פרויקט שנכתב ב-.Net עם קוד שכתבתם ב-MATLAB? הגעתם למקום הנכון 😊
אחרי שתקראו את הפוסט הבא תראו שזה לגמרי אפשרי ואפילו די פשוט, אז בואו נתחיל!
(עבור סביבת JAVA, ניתן לפנות לפוסט "שילוב קוד MATLAB בפרויקט שנכתב ב-JAVA")
תחילה, נקמפל את הקוד שכתבנו ב-MATLAB באמצעת ה-MATLAB Compiler SDK, תוך שימוש באחת מהדרכים הבאות:
-
באמצעות האפליקציה:
ניגש אל ה- Library Compiler נבחר ב-type מסוג NET Assembly. בחלון ה- Exported function
נטען את הפונקציה הכתובה ב-MATLAB, אותה אנו מעונייים לקמפל ונמלא את הפרטים הדרושים – שם הספרייה, המחלקה והמתודה (נשתמש בפרמטרים הללו בהמשך על מנת להפעיל את הפונקציה מסביבת ה-Visual Studio). הסבר על השימוש באפליקציה ניתן למצוא בלינק הבא.
-
באמצעות שורות קוד:
דוגמה לקימפול הפונקציה על ידי שורות קוד:
mcc -B 'dotnet:Calcfft,class_fft,4.0,Private,local' Calcfft.m
כאשר:
Calcfft – שם התוכנית
class_fft – שם המחלקה
4.0 – גרסת ה-.Net Framework
Calcfft.m– שם המתודה
לאחר קימפול הקוד – נוצר קובץ dll. ששמו הוא כשם התוכנית שהגדרנו. זוהי הספרייה המשמשת כמעטפת לפונקציה אותה יצרנו ב-MATLAB.
אז איך MATLAB ו-NET. מתקשרים ביניהם?
הם עושים זאת באמצעות ה"מתווך" MW class, אך לפני שנרחיב עליו, נפתח תחילה פרויקט ב-Visual Studio ונתחיל לכתוב את הקוד שלנו.
הכינותי מראש קוד שקורא לפונקציית MATLAB המבצעת חישוב FFT ומציגה אותו
(אציין כי זמן הריצה של אלגוריתם ה-FFT מהיר בהרבה ב-MATLAB מאשר ב-NET. לכן שילוב קוד MATLAB יכול להוות יתרון הן מהבחינה של האצת ביצועים והן מבחינת ניצול היכולות המופלאות של ה-MATLAB).
השחקן הראשי בסיפור הוא ה-MW class. שחקן זה מאפשר להעביר ארגומנטים מ-NET. ל-MATLAB וגם לקבלם חזרה.
ועכשיו לקוד עצמו:
ישנם סוגים שונים של ארגומנטים שאותם MW class יודעת לתווך – מערכים, תאים, מבנים. על מנת להשתמש ביכולת התיווך הזאת יש להגדיר את ה-Namespace כפי שמופיע בשורה מספר 2. בשלב הבא נשתמש בשם הספרייה, שם המחלקה ושם המתודה שהגדרנו בשלב קימפול הקוד:
- הספרייה שהגדרנו תיכנס לספריות בהם נשתמש בתוכנית (ראו שורה מספר 3).
- המחלקה שהגדרנו תשמש אותנו בקריאה לפונקציה שיצרנו ב-MATLAB והגדרת אובייקט מסוג מחלקה (ראו שורה מספר 15)
- הקריאה לפונקצייה מוגדרת בעזרת שם המחלקה שהגדרנו ושם המתודה שהגדרנו בזמן הקימפול (ראו שורה מספר 17).
ומה לגבי הגדרת משתני ה-MW?
נשים לב שהקלט המתקבל לאחר השליחה לפונקציה (שורה 17) הינו מסוג MWArray. ללא ממשק ה-MW, לא היינו מצליחים לגשר על הפערים בין השפות, לכן זכרו לבדוק מהו סוג הטיפוס שנשלח ומה סוג הטיפוס שמתקבל ובהתאם לכך להגדיר את הספריות בהם אתם משתמשים ואת המשתנים השונים בתוכנית.
לכל ארגומנט הגדרה שונה ובסוף הפוסט תמצאו טבלה המציגה ההמרה שיש לבצע במעבר בין ה- MATLAB ל-NET.
עברנו את שלב כתיבת הקוד, עכשיו נגדיר את הסביבה – וסיימנו!
הגדרת הסביבה היא פשוטה ביותר וכוללת כמה פעולות:
- הגדרת ספריות ה-MW הנמצאת תחת הנתיב –
matlabroot\toolbox\dotnetbuilder\bin\architecture\framework_version\mwarray.dll
- הגדרת הספריות שכתבנו ב-MATLAB (קבצי ה-dll.)
אז שני קליקים וגם הסיפור הזה מאחורינו:
בסביבת Visual Studio, מקש ימני על שם ה-references (שנמצא תחת שם הפרויקט)-> add reference, נלך ל-Browse ונוסיף את קבצי ה-dll הנחוצים.
וזהו, כל מה שנותר הוא ללחוץ על start.
בהצלחה!!
אם הסתבכתם, מוזמנים לפתוח קריאת תמיכה דרך הקישור הבא