दिलचस्प पोस्ट
एंड्रॉइड एप्लिकेशन में दो क्लास के बीच स्ट्रिंग एआरिंग पास करना PHP में एकाधिक फ़ाइल अपलोड करें आर कंसोल के भीतर यूनिक्स "कम" कमांड के बराबर क्या कभी भी वादों का समाधान नहीं होता है जिससे स्मृति रिसाव होता है? पीआईएल का प्रयोग करके पिक्सेल की आरजीबी प्राप्त करें Bash shell स्क्रिप्ट में एक कमांड में सिंगल कोट्स के अंदर का विस्तार डिव के पहलू अनुपात बनाए रखें लेकिन सीएसएस में स्क्रीन चौड़ाई और ऊंचाई भरें? क्यों शामिल है () ऑपरेटर नाटकीय ढंग से संस्था फ़्रेमवर्क के प्रदर्शन को नीचा? कैसे टॉर में पायथन के urllib2 अनुरोध बनाने के लिए? LINQ में इकाईयों में थोक-हटाना Asp.net (वेबफॉर्म्स) के लिए <optgroup> s के साथ ड्रॉपडाउन सूची नियंत्रण? क्या मैं अभी भी माइक्रोसॉफ्ट ऑफिस का उपयोग कर सकता हूं। सीमा सीएसएस के भीतर सीमा एक पर्यावरण चर बनाने के लिए ENDLOCAL बचें NSString का आकार कैसे प्राप्त करें

MATLAB में, क्या मैं एक फाइल में स्क्रिप्ट और फ़ंक्शन परिभाषा कर सकता हूं?

मान लीजिए मेरे पास एक फ़ंक्शन है f() और मैं इसे my_file.m में उपयोग करना चाहता my_file.m , जो कि एक स्क्रिप्ट है

  1. क्या my_file.m में फ़ंक्शन परिभाषित करना संभव है?
  2. यदि नहीं, मान लीजिए कि मैंने इसे fm में परिभाषित किया है मैं इसे my_file.m में कैसे कॉल my_file.m ?

मैंने ऑनलाइन प्रलेखन पढ़ा, लेकिन यह स्पष्ट नहीं था कि यह करने का सबसे अच्छा तरीका क्या है।

वेब के समाधान से एकत्रित समाधान "MATLAB में, क्या मैं एक फाइल में स्क्रिप्ट और फ़ंक्शन परिभाषा कर सकता हूं?"

रिलीज़ R2016b के रूप में, आप लिपियों में स्थानीय कार्य भी कर सकते हैं, जैसे:

 data = 1:10; %# A vector of data squaredData = f(data); %# Invoke the local function function y = f(x) y = x.^2; end 

R2016b को रिलीज़ करने से पहले, केवल एक प्रकार का फ़ंक्शन जिसे MATLAB स्क्रिप्ट के अंदर परिभाषित किया जा सकता है एक अनाम फ़ंक्शन था । उदाहरण के लिए:

 data = 1:10; %# A vector of data f = @(x) x.^2; %# An anonymous function squaredData = f(data); %# Invoke the anonymous function 

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

जिस तरह से मैं इस सीमा के आसपास मिलती हूं, मेरी स्क्रिप्ट को ऐसे फ़ंक्शन में बदलना है जो कोई तर्क नहीं लेते (यदि मुझे वैश्विक नाम स्थान से चर की जरूरत है, तो मैं उन्हें स्पष्ट रूप से फ़ंक्शन में पास कर देता हूं या उन्हें पकड़ने के लिए "एवलिन" का उपयोग करता हूं।)

फिर आप "स्क्रिप्ट" में आवश्यक अतिरिक्त सभी कार्यों को परिभाषित कर सकते हैं। यह एक हैक है, लेकिन मुझे उन मामलों में काफी ताकतवर पाया गया है जहां मुझे कई गैर-तुच्छ कार्यों की आवश्यकता है।

संपादित करें: यहां एक सरल उदाहरण है। यह सब एक ही फाइल में रह सकता है

 function [] = myScriptAsAFunction() img = randn(200); img = smooth(img); figure(1); imagesc(img); axis image; colorbar; end function simg = smooth(img) simg = img / 5; end 

आप ऐसा कुछ कर सकते हैं (अपनी फ़ाइल को संभालने के लिए my_file.m नाम दिया my_file.m ):

 function my_file %script here end function out = f(in) %function here end 

यदि आप रन बटन पर क्लिक करते हैं फ़ंक्शन my_file को डिफ़ॉल्ट के रूप में निष्पादित किया जाएगा।

1) आप एक स्क्रिप्ट के अंदर फ़ंक्शन को घोंसला नहीं कर सकते।

2) सुनिश्चित करें कि एफएम आपके पथ पर या वर्तमान निर्देशिका में है, और आप इसे किसी अन्य फ़ंक्शन की तरह कॉल कर सकते हैं।

R2016b के रूप में , आप एक स्क्रिप्ट के भीतर स्थानीय फ़ंक्शन को परिभाषित कर सकते हैं।

 x = 1; y = add1(x); function z = add1(x) z = x + 1; end 

मैंने जॉन द्वारा समाधान लागू किया है , और मुझे यह उपयोगी पाया गया। लेकिन कुछ कमियां हैं (ओक्टेव में; Matlab संभवतः इसी तरह व्यवहार करता है):

  1. यदि आपके मुख्य फ़ंक्शन के अंदर कोड सहायक कार्यों का उपयोग करने से पहले clear all होता है, तो यह काम नहीं करेगा। फाइल में test3.m , सभी टिप्पणी / test3.m clear all करता है जो कोड काम करता है / काम नहीं करता है

     function [] = test3() %clear all a = myfunc( 1 ); a endfunction; %--------------------------------- % Auxiliary functions function retval = myfunc( a ) retval = 2 * a; endfunction; 

    से ऐसा लगता है कि एक स्क्रिप्ट चलाने पर, एक पहला पास है जहां कोड के बाहर कार्य निष्पादित होता है (इस मामले में, ऐसा कोई कोड नहीं), और परिभाषित कार्य (इस मामले में, test3 और myfunc ) कार्यस्थान में जोड़ दिए गए हैं। एक दूसरा पास मुख्य फ़ंक्शन निष्पादित करेगा, जो clear all नहीं होगा कि clear all सक्रिय हैं myfunc

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

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

हालांकि, जवाब खोजने का सबसे आसान तरीका है ~ प्रयास करना