2009-06-17 14 views
6

से मैटलैब कॉलबैक/फ़ंक्शन हैंडल को कॉल करना मैं जावा ऑब्जेक्ट में मैटलैब फ़ंक्शन हैंडल कैसे पास करूं और इसे जावा के भीतर से आमंत्रित कर सकता हूं (यानी, मैं जावा को गणना के साथ तैयार होने पर मैटलैब को बताना चाहता हूं)। मैं जावा ऑब्जेक्ट में मैटलैब एक्सप्रेशन का मूल्यांकन करने के लिए com.mathworks.jmi.Matlab क्लास का उपयोग करने की कोशिश कर रहा हूं, लेकिन मैं नहीं देख सकता कि कैसे 1) कॉलबैक फनकशन हैंडल को जावा में स्थानांतरित करें, और 2) इसे जावा से संभवतः उपयोग करें com.mathworks.jmi.Matlab कक्षा।जावा

धन्यवाद, Jakob

उत्तर

2

हम्म। ऐसा लगता है कि जेएमआई उन मैटलैब आंतरिक चीजों में से एक है जो भविष्य के संस्करणों में बदलाव के अधीन हो सकती है। मुझे इन ऑनलाइन लेखों को मिला, यह सुनिश्चित नहीं है कि वे आपके मामले में मदद करेंगे या नहीं।

+0

धन्यवाद, मुझे उन लेखों को मिला है, लेकिन वे मुझे नहीं बताते हैं कि कैसे जावा को फ़ंक्शन हैंडलस्कॉलबैक पास करना है और उन्हें जावा से आमंत्रित करना है।जेएमआई के माध्यम से काम करने के लिए मुझे केवल एक चीज जावा से मैटलैब कमांड को निकालना था, लेकिन मुझे एक विशिष्ट फ़ंक्शन हैंडल निष्पादित करने के लिए मैटलैब (जावा से) बताना होगा। –

+0

मेरा अनुमान है कि आप इसे नहीं कर सकते हैं। मैंने एक समान समस्या में भाग लिया है (मैटलैब से जावा कॉल में कॉलबैक इंटरफ़ेस के रूप में एक मैटलैब फ़ंक्शन में पास करने का प्रयास - मैटलैब में मार्शल के लिए कोई स्पष्ट तरीका नहीं) और भाग्य से भाग गया। –

0

matlab में एक कॉलबैक पास करने के लिए, आप matlab समारोह के नाम पर गुजरती हैं और यह com.mathworks.jmi.Matlab.feval में तर्क (है "matlabControlcb", ..., 0); ... एक वस्तु है [] जहां [0] = कमांड और [1..end] = तर्क।

भी देखें: FEVAL FUNC2STR

1

मुझे डर है कि मैं वास्तव में तुम क्या अनुरोध किया करने के लिए एक तरीका है पता नहीं है, लेकिन आप दो तरीकों से कुछ इसी तरह कर सकते हैं:

1) यदि आप मैटलैब के भीतर से जावा कॉलबैक सेट करते हैं, तो आप इसे एक मैटलैब फ़ंक्शन हैंडल भेज सकते हैं। जब जावा कॉलबैक ईवेंट उठाया जाता है, तो आपका मैटलैब फ़ंक्शन लागू किया जाएगा। इसके लिए एक उदाहरण यहां पाया जा सकता है: http://UndocumentedMatlab.com/blog/uicontrol-callbacks/। ध्यान दें कि इसे चलाने के लिए जेएमआई की आवश्यकता नहीं है।

2) जेएमआई को मूल्यांकन करने के लिए मैटलैब के लिए एक स्ट्रिंग (फ़ंक्शन नाम या कमांड लाइन) की आवश्यकता है। यदि आप पहले से ही फ़ंक्शन नाम जानते हैं तो आप इसका उपयोग कर सकते हैं। अन्यथा, आप अपने कॉलबैक को उपयुक्त मैटलैब एक्शन पर गतिशील रूप से निर्देशित करने के लिए एक मैटलैब स्विच-यार्ड फ़ंक्शन (जिसका नाम अग्रिम में जाना जाता है) तैयार कर सकते हैं।

मैं अप्रैल के मध्य में http://UndocumentedMatlab.com वेबसाइट में JMI बारे में एक लेख को चलाने के लिए, इसलिए तैयार रहें योजना है ...

येर ऑल्टमैन

+1

ऐसा करने का एक और तरीका है अपने जावा कोड के भीतर से एक ईवेंट को बढ़ाने और इस घटना पर मैटलैब कॉलबैक डालें, जैसा कि http://undocumentedmatlab.com/blog/matlab-callbacks-for-java-events/ में वर्णित है –

0

इस उपकरण का प्रयास करें: http://jamal.sourceforge.net/

यह वास्तव में क्या करता है आपको जरूरत है और अच्छी तरह से प्रलेखित।

मुख्य सिद्धांत यह है कि यह मैटलैब के अंदर चलने वाले सर्वर भाग में आरएमआई कॉल करना है। आउटपुट जावा प्रोग्राम में वापस आ गया है। फिर, यह jmi पर निर्भर करता है ...

1

matlabcontrol एक जावा एपीआई है जो आपको ऐसा करने की अनुमति देगा। यह feval का उपयोग कर एक MATLAB समारोह का आह्वान कर सकते हैं। यह सीधे फ़ंक्शन हैंडल पर काम नहीं कर सकता है, लेकिन जैसा कि किट्स्यूनवाईएमजी द्वारा उल्लिखित है, आप एक स्ट्रिंग में फ़ंक्शन हैंडल को कन्वर्ट करने के लिए func2str का उपयोग कर सकते हैं। शुरू करने के लिए, आप walkthrough पर एक नज़र डाल सकते हैं।