MATLAB

2010-06-25 20 views
12

में वास्तविक समय साजिश मैं MATLAB के लिए बहुत नया हूं और मैं कुछ गणनाओं का वास्तविक समय साजिश प्रदर्शित करने की कोशिश कर रहा था। मेरे पास N आकार का वेक्टर है और मैं एक समय में m मानों के साथ काम करता हूं (m = N/4 कहता हूं), इसलिए मैं पहले m मानों को प्लॉट करना चाहता हूं और जैसे ही दूसरे m मानों की गणना की जाती है, उन्हें पहले प्लॉट को प्रतिस्थापित किया जाता है।MATLAB

for i=1:N, 
    ... 
    //compute m 
    ... 
    plot(m); 
end; 

लेकिन यह समाप्त करने के लिए सभी छोरों डेटा प्लॉट करने के लिए हर पाश और इंतजार में भूखंड को अद्यतन करने में विफल रहता है:

मेरे दृष्टिकोण इस प्रकार थी। मेरा सवाल है: क्या मुझे plot की बजाय किसी अन्य फ़ंक्शन का उपयोग करना चाहिए या क्या मैं प्रत्येक लूप में कुछ देरी जोड़ सकता हूं?

मुझे लगता है कि मुझे हर बार फिर से साजिश करने की बजाय साजिश को अद्यतन करने के बारे में पता नहीं होना चाहिए।

+0

संबंधित: https://stackoverflow.com/questions/13102654/how-should-i-update-the-data-of-a-plot-in-matlab –

उत्तर

11

प्लॉट को अपडेट करने के लिए आप DRAWNOW पर कॉल जोड़ सकते हैं। reference page देखें। ध्यान दें कि DRAWNOW ग्राफिक्स ईवेंट कतार को फ़्लश करने का कारण बनता है, जो कॉलबैक इत्यादि को निष्पादित कर सकता है।

+0

अब कुछ समय हो गया है, लेकिन आप शायद चाहें डबलबफरिंग को देखने और उपयोग करने के लिए। मुझे याद नहीं है कि उस विकल्प को कहां सेट करना है - लेकिन यह निश्चित रूप से उस समय एक फर्क पड़ता है :) – Chau

+2

डबल बफरिंग आकृति की एक संपत्ति है - "सेट (जीसीएफ, 'डबलबफर', 'ऑन')" या इसी तरह। शायद मदद भी कर सकते हैं, लेकिन आपको अपडेट को मजबूर करने के लिए एक ड्राव की आवश्यकता है। – Edric

+0

दरअसल मैं ड्रॉव कमांड खो रहा था। बहुत बहुत धन्यवाद। – kirbuchi

29

Edric mentioned के रूप में, आप ग्राफिक्स के अपडेट को मजबूर करने के लिए plot पर कॉल के बाद drawnow कमांड को निश्चित रूप से शामिल करना चाहते हैं। हालांकि, भूखंडों को एनिमेट करने के लिए एक और अधिक कुशल और चिकनी विधि है जिसमें हर बार पूरी साजिश को पुनर्जीवित करने में शामिल नहीं है। आप बस अपनी साजिश शुरू कर सकते हैं, प्लॉट ऑब्जेक्ट पर handle पर कब्जा कर सकते हैं, फिर set कमांड का उपयोग करके उस लूप में उस ऑब्जेक्ट के गुणों को संशोधित करें। यहाँ एक उदाहरण है:

hLine = plot(nan);   % Initialize a plot line (which isn't displayed yet 
          % because the values are NaN) 
for i = 1:N    % Loop N times 
    ... 
    % Compute m here 
    ... 
    set(hLine, 'YData', m); % Update the y data of the line 
    drawnow     % Force the graphics to update immediately 
end 

इसके अलावा, आपके पाश से पहले और plot करने के लिए कॉल करने के बाद आप axes properties के एक नंबर, axes limits की तरह सेट कर सकते हैं, आदि, यदि आप कुल्हाड़ियों तय रहने के लिए चाहते हैं और परिवर्तन नहीं उनके प्लॉट किए गए प्रत्येक नए वेक्टर m के साथ उपस्थिति।

+0

धन्यवाद, यह चाल है! आपके दोनों और एड्रिक के समाधान ने बहुत अच्छा काम किया। लेकिन अगर मैं इसे अपना रास्ता करता हूं तो इसे हर बार दोहराना नहीं होगा। – kirbuchi

+0

@kirbuchi यह स्वीकार्य उत्तर क्यों नहीं है? – vvy

+0

@ vvy मैंने दूसरे को स्वीकार किया क्योंकि यह पहली बार आया था और मेरी समस्या को हल करने में मेरी मदद की, लेकिन मुझे एहसास हुआ कि यह बेहतर था। मुझे लगता है कि वोटों की संख्या खुद के लिए बोलती है। – kirbuchi