2016-07-07 9 views
13

एक सवाल है कि विभिन्न आकृति और आकार में काफी अक्सर पॉप अप होता है: क्यों मैं निम्न त्रुटि संदेश मिलता है: "। अपरिभाषित समारोह प्रकार का 'डबल' इनपुट तर्क के लिए 'function_name'""अपरिभाषित फ़ंक्शन 'function_name'।

यह पोस्ट उन सभी अलग-अलग परिदृश्यों को संबोधित करने का प्रयास करता है जहां यह त्रुटि संदेश हो सकता है, और समाधान कैसे हल किया जा सकता है इसका समाधान प्रस्तावित करता है।

उत्तर

17

यदि आप इस त्रुटि संदेश पर ठोकर खा रहे हैं और यह नहीं जानते कि इसका क्या अर्थ है। इसमें आराम लें: हम में से 9 0% ने एक ही वाक्यांश को गुगल किया है।

"डबल 'प्रकार के इनपुट तर्कों के लिए" अपरिभाषित फ़ंक्शन' int '।

त्रुटि संदेश बहुत आत्म-स्पष्टीकरणपूर्ण है, लेकिन अभी भी भ्रम पैदा कर सकता है। (मैंने यादृच्छिक रूप से 'int' चुना है, यह 'train', 'table', 'my_function' या कुछ भी हो सकता है)।

दो मुख्य मामलों में जहां इस त्रुटि उत्पन्न होते हैं:

  1. आप एक समारोह है कि (अभी तक) मौजूद नहीं है
  2. आप एक चर कि नहीं करता है में एक तत्व का उपयोग करने की कोशिश कर रहे हैं का उपयोग करने के प्रयास कर रहे हैं अस्तित्व में नहीं है (अभी तक)

यदि आपको यह त्रुटि मिलती है तो आप क्या करते हैं?

सबसे पहले आप which को आजमा सकते हैं। यह आपको बताएगा कि आपके द्वारा उपयोग किए जाने वाले फ़ंक्शन या वेरिएबल को परिभाषित किया गया है या नहीं।

which int 
'int' not found. 

यह काफी स्पष्ट है, मैटलैब int नामित किसी भी कार्य या चर नहीं मिल रहा। इसका उपयोग करने की कोशिश करना व्यर्थ है। यह max से तुलना करते हैं:

which max 
built-in (C:\Program Files\MATLAB\R2014b\toolbox\matlab\datafun\@logical\max) % logical method 

लेकिन, आप निम्नलिखित मिल सकता है, भले ही आप प्राप्त "अपरिभाषित समारोह 'एक्स' ..."। यदि ऐसा है, तो नीचे बिंदु 3 देखें।

which x 
x is a variable. 

1. लेकिन फ़ंक्शन "int" मौजूद है! यह भी documented here है!

हाँ, int मौजूद है, लेकिन केवल तभी यदि आपके पास Symbolic Toolbox है। चूंकि टूलबॉक्स अतिरिक्त पैकेज हैं जिन्हें अलग से खरीदा जाना चाहिए (और काफी महंगा हो सकता है), संभावना है कि आपके पास वह पैकेज नहीं है।

यदि आपको "अपरिभाषित फ़ंक्शन" त्रुटि मिलती है, लेकिन दस्तावेज़ में फ़ंक्शन ढूंढें, बाईं ओर मेनू में एक नज़र डालें, या बस पता जांचें। मानक मैटलैब फ़ंक्शंस में पते हैं:

mathworks.com/help/matlab/ref/max.html 
        ^^^^^^ 

"matlab" भाग पर ध्यान दें। यदि आप इसे देखते हैं, तो आप एक ऐसे फ़ंक्शन का उपयोग कर रहे हैं जो कोर मैटलैब का हिस्सा है।

यदि फिर भी, आप इस तरह के नीचे एक के रूप में एक पते देखते हैं, तो समारोह आप का उपयोग करने की कोशिश कर रहे हैं प्रतीकात्मक उपकरण बॉक्स का हिस्सा है:

mathworks.com/help/symbolic/int.html 
        ^^^^^^^^ 

या हो सकता है यह तंत्रिका नेटवर्क उपकरण बॉक्स का हिस्सा है:

mathworks.com/help/nnet/ref/train.html 
        ^^^^ 

समाधान: एक और समारोह है कि एक टूलबॉक्स आप की जरूरत नहीं है का हिस्सा नहीं है का पता लगाएं। यदि आप एक कुशल googler हैं तो संभावना है कि आप जो खोज रहे हैं उसे आप पाएंगे। यदि आप इसे नहीं ढूंढ पा रहे हैं, तो मदद मांगें। बताएं कि आपने क्या प्रयास किया है, और दिखाएं कि आपने कुछ प्रयास किया है!

2. लेकिन समारोह documented here है, और कोर Matlab का हिस्सा है !?

भले ही कोई फ़ंक्शन मानक Matlab स्थापना का हिस्सा है, और अच्छी तरह से प्रलेखित है, तो भी आपको यह त्रुटि मिल सकती है। इस त्रुटि के लिए सबसे संभावित कारण यह है कि आप Matlab के पुराने संस्करण का उपयोग कर रहे हैं। आप प्रलेखन चेक करते हैं आप पृष्ठ के नीचे में निम्नलिखित दिखाई देगा:

R2013b

में प्रस्तुत

तो, आप R2012b उपयोग कर रहे हैं तो आप उदाहरण table के लिए उपयोग नहीं कर सकते।

समाधान: जांचें कि फ़ंक्शन को मैटलैब के आपके संस्करण में परिभाषित किया गया है या नहीं। यदि यह अभी तक लागू नहीं हुआ है तो आपको या तो मैटलैब को अपडेट करने या इसे करने का दूसरा तरीका ढूंढने की आवश्यकता है। table का विकल्प उदाहरण के लिए सेल या structs का उपयोग करना हो सकता है।

3. लेकिन चर "my_variable" मौजूद है! मैंने इसे ऊपर की रेखा में बनाया है!

नहीं, आपने नहीं किया। संभावना है कि आपने परिवर्तनीय myvariable, my_Variable, my_Variable या ऊपर की रेखा में समान कुछ बनाया है। यह भी संभव है कि आपने इसे बनाया है, लेकिन गलती से cleared है।

समाधान: कोड का अध्ययन करें। टाइपो, उन स्थानों को ढूंढें जहां आपने गलती से वैरिएबल को मंजूरी दे दी है। मैटलैब एडिटर के अंदर आपको निम्न पंक्ति मिल जाएगी यदि आप एक चर चिह्नित करते हैं: "आपने" 3 "उपयोग" x "पाया" अगर आपने फ़ंक्शन को परिभाषित किया है और उपयोग किया है । आपको अप्रयुक्त किए गए चर के नीचे एक नारंगी रेखा भी मिल जाएगी।

4. लेकिन जब मैं which y टाइप करता हूं तो मुझे "वाई एक चर" मिलता है?

आप "ऊपर अपरिभाषित समारोह 'y' त्रुटि मिलती है, लेकिन which आप y मौजूद है बताता है, तो अपने त्रुटि संदेश कुछ और लाइनें शामिल हैं:

my_function(x) 
Undefined function or variable 'y'. 
Error in my_function (line 2) 
t = x*y; 

>> which y 
y is a variable. 

क्या यह आपको बताता है कि आप एक है कि है आपके Matlab Workspace में y नामक चर (this link भी देखें)।

कार्य आधार कार्यक्षेत्र का उपयोग नहीं करते:

समस्या यह है कि कार्यों इस कार्यक्षेत्र तक नहीं पहुँच सकता है। प्रत्येक फ़ंक्शन का अपना फ़ंक्शन वर्कस्पेस होता है।

यदि आप एक चर को देखने और उपयोग करने के लिए कोई फ़ंक्शन चाहते हैं, तो आपको इसे argument के रूप में पास करना होगा। इस तरह चर उस समारोह के लिए स्थानीय वर्कस्पेस का हिस्सा होगा। इसी प्रकार, यदि आप फ़ंक्शन के बाहर फ़ंक्शन के बाहर बनाए गए चर को चाहते हैं तो फ़ंक्शन के बाहर पहुंचने के लिए आपके पास फ़ंक्शन से आउटपुट होना चाहिए।

समाधान: उन चरों को पास करें जिन्हें आप उपयोग करने वाले फ़ंक्शन में इनपुट तर्क के रूप में उपयोग करना चाहते हैं। सुनिश्चित करें कि कार्यों के अंदर के नाम आंतरिक रूप से सुसंगत हैं। अर्थात। यह पूरे समारोह में एक ही नाम होना चाहिए। ध्यान दें कि फ़ंक्शन के बाहर और अंदर परिवर्तनीय नामों के बीच कोई संबंध नहीं है।

5. लेकिन मैं चर को फ़ंक्शन में इनपुट के रूप में पास करता हूं, लेकिन मुझे अभी भी एक ही त्रुटि संदेश मिलता है !?

हां, आप शायद चर के रूप में चर का उपयोग करें। हालांकि, परिवर्तनीय नाम आवश्यक रूप से अलग-अलग कार्यों में समान नहीं होते हैं (अक्सर वे नहीं होते हैं)।

मान लीजिए आप कार्य हो:

function output = my_function(x) 
output = 2*y; 
end 

आप एक ही त्रुटि प्राप्त होगी ऊपर के रूप में यदि आप इसे कार्यक्षेत्र से नीचे दिए गए कोड के रूप में, फोन भले ही आप इनपुट चर के रूप में प्रयोग कर रहे हैं और y फ़ंक्शन के अंदर y का उपयोग करें।

y = 3; 
res = my_function(y) 

इसका कारण यह है समारोह my_function अंदर, चर आप इनपुट के रूप में उपयोग करते हैं, x कहा जाएगा कि यह समारोह बाहर बुलाया गया था की परवाह किए बिना है।

समाधान: फ़ंक्शन हेडर में इनपुट चर नाम का नाम बदलें, या पूरे फ़ंक्शन में चर का नाम बदलें।

6. लेकिन मैंने x को वैश्विक वैरिएबल के रूप में बनाया है !?

पहला बंद: मैं आपको वैश्विक चर का उपयोग न करने की सलाह देता हूं! तर्कों के रूप में चर को पार करना बहुत बेहतर है।

मैटलैब वर्कस्पेस में global के रूप में एक चर घोषित करने के लिए पर्याप्त नहीं है। यह आपके द्वारा उपयोग किए जाने वाले प्रत्येक फ़ंक्शन में घोषित किया जाना चाहिए। इसलिए, यदि आपके पास वैश्विक चर x है, तो आपको प्रत्येक फ़ंक्शन में global x करना होगा।

समाधान: वैश्विक कोड का उपयोग करने के बजाय अपने कोड को दोबारा लिखें और तर्कों को पास करें। यदि यह कोई विकल्प नहीं है, तो आप उन सभी कार्यों में global x जोड़ें जहां आप इसका उपयोग कर रहे हैं।


इस उत्तर के अतिरिक्त, आप आधिकारिक Matlab FAQ देख सकते हैं।

+0

http://stackoverflow.com/questions/35039864/undefined-function-lt-for-input-arguments-of-type-cell-in-using-cell/35040225#35040225 यह एक और मामला हो सकता है जहां यह एक और मामला हो सकता है त्रुटि होती है। शुरुआती लोगों के लिए यह समझना मुश्किल हो सकता है कि क्यों, समाधान 'डॉक्टर लेफ्ट' का उपयोग करने के लिए भी होगा। मुझे नहीं पता कि यह बहुत से लोगों के साथ होता है या नहीं – Max

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