2012-08-03 35 views
6

मैं एक वैरिएबल को केवल घोषित/असाइन कैसे कर सकता हूं अगर इसे पहले कभी असाइन नहीं किया गया था?मैटलैब: इनट वैरिएबल अगर अपरिभाषित

प्रसंग:

मैं कश्मीर जो कश्मीर के एक समारोह calculateSomeDistance (के) को कम करता है खोजने की कोशिश कर रहा हूँ। बाद के उपयोग के लिए न्यूनतम दूरी और संबंधित के मान उपलब्ध होना चाहिए (यानी दायरे में)। मुझे मिनीडिस्टेंस कैसे घोषित करना चाहिए ताकि मैं जांच कर सकूं कि इसे वर्तमान में गणना की गई दूरी से तुलना करने से पहले इसे प्रारंभ किया गया था या नहीं?

% How should I declare minDistance? 
minDistance=undefined; % Doesn't exist. 
for ki=1:K, 
    distance=calculateSomeDistance(ki); 
    if(isUndefined(minDistance) || distance < minDistance) 
    minDistance = distance; 
    minK = ki; 
    end 
end 
% Here minK and minDistance must be in scope 

वहाँ आदेश पहले वैध काम बनाने के लिए matlab/सप्तक और इसके लिए बाद में परीक्षण में एक चर के लिए एक अशक्त/अपरिभाषित मान देना कोई तरीका है?

पीएस: मिनीडिस्टेंस को शुरू करना बहुत बड़ी संख्या में बहुत बदसूरत है, और जो मैं ढूंढ रहा हूं वह नहीं है।

मिनी 1 प्रारंभ करना जब की 1 (यानी पहले पास पर) ठीक है, लेकिन अभी भी अच्छा नहीं है।

+0

मैं 'nan' /' isnan() 'मार्ग में 'अस्तित्व()' – kevlar1818

उत्तर

10

आप देख सकते हैं एक चर exist का उपयोग कर मौजूद है या नहीं:

if ~exist('minDistance','var') 
    minDistance = initValue; 
end 

आप चर करना चाहते हैं कार्यक्षेत्र में मौजूद हैं, लेकिन एक अपरिभाषित राज्य में, आप nan (नहीं एक नंबर है) या लेन और चेक इसके लिए isnan के साथ। यह आपके द्वारा प्रस्तावित समाधान के समान होगा, एक वैल्यू प्रकार के साथ जो स्पष्ट रूप से परिवर्तनीय के किसी मान्य मान के साथ संघर्ष नहीं करेगा।

+1

के बजाय उत्तर में जाना चाहता हूं,' इस्नान 'के साथ कोई समस्या है, क्योंकि यह केवल डबल सरणी के लिए काम करता है। यदि आप 'isnan ({}) टाइप करते हैं, तो एक त्रुटि होगी: ' 'सेल' प्रकार के इनपुट तर्कों के लिए 'अपरिभाषित फ़ंक्शन' isnan '। –