2014-01-28 2 views
2

для любых корней Мне нужно создать скрипт, чтобы выход был только реальным отрицательным нечетным корнем.Matlab: Реальные отрицательные нечетные корни

Например: rtemp = [-8 -8 -8 -8 4 -1 3]

выбрать только действительные отрицательные корни (есть некоторые случаи, когда корни являются сложными, поэтому я не хочу сложные корни:

rneg=[]; 
for i=1:length(rtemp) 
    if(isreal(rtemp(i))==1) && (rtemp(i)<0) 
     rneg = [rneg rtemp(i)]; 
    end 
end 

rneg = 

    -8 -8 -8 -8 -1 

Теперь я только хочу только нечетные корни. В этом примере -8 - четный корень (4 раза), а -1 - нечетный, поэтому выход будет равен -1. Если rtemp = [-8 -8 -8 4 -1 3], то -8 будет нечетным корнем (3 раза), поэтому выход будет [-1 -8]. Как я могу написать, чтобы иметь только нечетные корни? Спасибо!

ответ

2

Чтобы получить отрицательные вещественные корни:

rneg = rtemp(imag(rtemp)==0 & real(rtemp) < 0) 

Тогда, чтобы получить только нечетные корни:

R = min(rneg):max(rneg); 
final = R(mod(histc(rneg,R),2)==1) 
+0

+1 Но заметьте 'isreal' тип, а не значение определяет. Например, 'isreal (complex (1))' givers 'false'. В зависимости от того, как выполняются корни, может быть более безопасным протестировать 'imag (rtemp) == 0' вместо' isreal (rtemp) '(в дополнение к проблемам, связанным с сравнением с реальным числом) –

+0

@LuisMendo Вы правы, также похоже, что 'isreal' не возвращает вектор плюс' <0' сбой на вектор комплексных чисел. Исправлено. – Dan

Смежные вопросы