2012-06-07 13 views
39

भविष्य में इसे पढ़ने वाले लोगों के लिए कुछ पृष्ठभूमि (यदि यह लॉक नहीं है)। मैं पहली बार समस्या को समझने के लिए एक उच्च स्तर की भाषा में अपना प्रोग्रामिंग करता हूं। सभी संभावित कोने के मामलों को कवर करने के बाद मैं कोड को C++ (या C) में अनुवाद करने के लिए आगे बढ़ता हूं।मैटलैब कोडर बनाम हाथ कोडिंग?

मेरे द्वारा लिखे गए अधिकांश कोड में गणित है और इसलिए MATLAB वह भाषा है जिसका उपयोग मैं करता हूं (मेरे लिए विकल्प पायथन है)। वैसे भी, मैं कोड से MATLAB से C++ तक कोड का अनुवाद करता हूं।

क्या किसी को पता है कि MATLAB कोडर का उपयोग करने में कोई लाभ/हानि है या नहीं? यह एक नया उत्पाद है और बहुत महंगा है, लेकिन जब तक यह अनुवाद में बचाता है, तब तक कोई अन्य लाभ नहीं है?

+7

आप MATLAB कोडर परीक्षण क्यों नहीं डाउनलोड करते हैं, देखें कि यह आपके लिए कैसे काम करता है, और आपके द्वारा किए गए पिछले काम के परिणामों की तुलना करें? – mpontes

+0

एक उच्च स्तरीय भाषा का उपयोग करने के बारे में जो काम करने के लिए अच्छा है, लेकिन अभी भी तेज़ मूल कोड के लिए संकलित है, अभी? हास्केल काफी अच्छा है। सी ++ 11 अब भी बुरा नहीं है, या तो। – leftaroundabout

+0

सच है, लेकिन मैटलैब में बहुत से फ़ंक्शंस हैं जो बहुत सुविधाजनक हैं। – s5s

उत्तर

40

अस्वीकरण

यह एक बहुत ही स्वच्छंद एक विशेष परियोजना के लिए मेरे expirience के आधार पर पोस्ट है। मैंने कोडर के नवीनतम संस्करण का उपयोग नहीं किया है, लेकिन मेरे पास मैटलैब कोड को C++ में परिवर्तित करने के लिए समकक्ष उत्पाद (एम्बेडेड कोडर) के साथ समाप्ति है जिसे पूर्व वास्तविक समय कार्यशाला उत्पाद के हिस्से के रूप में शामिल किया गया था। ये टिप्पणियां अभी भी लागू होनी चाहिए। आपकी माइलेज भिन्न हो सकती है।

प्रारंभिक लाभ ...

मेरी स्थिति में, एम्बेडेड सांकेतिक शब्दों में बदलनेवाला एक प्रोसेसिंग ब्लॉक कि एक बड़ा ऑडियो आवेदन के हिस्से में फिट बनाने के लिए इस्तेमाल किया गया था। प्रसंस्करण ब्लॉक में वास्तविक समय में नमूना बफर की निरंतर धारा को संसाधित करने का काम था। मैंने मैटलैब में मूल एल्गोरिदम बनाया, और रूपांतरण टूल ने शुरुआती प्रोटोटाइप को उस चीज़ में परिवर्तित करने के लिए काफी सरल बना दिया जिसे देशी कोड में संकलित किया जा सकता था और वास्तविक समय एप्लिकेशन में उपयोग किया जा सकता था।यह मानना ​​भी अच्छा था कि परिवर्तित कोड रूपांतरण प्रक्रिया में मानव त्रुटि की संभावना के बिना संख्यात्मक रूप से मूल रूप से समान रूप से काम कर रहा था (महावर्क्स इंजीनियरों की अतिमानवी क्षमताओं को मानते हुए)।

लाभ यह बहुत ही प्रारंभिक प्रोटोटाइप चरण के बाद समाप्त हो गया ...

समस्या 1: समय बर्बाद कर

इंटरफ़ेस के रूप में एल्गोरिथ्म जटिलता में वृद्धि हुई, मैं अधिक से अधिक कोड करने के बारे में चिंता करना शुरू कर दिया फ़ंक्शन में मैटलैब इंटरफ़ेस ताकि रूपांतरण के बाद, सी ++ ढांचे के साथ इंटरफ़ेस करना आसान हो (मैं वास्तविक समय में आंतरिक राज्यों की निगरानी करना चाहता था)। इसने अंततः वास्तविक एल्गोरिदम विकास के रूप में उतना ही समय उपयोग करना शुरू कर दिया, इस प्रकार इस तरह के एक उपकरण का उपयोग करने के उद्देश्य को हराया। मैं एल्गोरिदम को छोटे हिस्सों में तोड़ सकता था और फिर सी ++ का उपयोग करके उन्हें एक साथ चिपका सकता था, लेकिन फिर मैं पूर्ण एल्गोरिदम की प्रत्यक्ष मैटलैब-केवल तुलना करने की क्षमता खो देता था।

समस्या 2: सभी कार्यों का समर्थन किया या समर्थित नहीं हैं पूरी तरह से

सांकेतिक शब्दों में बदलनेवाला एक subset of the Matlab language का समर्थन करता है। कुछ मामलों में, समर्थित फ़ंक्शंस किसी भी तरह से सीमित हैं। उदाहरण के लिए, जिस एप्लिकेशन पर मैं काम कर रहा था, मैं वास्तविक समय में फ़िल्टर की विशेषताओं को संशोधित करने में सक्षम होना चाहता था। मैं मानक मैटलैब फ़िल्टर प्रोटोटाइप फ़ंक्शंस का उपयोग नहीं कर सका, क्योंकि कोड जनरेशन टूल वैरिएबल तर्कों के साथ फ़िल्टर प्रोटोटाइप फ़ंक्शन पर कॉल की अनुमति नहीं देगा। मैंने अपने स्वयं के कार्यान्वयन को विकसित करने वाली डीएसपी पुस्तक के साथ समय बिताना समाप्त कर दिया, भले ही हमारे पास सिग्नल प्रोसेसिंग टूलबॉक्स लाइसेंस हो।

समस्या 3:

मैं इंटरफ़ेस मुद्दों से निराश हो गया और C++ हाथ से एल्गोरिथ्म कोडित स्वचालित रूप से तैयार किए गए कोड अक्षम था। मेरे आवेदन के लिए, परिवर्तित कोड पर हाथ लिखित कोड के पक्ष में 75% प्रदर्शन वृद्धि हुई थी। आपके आवेदन के आधार पर प्रदर्शन अंतर बहुत अलग होंगे, संभवतः उपयोग किए गए रूपांतरण टूल का संस्करण, और आपके प्रोफाइलर का आपका प्यार। रूपांतरण उपकरण स्वयं एक जटिल उत्पाद है जिसमें सीखने के लिए कई सेटिंग्स हैं। प्रदर्शन को बेहतर बनाने के लिए सेटिंग और मैटलैब कोड को ट्विक करने के तरीके को करने का प्रयास करने से हाथ कोडिंग करने में अधिक समय लगता है।

मैं के बाद से रूपांतरण उपकरण इस्तेमाल नहीं किया है ...

मैं अब एक और अधिक परीक्षण सहायता प्रदान की दृष्टिकोण पसंद करते हैं। मैं Matlab में एक प्रोटोटाइप कोड और tweak जब तक मुझे यकीन है कि यह व्यवहार करता है क्योंकि मैं इसे भी चाहता हूँ। मैं फिर सी ++ में सोचता हूं और एल्गोरिदम को ऐसे तरीके से रिकोड करता हूं जो उस भाषा के लिए अधिक स्वाभाविक है। मैं फिर एक मैक्स फ़ाइल बना देता हूं जो मेरे सी ++ कोड के साथ इंटरफेस करता है, इसलिए मैं इसे अपने विश्वसनीय मैटलैब समकक्ष के खिलाफ परीक्षण कर सकता हूं। जिस समस्या में मैं काम करता हूं, उसके लिए यह काम करने के लिए एक बहुत अधिक कुशल (मानव और मशीन) तरीका है।

निष्कर्ष में, यह सिर्फ एक उपयोगकर्ता की राय है। शायद (जैसा कि आपकी मूल पोस्ट पर एक टिप्पणी में बताया गया है) आपको यह देखने के लिए साइन अप करना चाहिए कि आप कैसे साथ जाते हैं। हालांकि, यदि आप सी ++ निंजा का थोड़ा सा हिस्सा हैं, तो मैक्स फ़ाइलों के निर्माण से परीक्षण के लिए ऐड-ऑन उत्पाद के लिए एक महंगी लाइसेंस की आवश्यकता नहीं होती है और यह आपको एक बेहतर डेवलपर बनाती है।

+1

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

2

यदि MATLAB में लिखना आपके लिए आसान है, तो मूल्य इस बात पर निर्भर करेगा कि आप अपना समय कितना महत्व रखते हैं।

प्रदर्शन के लिए MATLAB और C या C++ की तुलना करना बहुत जटिल है। अधिकांश मामलों में सी या सी ++ तेजी से बढ़ने जा रहे हैं, लेकिन कुछ रैखिक बीजगणित अनुप्रयोगों में यह संभव है कि MATLAB सबसे तेज़ निष्पादित करेगा। मुझे एक प्रोफेसर याद है जिसने दावा किया कि उसके पास फोरट्रान एप्लिकेशन थे जो MATLAB में बराबर की तुलना में धीमी गति से दौड़ते थे। इस पर बहुत सारे केस स्टडीज हैं - मैं आपको Google में आने वाली गति की तुलना में विभिन्न अध्ययनों को देखने की सलाह दूंगा और उनसे तुलना करूँगा जो आप अपना निर्णय लेने के लिए कर रहे हैं।

+0

मुझे नहीं लगता कि वह पूछ रहा है कि MATLAB से C में परिवर्तित करने के लिए यह योग्य है या नहीं, लेकिन सबसे अच्छा तरीका क्या है। – bakalolo

0

लाभ:

  1. जटिल गणित कार्यों का एक बहुत उपलब्ध हैं। कट्टर गणित प्रोग्रामिंग से संबंधित
  2. संबंधित।

नुकसान:

  1. यह लोकप्रिय सी #, जावा, अजगर की तरह एक और आधुनिक भाषाओं के साथ तुलना नहीं। जो तुम कहो।
  2. चूंकि आप मैटलैब कोड करते हैं, इसलिए आप ज्यादातर जटिल गणित समस्याओं को हल करने पर ध्यान केंद्रित करते हैं। एक अन्य भाषाओं ड्राइंग, वेब विकास और गणित के साथ-से किस्म कार्यों में किया जाता है

एक और लाभ मुझे पता है (यह यकीन है कि के लिए matlab तरह अमीर गणित फ़ंक्शन नहीं है): चूंकि यह तकनीकी प्रोग्रामिंग के अनुरूप होता है, आप कर सकते हैं इस क्षेत्र में आवेदन लिखते समय बेहतर प्रदर्शन करें। प्रदर्शन बहुत भरोसेमंद है, इस सवाल पर एक नज़र डालें, यह some helpful information प्रदान करता है।

0

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

और मान लें कि आपने सिमुलिंक का उपयोग करके एक मॉडल बनाया है, लेकिन जब आप कुछ जोड़ने का प्रयास करते हैं तो फिर यह बहुत समय ले रहा है लेकिन सी में यह केवल 2 मिनट का कार्य है।

अगली समस्या यह है कि आप अन्य प्रोग्रामिंग भाषाओं में मॉडल के किसी भी हिस्से को टिप्पणी नहीं कर सकते हैं।

एक बड़ी परियोजना के लिए कभी-कभी MATLAB क्रैश हो जाता है, खराब हो जाता है, कभी-कभी लटका और राज्य प्रवाह में अनुकरण एक sh * टी की तरह होता है।

अंत में मैं केवल एक चीज कहता हूं, जो केवल MATLAB मॉडलिंग (स्टेटफ्लो + सिमुलिंक) का उपयोग करते हैं, यदि आपके पास बहुत धैर्य है।

0

जैसा कि ऊपर बताया गया है, यह आपके आवेदन पर निर्भर करता है। मैंने डीकोडर (एक संचार प्रणाली के) को बदलने की कोशिश की, यह सटीक परिणाम देता है लेकिन बड़ी संख्या में बिट्स के लिए यह अपने MATLAB संस्करण से धीमा है। तो मेरा निष्कर्ष हाथ से MATLAB कोड को सी में परिवर्तित करना था।

संबंधित मुद्दे