cos
функция выглядит следующим образом: Source
Изображение: Wikipedia, Trigonometric functions
Как вы можете ясно видеть, косинус никогда не поднимается выше или ниже 1
-1
. Вы работаете с acos
, который является обратной функцией косинуса. Вы в основном задаете вопрос: «Какое значение для x
составляет cos(x)
? Возвращаю мое заданное значение y
?
Теперь для h=3
, код создает cos_theta
«S, которые ниже-1
. Как видно из графика, не может достичь таких значений с действительными числами. Однако косинус комплексного номера может достичь значений выше 1
и ниже -1
. MATLAB правильно признает, что реального решения нет, но сложные решения - так что в результате он возвращает комплексные углы. Для h=1
и h=2
поведение cos_theta
ведет себя красиво и меньше, чем -1
, поэтому результаты реальны.
PS: Для петель плохие/медленные. Вы можете отказаться от этого, сделав h
вектор-столбец вместо вектора строки (путем транспонирования его с помощью .'
), а затем используя bsxfun
(в «старых» версиях MATLAB) или используйте встроенное вещание в R2016 или новее.
h = (1:K-2).';
cos_theta = bsxfun(@minus, cos_theta_0 , h*log(2)); % For older than R2016
cos_theta = cos_theta_0 - h*log(2); % For newer than R2016
theta = acos(cos_theta);
Что такое * актуальное значение 'alpha'. – Suever
Потому что, как говорит вам хорошая документация Матлаба, вы дали 'acos' аргумент вне' [-1,1] '? –
'alpha' - это массив, состоящий из 19 значений от 1 до 10 с 0,5-ступенчатым @Suever – ElenaPhys