2016-11-06 3 views
0

Look:Как манипулировать мнимую часть матрицы в MATLAB

i=[1+1i 2+2i]; 

Я хочу, чтобы это сделать:

imag(i)=10; 

желаемого результата:

ans = [1+10i 2+10i]


И что по этому поводу:

m=[1+1i 2+2i 3+3i 4+4i 5+5i]; 

Я хочу:

imag(m(real(m)>2)) = 10; 

желаемого результата:

ans = [ 1+1i 2+2i 3+10i 4+10i 5+10i ]

К сожалению, нет! Этот желаемый результат не происходит в MATLAB.

+0

Какой выход вы хотите? это: 'i = [1 + 2i 2 + 2i];'? –

+0

Хорошо, спасибо, исправлено. – mohammadsdtmnd

ответ

0

Небольшое примечание, i плохо имя переменной при использовании комплексных чисел, поэтому я заменить его vec

vec=[1+1i 2+2i]; 
vec = complex(real(vec), 2); 

Edit

С логической индексации:

idn = real(vec)>2; 
vec(idn) = complex(real(vec(idn)), 10); 
+0

Если бы я хотел использовать «логическое индексирование» для назначения мнимой части, то что мы должны делать? – mohammadsdtmnd

+0

@mohammadsdtmnd Я обновил свой ответ. – mpaskov

+0

Ответ правильный, и я смущен, чтобы принять, который! Может быть, быстрее можно выбрать, но какой из них быстрее? – mohammadsdtmnd

0

В В первом случае вы можете сделать что-то вроде:

v = [1+1i 2+2i]; 
v = real(v) + 10i; 

Во втором случае вы можете сделать что-то вроде:

v = [1+1i 2+2i 3+3i 4+4i 5+5i]; 
v(real(v)>2) = real(v(real(v)>2)) + 10i; 

Насколько я знаю, это не представляется возможным ссылаться на действительные и мнимые части объявления комплексное число в Matlab, как если бы они были отдельными переменными без вызова функции к реальным и/или мнимым.

+0

оба ответа верны и я смущен, чтобы принять, какой из них !! Может быть, быстрее можно выбрать, но какой из них быстрее? – mohammadsdtmnd

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