2013-04-19 14 views
15

से नाम के साथ चर बनाएं मान लेते हैं कि मैं 10 चर जो इस प्रकार दिखाई देगा बनाना चाहते हैं:तार

x1 = 1; 
x2 = 2; 
x3 = 3; 
x4 = 4; 
. 
. 
xi = i; 

यह मैं क्या करने का इरादा कर रहा हूँ का एक सरलीकृत संस्करण है। असल में मैं बस इन चरों को स्वचालित तरीके से बनाकर कोड लाइनों को सहेजना चाहता हूं। क्या Matlab में एक चर नाम बनाने की संभावना है? मेरे उदाहरण में पैटर्न ["x", num2str(i)] होगा। लेकिन मैं उस नाम के साथ एक चर बनाने के लिए एक रास्ता नहीं मिल सकता है।

+3

MATLAB FAQ देखें: [मैं एक लूप में चर A1, A2, ..., A10 कैसे बना सकता हूं?] (Http://matlab.wikia.com/wiki/FAQ#How_can_I_create_variables_A1.2C_A2.2C....2CA10_in_a_loop .3 एफ) – Amro

उत्तर

28

आप eval साथ यह कर सकते हैं, लेकिन क्या तुम सच में करना चाहिए नहीं

eval(['x', num2str(i), ' = ', num2str(i)]); %//Not recommended 

बल्कि एक सेल सरणी का उपयोग करें:

x{i} = i 
+0

वाह धन्यवाद, बहुत आसान है। और हां, मैं कोशिकाओं का उपयोग करूंगा लेकिन यह विधि यहां प्रस्तुत की गई है;) – Cat

+12

मैं वास्तव में आपको अपने कार्यक्षेत्र में पॉप वृद्धिशील चर के लिए eval का उपयोग करने से हतोत्साहित करता हूं। आप एक नाम एक संरचना बनाने चाहते हैं:। 's (sprintf ('एक्स% d', मैं)) = मैं,' – Oleg

+0

क्यों यह अनुशंसित नहीं है? –

5

मैं भी दृढ़ता से एक सेल सरणी या इस तरह के लिए एक struct का उपयोग कर की सलाह मामलों। मुझे लगता है कि यह आपको कुछ प्रदर्शन बढ़ावा देगा।

यदि आपको वास्तव में ऐसा करने की ज़रूरत है तो दान ने बताया कि कैसे करें। लेकिन मैं genvarname फ़ंक्शन को इंगित करना भी चाहूंगा। यह सुनिश्चित करेगा कि आपकी स्ट्रिंग एक वैध चर नाम है।

संपादित करें: genvarname कोर matlab का हिस्सा है और न सांख्यिकी टूलबॉक्स का

+0

धन्यवाद। मैं कोशिकाओं के बजाय सरणी का उपयोग करूंगा। जो जानकारी मैं ढूंढ रहा हूं उसके लिए एक आसान सवाल रखने के लिए मेरे प्रश्न में उदाहरण बहुत आसान था। मैं वास्तव में जो कर रहा हूं वह मेरे प्रश्न के रूप में बेवकूफ़ नहीं है: पी – Cat

+0

@bdecaf: btw 'genvarname' कोर MATLAB – Amro

+0

ओह मेरा बुरा हिस्सा है। मैं शपथ ले सकता था कि यह उस टूलबॉक्स का हिस्सा था। – bdecaf

1

तो किसी और रुचि रखता है, दान के जवाब से सही सिंटैक्स होगा:

eval(['x', num2str(i), ' = ', num2str(i)]); 

मेरा प्रश्न पहले से ही गलत निहित वाक्यविन्यास, तो यह मेरी गलती है।

+3

भविष्य में, यदि आप इस तरह की छोटी गलतियां करते हैं तो आप वास्तव में मेरे उत्तर को संपादित कर सकते हैं। नीचे एक संपादन लिंक है। यदि आपके पास पर्याप्त प्रतिष्ठा नहीं है तो आप केवल एक टिप्पणी छोड़ सकते हैं और कोई और आपके लिए संपादन कर देगा। मैंने अभी मेरा तय कर लिया है;) – Dan

0

जब से तुम कार्यक्षेत्र से structs (या सेल सरणियों मुझे लगता है) संदर्भ नहीं दे सकता Simulink ब्लॉक में यदि आप सिमुलेशन के दौरान उन्हें बदलने में सक्षम होना चाहता हूँ मैं कुछ इस तरह की जरूरत है।

वैसे भी, मेरे लिए यह सबसे अच्छा

assignin('base',['string' 'parts'],values); 
4
for k=1:10 
    assignin('base', ['x' num2str(k)], k) 
end 
+0

'कॉलर' को 'बेस' बदलने का सुझाव देता है। इस तरह, एआईयूआई, इसे कहीं भी काम करना चाहिए जहां कोई कार्यस्थानों पर विशिष्ट ध्यान नहीं दे रहा है। – Flyto

1

काम किया हालांकि यह लंबे समय से अपेक्षित है, मैं एक और उत्तर जोड़ना चाहते थे justed।

समारोह genvarname इन मामलों

और अगर आप एक tmp संरचना सरणी के साथ इसका इस्तेमाल आप है यह http://www.mathworks.co.uk/help/matlab/ref/genvarname.html

कैसे करना है इस लिंक से cmd

उदाहरण 4 eval की जरूरत नहीं है के लिए ठीक है

for k = 1:5 
    t = clock; 
    pause(uint8(rand * 10)); 
    v = genvarname('time_elapsed', who); 
    eval([v ' = etime(clock,t)']) 
    end 

सभी बेहतरीन

ईयाल