2011-03-01 24 views
5

Matlab'da, öğeleri karmaşık veya gerçek olabilen bir vektör olduğunu varsayalım. Gerçek olmayan unsurları nasıl çıkaracağımı ve sonuçta vektörün boyutunu nasıl azaltacağını merak ediyordum? Teşekkürler ve saygılar!Matlab'da bir vektördeki karmaşık sayıların nasıl ortadan kaldırılacağı Matlab

+0

[matlab dizisindeki gerçek sayıyı ayıkla] 'nın olası kopyası (http://stackoverflow.com/questions/13859760/extract-real-number-from-array-in-matlab) – Shai

cevap

11

kullanın REAL ve IMAG fonksiyonları:

 
>> 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 

DÜZENLEME

yukarıdaki Yazarın soruya cevap vermez. Bu yapar.

FIND ve REAL işlevlerini kullanın: sormak için bir çok sıradışı bir şey

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

v = 

          1 +      1i 
          2       
          3       

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

ans = 

    2 
    3 
+0

Teşekkürler! Ama ben bu gerçek olmayan sayıları, vektörün dışına taşımak yerine, gerçek parçalarla değiştirmemek istiyorum. – Tim

+0

@Tim - Cevabınızı yorumunuzu yansıtacak şekilde düzenledim. –

+0

Teşekkürler! Ama yine de istediğim şey değil. Örneğin, v = [1 + i, 2, 3], v [2,3], [1,2,3] ve [1,0,0] olmak istiyorum. – Tim

1

. Hayali kısım kayan nokta sayısı olduğundan, gerçekte hangi numaranın gerçek bir sayı olduğunu ve gerçek sayıya çok yakın olduğunu söyleyemezsiniz. Bu tür bir fonksiyon Matlab'da mevcut değildir, çünkü her şey için nasıl yararlı olabileceği çok net değildir (bu sayıları kaldırmak anlamsızdır). Asıl amacınızı burada belirtmek, daha iyi yanıtlar almanıza yardımcı olabilir.

yalnızca gerçek sayılar vektör kalan emin olmak istiyorsanız, (o matrisleri ve dikey satırlar ile çalışmaz, ancak fikir var) Aşağıdaki kullanabilirsiniz:

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 
gerçek sayıya yakın tüm sayıları tutmak istiyorum, ancak bazı küçük sıfır olmayan hayali parçaya sahip olsaydı

, aşağıdaki kullanabilirsiniz: elbette

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 

, bize söylersen Ya gerçek ölçüt, size daha iyi bir fikir vermek çok daha kolay olurdu. Bir çeşit denklem ya da denklem sistemi, gerçek bir polinom köküne gerçek çözümler mi arıyorsunuz? Bu durumda, ilki yaklaşım hatası nedeniyle gerçek bir çözümü özleyebilir ve ikincisi size çözüm olmayan şeyler verebilir.

4

Ayrıca Matlab'ın vektör sözdizimi kullanarak bir döngü içinde test önleyebilirsiniz:

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] olmalı ve z eşitlik şartı tutan her [1,2,6,7,9]

imag(x) == 0true değerlere sahip bir logical vektörü verir olmalı . x(<logical vector>) yalnızca öğelerinin bulunduğu <logical vector> öğesinin true olduğu yeni bir vektör verir.

İlgili konular