שילוב קוד MATLAB בפרויקט שנכתב ב-JAVA
שילוב של קוד MATLAB בפרויקט שנכתב ב-JAVA: רוצים לשלב פרויקט שנכתב ב-JAVA עם קוד שכתבתם ב-MATLAB? הגעתם למקום הנכון […]
שילוב של קוד MATLAB בפרויקט שנכתב ב-JAVA: רוצים לשלב פרויקט שנכתב ב-JAVA עם קוד שכתבתם ב-MATLAB? הגעתם למקום הנכון 😊
אחרי שתקראו את הפוסט הבא תראו שזה לגמרי אפשרי ואפילו די פשוט, אז בואו נתחיל!
(עבור סביבת NET., ניתן לפנות לפוסט "שילוב קוד MATLAB בפרויקט שנכתב ב-NET.")
תחילה, נקמפל את הקוד שכתבנו ב-MATLAB באמצעת ה-MATLAB Compiler SDK, תוך שימוש באחת מהדרכים הבאות:
-
באמצעות האפליקציה:
ניגש אל ה- Library Compiler נבחר ב-type מסוג Java package בחלון ה- Exported function
נטען את הפונקציה הכתובה ב-MATLAB, אותה אנו מעונייים לקמפל ונמלא את הפרטים הדרושים – שם הספרייה, המחלקה והמתודה (נשתמש בפרמטרים הללו בהמשך על מנת להפעיל את הפונקציה מסביבת ה-JAVA), הסבר על השימוש באפליקציה ניתן למצוא בלינק הבא.
-
באמצעות שורות קוד:
דוגמה לקימפול הפונקציה על ידי שורות קוד:
mcc –W 'java:calculatefft,class_fft' class{class_fft:Calcfft.m}
כאשר:
calculatefft – שם ה-Package
class_fft – שם המחלקה
Calcfft.m– שם פונקציית ה-MATLAB אותה אנו מעוניינים לקמפל
לאחר קימפול הקוד – נוצר קובץ jar. ששמו הוא כשם התוכנית שהגדרנו. זוהי הספרייה המשמשת כמעטפת לפונקציה אותה יצרנו ב-MATLAB.
אז איך MATLAB ו-JAVA מתקשרים ביניהם?
הם עושים זאת באמצעות ה"מתווך" MW class, אך לפני שנרחיב עליו – הכינותי מראש קוד שקורא לפונקצית MATLAB המבצעת חישוב FFT ומציגה אותו (אציין כי זמן הריצה של אלגוריתם ה-FFT מהיר בהרבה ב-MATLAB מאשר ב-JAVA לכן שילוב קוד MATLAB יכול להוות יתרון הן מהבחינה של האצת ביצועים והן מבחינת ניצול היכולות המופלאות של ה-MATLAB).
השחקן הראשי בסיפור הוא ה-MW class. שחקן זה מאפשר להעביר ארגומנטים מ-JAVA ל-MATLAB .
ועכשיו לקוד עצמו:
ישנם סוגים שונים של ארגומנטים שאותם MW class יודעת לתווך – מערכים, תאים, מבנים. תחילה, על מנת להשתמש ביכולת התיווך הזאת יש להגדיר את ה- package כפי שמופיע בשורה מספר 1.
בשלב הבא נשתמש בשם הספרייה, שם המחלקה ושם המתודה שהגדרנו בשלב קימפול הקוד:
- הספרייה שיצרנו תיכנס לסיפריות בהם נשתמש בתוכנית (ראו שורה מספר 2).
- המחלקה שהגדרנו תשמש אותנו בקריאה לפונקצייה שיצרנו בMATLAB- והגדרת אובייקט מסוג מחלקה (ראו שורה מספר 7)
- הקריאה לפונקציה מוגדרת בעזרת שם המחלקה שהגדרנו ושם המתודה שהגדרנו בזמן הקימפול (ראו שורה מספר 17).
ומה לגבי הגדרת משתני ה-MW?
נשים לב שהקלט שמקבלת פונקציית calcfft (שורה 17) הינו מסוג MWNumericArray.
מאחר והטיפוס שנשלח לפונקציה יכול להישלח גם כ-double, לא היה צורך אמיתי להשתמש ב-MW זאת מהסיבה הפשוטה ש-JAVA ו-MATLAB יודעים להתממשק ביניהם כאשר מדובר בטיפוסים מסויימים (כמו double). עבור טיפוסים אחרים כמו תמונות ומערכים שונים – לוגיים, מספריים, תאים וכו' לא היינו מצליחים לגשר על הפערים בין השפות והיה צורך אמיתי להשתמש ב-MW class. לשם ההדגמה בחרתי להציג את השימוש במשנה מסוג זה.
פירוט על ה- package השונים, אופן שימושם וה-MW המוכל בכל אחד מה-package ניתן למצוא בלינק הבא, כאשר לחיצה על כל package תציג את רשימת הארגומנטים הכלולה בתוך ה-package.
לאחר כתיבת הקוד, נותר להגדיר את הסביבה:
- על מנת לפתח יישומי JAVA יש להוריד ערכת JDK מהקישור הבא. את גרסת ה-JDK המתאימה עבור ה-MATLAB שלכם תוכלו לבדוק על ידי הרצת הפקודה: version –java ב-command window.
- לאחר מכן, יש להגדיר את ה- JAVA_HOME. נגדיר זאת על ידי הרצת הפקודה:
setenv('JAVA_HOME','C:\Program Files\Java\jdk1.7.0_71’);
כאשר בארגומנט השני יש לרשום את הנתיב לתיקיית ה-JDK.
- צעד נוסף לפני ההרצה כולל הגדרת הספריות הנחוצות להפעלת הקוד בהגדרות מערכת ההפעלה.
-נגדיר את ה-javabuilder.jar (הנמצא תחת matlabroot\toolbox\javabuilder\jar)
-נגדיר את הספרייה שכתבנו ב-MATLAB (קובץ ה-jar) בהגדרות מערכת ההפעלה.
אופן ההגדרה: מקש ימני על המחשב שלי=>מאפיינים=>הגדרות מערכת מתקדמות=>משתני סביבה=>משתני מערכת=>PATH. בתוך ה-PATH נוסיף את קבצי ה-JAR הרלוונטים להרצה.
וזהו, כל מה שנותר הוא להריץ את הפקודות המתאימות לקבצים שהגדרתם ב-cmd.exe.
עבור קובץ ההדגמה שורות ההרצה הן:
javac -classpath .;C:\javabuilder.jar;C:\java_fft\calculatefft.jar fftProgram.java
java -classpath .;C:\javabuilder.jar;C:\java_fft\calculatefft.jar fftProgram
ובאופן כללי:
javac -classpath .;javabuilder.jar path;the compiled file path the name of java program
java -classpath .; javabuilder.jar path;the compiled file path the name of java program(without .java)
**הערה – יש לוודא שבנתיב בו אתם נמצאים (ב-cmd.exe) קיימת תוכנית ה-JAVA.
בהצלחה!!
אם הסתבכתם, מוזמנים לפתוח קריאת תמיכה דרך הקישור הבא