Matlab

2011-03-01 11 views
5

में एक वेक्टर में जटिल संख्या को कैसे खत्म करें Matlab में, मान लीजिए कि एक वेक्टर है जिसका तत्व जटिल या वास्तविक हो सकता है। मैं सोच रहा था कि अवास्तविक तत्वों को कैसे हटाया जाए, और इसके परिणामस्वरूप वेक्टर के आकार को कम किया जाए? धन्यवाद एवं शुभकामनाएँ!Matlab

+0

संभावित डुप्लिकेट [मैटलैब में सरणी से वास्तविक संख्या निकालें] (http://stackoverflow.com/questions/13859760/extract-real-number-from-array-in-matlab) – Shai

उत्तर

11

उपयोग REAL और IMAG कार्य:

 
>> x = [1+i; 4+3i; 5+6i] 

x = 

          1 +      1i 
          4 +      3i 
          5 +      6i 

>> real(x) 

ans = 

    1 
    4 
    5 

>> imag(x) 

ans = 

    1 
    3 
    6 

संपादित

ऊपर पोस्टर के सवाल का जवाब नहीं है। यह करता है

FIND और REAL कार्यों का उपयोग करें:

 
>> v = [1+i; 2; 3] 

v = 

          1 +      1i 
          2       
          3       

>> v(v == real(v)) 

ans = 

    2 
    3 
+0

धन्यवाद! लेकिन मैं उन अवास्तविक संख्याओं को वेक्टर से बाहर ले जाना चाहता हूं, उन्हें अपने असली हिस्सों से प्रतिस्थापित नहीं करना चाहता हूं। – Tim

+0

@Tim - मैंने आपकी टिप्पणी को दर्शाने के लिए अपना उत्तर संपादित किया। –

+0

धन्यवाद! लेकिन अभी भी मैंने जो नहीं पूछा है। उदाहरण के लिए, v = [1 + i, 2, 3], मैं चाहता हूं कि वी बनें [2,3], न कि [1,2,3] और न ही [1,0,0]। – Tim

1

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

आप यह सुनिश्चित करना है कि केवल वास्तविक संख्या वेक्टर में छोड़ दिया जाता चाहते हैं, आप (यह मैट्रिक्स और ऊर्ध्वाधर पंक्तियों के साथ काम नहीं करता है, लेकिन आप विचार मिल गया है) निम्न का उपयोग कर सकते

x = [1, 2, 3+1i, 4+2i, 5+3i, 6, 7, 8+4i, 9+0i] 
z = [] 
for k = [1:length(x)] 
    if imag(x(k)) == 0 
     z = [z, real(x(k))] 
    endif 
endfor 

आप सभी नंबरों कि वास्तविक संख्या के करीब हैं रखना चाहते हैं, लेकिन कुछ छोटे गैर शून्य काल्पनिक हिस्सा हो सकता था, तो आप निम्न का उपयोग कर सकते हैं:

x = [1, 2, 3+1i, 4+2i, 5+3i, 6, 7, 8+4i, 9+0.000001i] 
z = [] 
for k = [1:length(x)] 
    if abs(imag(x(k))) < 0.00001 
     z = [z, real(x(k))] 
    endif 
endfor 
बेशक

, अगर आप हमें बताएं कि आपके वास्तविक मानदंड यह है कि आपको एक बेहतर विचार देना बहुत आसान होगा। क्या आप किसी तरह के समीकरण या समीकरणों की प्रणाली, बहुपद की वास्तविक जड़ों के वास्तविक समाधान की तलाश में हैं? इस मामले में, पहले व्यक्ति को सन्निकटन त्रुटि के कारण वास्तविक समाधान याद आ सकता है, और दूसरा आपको ऐसी चीजें दे सकता है जो समाधान नहीं हैं।

4

तुम भी मैटलैब का वेक्टर सिंटैक्स का उपयोग एक पाश में परीक्षण से बचने कर सकते हैं:

x = [1, 2, 3+1i, 4+2i, 5+3i, 6, 7, 8+4i, 9+0.000001i] 
y = x(imag(x) == 0); 
z = real(x(abs(imag(x)) < 0.00001)); 

y[1,2,6,7] होना चाहिए और z[1,2,6,7,9]

imag(x) == 0 पैदावार true मूल्यों के साथ एक logical वेक्टर जब भी समानता हालत धारण किया जाना चाहिए । x(<logical vector>)x के तत्वों के साथ एक नया वेक्टर उत्पन्न करता है जहां <logical vector>true था।