2013-02-10 34 views
10

यह गूगल, MATLAB प्रलेखन उपयोग करने के लिए बहुत मुश्किल हो गया है, मैं कुछ ही घंटों खर्च किया है, और मैं नहीं सीख सकते हैं कि कैसे करने के लिएमैटलैब: चर, नहीं चर मूल्य के लिए लिंक

x = 1 
y = x 
x = 10 
y 

ans = 10 

क्या बजाय होता है:

x = 1 
y = x 
x = 10 
y 

ans = 1 

एक्स का मान y में संग्रहीत किया जाता है। लेकिन मैं y के बराबर x के मान को गतिशील रूप से अपडेट करना चाहता हूं।

ऐसा करने के लिए मैं किस ऑपरेशन का उपयोग करता हूं?

Thanks.M

+1

आप MATLAB में संकेत देखने के लिए चाहते हैं । मेरी त्वरित खोज ने कुछ भी नहीं बदला, लेकिन इससे आपको डब्ल्यू/गूगलिंग में मदद मिल सकती है। – Dan

+1

मैं यह सोचने के लिए उत्सुक हूं कि अगर आप किसी सूचक की तरह व्यवहार करते हैं तो आपको गलत तरीके से समस्या आ रही है ... प्रासंगिक [टिप्पणी] (http://www.edaboard.com/thread46260.html#post210526) , उद्धरण: "* क्यों? आपको matlab में पॉइंटर्स की आवश्यकता क्यों होगी? मैटलैब कोड एक स्क्रिप्ट है, जिसे फ़ंक्शन के मामले में छद्म कोड में संकलित किया जाएगा। मुझे नहीं लगता कि यह आपके बारे में सोचने के लिए उपयोगी है सी ++ में करते हैं। मुझे लगता है कि आपको संदर्भ द्वारा गुजरने के रूप में गुजरने वाले तर्क को देखना चाहिए। यदि आप तर्कों की संख्या को कम करना चाहते हैं, तो उन्हें एक वेक्टर में या एक स्ट्रक्चर में रखें। * " – plesiv

+0

आपको केवल पॉइंटर की आवश्यकता नहीं है कार्यों के लिए तर्क पारित करते समय/संदर्भ व्यवहार। आप इसे अपने कोड में एक्स (2) .y (4) .z (7) .w (i) की पुनरावृत्ति से बचने के लिए चाहते हैं। और अक्सर, आप चर/क्षेत्र में केवल पढ़ने-पहुंच नहीं चाहते हैं।यहां, केवल एकल-अक्षर परिवर्तनीय/फ़ील्ड नामों का उपयोग किया जाता है, लेकिन अच्छे कोड में, चर/फ़ील्ड नाम वर्णनात्मक होते हैं और इसलिए लंबे समय तक। – user36800

उत्तर

5

आप निम्न में से कुछ की कोशिश कर सकते हैं;

x=10; 
y='x' 
y 

y = 
    x 

eval(y) 
x = 
    10 
+0

हां, यह बहुत करीब आता है। –

1

MATLAB में, यह संभव नहीं है। हालांकि, समान व्यवहार पाने के कई तरीके हैं। उदाहरण के लिए, आपके पास a = [1, 5, 3, 1] एक सरणी हो सकती है और उसके बाद इसे x और y द्वारा अनुक्रमित किया जा सकता है। x = 2 के लिए, आप a(x) = 7, y = x असाइन कर सकते हैं, और एक बार जब आप a(x) = 4, a(y) == 4 बदल सकते हैं।

तो सूचकांक संदर्भों का अनुकरण करने का सबसे तेज़ तरीका हो सकता है, लेकिन यदि आप कुछ सुरुचिपूर्ण समाधान चाहते हैं, तो आप प्रतीकात्मक चर के माध्यम से @natan अंक के रूप में जा सकते हैं। इस से लेने के लिए महत्वपूर्ण है कि MATLAB में कोई पॉइंटर्स नहीं हैं।

13

मैटलैब 99% पास-बाय-वैल्यू पर्यावरण है, जो आपने अभी दिखाया है। पास-बाय-रेफरेंस 1% हैडल है, या तो ग्राफिक्स को संभालता है (यहां प्रासंगिक नहीं है) या कक्षाओं को संभालता है, जो आप चाहते हैं कि बहुत करीब हैं।

आपके द्वारा वर्णित करने के लिए एक हैंडल क्लास का उपयोग करने के लिए, निम्नलिखित फ़ाइल कॉल RefValue पर रखें।

classdef RefValue < handle 
    properties 
     data = []; 
    end 
end 

यह "डेटा" नामक एक ही संपत्ति के साथ "हैंडल" वर्ग बनाता है।

अब आप कोशिश कर सकते हैं:

x = RefValue; 
x.data = 1; 
y = x; 
x.data = 10; 
disp(y.data) %Displays 10. 
1

तुम भी x पर एक अंतर्निहित संभाल परिभाषित कर सकते हैं y पर एक समारोह को परिभाषित करने और इसे का हवाला देते हुए:

x = 1; 
y = @(x) x; 
y(x) % displays 1 
x = 10; 
y(x) % displays 10