Matlab

2011-01-25 8 views
16

में चल रहे स्क्रिप्ट को कैसे रोकें मै मैटलैब में एक लंबी चल रही स्क्रिप्ट लिखता हूं, उदा।Matlab

tic; 
d = rand(5000); 
[a,b,c] = svd(d); 
toc; 

ऐसा लगता है कि यह हमेशा के लिए चल रहा है। Becasue मैं संपादक विंडो में F5 दबाएं। इसलिए मैं Matlab कंसोल में रोकने के लिए सी-ब्रेक दबा नहीं सकता।

मैं सिर्फ स्क्रिप्ट को रोकने के बारे में जानना चाहता हूं। मैं Matlab को मारने के लिए वर्तमान कार्य टास्क मैनेजर हूं, जो वास्तव में मूर्ख है।

धन्यवाद।

उत्तर

8

मैटलैब सहायता यह कहता है- एम-फाइलों के लिए जो लंबे समय तक चलते हैं, या कॉल-इन्स या मेक्स-फाइल जो लंबे समय तक चलते हैं, Ctrl + C हमेशा प्रभावी ढंग से निष्पादन को रोकता नहीं है। आमतौर पर, यह यूनिक्स [1] प्लेटफार्मों के बजाय माइक्रोसॉफ्ट विंडोज प्लेटफॉर्म पर होता है। यदि आप इस समस्या का अनुभव करते हैं, तो आप अपने एम-फाइल में एक ड्रॉ, विराम, या गेटफ्रेम फ़ंक्शन सहित MATLAB ब्रेक निष्पादन में सहायता कर सकते हैं, उदाहरण के लिए, एक बड़े पाश के भीतर। ध्यान दें कि यदि आपने -nodesktop विकल्प के साथ MATLAB प्रारंभ किया है तो Ctrl + C कम उत्तरदायी हो सकता है।

इसलिए मुझे नहीं लगता कि कोई विकल्प मौजूद है। यह कई matlab कार्यों के साथ होता है जो जटिल हैं। या तो हमें इंतजार करना है या उनका उपयोग नहीं करना है!

4

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

-3

पर जोड़ने के लिए:

आप गहन या संभव गतिरोध, यानी के साथ एक पाश के भीतर एक समय जांच सम्मिलित कर सकते हैं।

: 
section_toc_conditionalBreakOff; 
: 

जहां इस खंड के भीतर

if (toc > timeRequiredToBreakOff)  % time conditional break off 
     return; 
     % other options may be:       
     % 1. display intermediate values with pause; 
     % 2. exit;       % in some cases, extreme : kill/ quit matlab 
end 
2

कई matlab सत्र होने पर विचार करें। मुख्य सत्र विंडो (सभी रंगों, फ़ाइल प्रबंधक, कमांड इतिहास, वर्कस्पेस, संपादक इत्यादि के साथ सुंदर) को चलाने वाली सामग्री को चलाने के लिए रखें जो आपको पता चलेगा।

सामग्री है कि आप के साथ प्रयोग कर रहे हैं, कहते हैं कि तुम स्तोत्र सूट के साथ खिलवाड़ कर रहे हैं और आप की चेतावनी बहुत से: विलक्षण मैट्रिक्स, क्योंकि आप कुछ पैरामीटर में परिवर्तन किया और भविष्यवाणी नहीं की थी क्या होगा, एक अलग सत्र में चलाएँ:

dos('matlab -automation -r &') 

आप पूरे मैटलैब को पुनरारंभ किए बिना इसे मार सकते हैं।

1

जावा समाधान के साथ उपयोग के लिए एक समाधान मैंने अपनाया - लेकिन अवधारणा मैक्सफंक्शन के साथ समान है, बस गड़बड़ - फ्यूचरवेल्यू को वापस करना है और फिर लूप को FutureValue.finished() या जो कुछ भी सच हो जाता है। वास्तविक कोड किसी अन्य थ्रेड/प्रक्रिया में निष्पादित होता है। कोशिश करने के लिए, पकड़ने के ब्लॉक में उस के आसपास पकड़ो और FutureValue.cancel() मेरे लिए काम करता है।

मैक्स फ़ंक्शंस के मामले में, आपको पॉइंटर (एक इंट के रूप में) को वापस करने की आवश्यकता होगी जो उस स्ट्रक्चर/ऑब्जेक्ट को इंगित करे जिसमें आपके पास आवश्यक सभी डेटा है (मूल थ्रेड हैंडलर, पूर्ण आदि के लिए बूल)। मैक्स फ़ंक्शन में निर्मित होने के मामले में, आपके मैक्सफंक्शन को उस मैक्सफ़ंक्शन को अलग थ्रेड में कॉल करने की आवश्यकता होगी। मेक्स फ़ंक्शन बस डीएलएल/साझा ऑब्जेक्ट्स के बाद ही हैं।

स्यूडोकोड

FV = mexLongProcessInAnotherThread(); 
try 
    while ~mexIsDone(FV); 
    java.lang.Thread.sleep(100); %pause has a memory leak 
    drawnow; %allow stdout/err from mex to display in command window 
    end 
catch 
    mexCancel(FV); 
end 
+0

ऐसा लगता है कि मुझे ऐसा कुछ चाहिए जो मुझे चाहिए। हालांकि, इस समारोह को मैक्सकैनल कहा जाता है, वह कैसा दिखता है? – patrik

+0

@patrik यह पूरी तरह से निर्भर करता है कि आपकी लंबी प्रक्रिया कैसी दिखती है। अनिवार्य रूप से, रद्द, आइसडोन, और लंबे समय तक सभी को सी में काम करने, एक डीएल को निर्यात करने के लिए, और फिर उन कार्यों को कॉल करने के लिए लिखे गए मैक्स-फ़ंक्शंस में लिखे जाने की आवश्यकता होगी। यह आसान नहीं है और न ही साफ है और न ही सामान्य कोड होने वाला है। – KitsuneYMG

+0

उत्तर के लिए धन्यवाद। यह निराशाजनक प्रतीत होता है, लेकिन वैसे भी, अगर यह हासिल किया जाएगा तो यह निश्चित रूप से एक सुंदर समाधान है। – patrik

0

आप लिनक्स पर अपने matlab चला रहे हैं, आप linux Consule में आदेश से matlab समाप्त कर सकते हैं।

शीर्ष

तो आप matlab को मारने के लिए इस कोड का उपयोग कर सकते हैं:: पहले आप इस कोड से matlab की पीआईडी ​​संख्या खोजना चाहिए मारने

उदाहरण: मारने 58056

5

हैं ctrl + सी तुरंत प्रतिक्रिया नहीं देता है क्योंकि आपकी स्क्रिप्ट बहुत लंबी/जटिल है, इसे पकड़ो।

ब्रेक कमांड तब नहीं चलता है जब मैटलैब अपनी कुछ गहरी स्क्रिप्ट को निष्पादित कर रहा है, और या तो यह बफर में एक ctrl अनुक्रम लॉग नहीं करेगा, या यह बफर को साफ़ करने के ठीक पहले या बस इसे साफ़ करता है कोड। किसी भी मामले में, जब matlab आपकी स्क्रिप्ट को निष्पादित करने के लिए लौटाता है, तो यह पहचान जाएगा कि आप ctrl + c धारण कर रहे हैं और समाप्त कर रहे हैं।

लंबे समय तक चलने वाले कार्यक्रमों के लिए, मैं आमतौर पर स्थिति अपडेट प्रदान करने के लिए एक अच्छी जगह खोजने का प्रयास करता हूं और मैं टिक टिक और टीसी का उपयोग करके कुछ समय के साथ हमेशा रहता हूं। मैं क्या कर रहा हूँ के आधार पर, मैं रन टाइम, खंड समय, औसत के कुछ प्रकार, आदि का उपयोग कर सकते ...

वास्तव में लंबे समय से चल रहा है कार्यक्रमों के लिए, मैं इस असाधारण उपयोगी http://www.mathworks.com/matlabcentral/fileexchange/16649-send-text-message-to-cell-phone/content/send_text_message.m

हो पाया, लेकिन यह ऐसा लगता है कि उनके पास इसके लिए कुछ नए कार्य भी हैं।

1

चूंकि आपने कार्य प्रबंधक का उल्लेख किया है, मुझे लगता है कि आप विंडोज का उपयोग कर रहे हैं। मान लें कि आप संपादक के भीतर अपनी स्क्रिप्ट चला रहे हैं, यदि आप चल रहे प्रोग्राम छोड़ने के रूप में एक ही समय में संपादक छोड़ने के लिए विरोध नहीं कर रहे हैं, तो कीबोर्ड शॉर्टकट कोई प्रक्रिया समाप्त करने के लिए है:

Alt + F4

(जो से मेरा मतलब है एक साथ 'Alt' और अपने कीबोर्ड पर 'F4' कुंजी दबाएँ।)

वैकल्पिक रूप से, के रूप में अन्य उत्तर में उल्लेख किया है,

Ctrl + सी

भी काम करना चाहिए, लेकिन संपादक से बाहर नहीं निकलेगा।