Преобразование типа MATLAB: от сложного двойного к двойному

У меня есть вектор типа double, скажем, vec. Когда я, например, выступаю

  test=vec.^ 1.4623;

Я получаю test как сложный двойной тип, и мне интересно, есть ли способ преобразовать test в double , так как я хочу получать десятичные значения. ps: Стоит выделить то, что меня не интересуют реальные числа, полученные из:

 real(test)

В качестве иллюстрации:

vec(2)^1.4623 = -1.8293^1.4623 =  -2.4185

но вместо этого я получил:

test(2)=vec(2)^1.4623= -0.285678007027767 - 2.40147255196906i

Вкратце, способ конвертации:

test(2) = -2.4185

Спасибо


person owner    schedule 21.06.2015    source источник


Ответы (1)


Вы можете временно «убрать» знак минус, который вызывает комплексные числа:

vec = [-2.5, 2, -1.5 , 1, -0.5, 0];
sign_vec = sign(vec);
test = sign_vec.*((sign_vec.*vec).^1.4623);

Это приводит к:

test =
      -3.8186    2.7555   -1.8092    1.0000   -0.3629         0

Общий способ преобразования включает функцию abs:

>> test = (-1.8293)^1.4623
test = 
      -0.2858 - 2.4015i

>> -abs(test)
ans =
     -2.4185
person m.s.    schedule 21.06.2015