2016-10-09 3 views
0

f (x) представляет собой функцию треугольной формы сигнала. В котором вы вводите значение x, и оно возвращает вам соответствующее значение y. Однако моя функция возвращает x каждый раз вместо y. Например, F (1) должен дать 2/пи вместо 1.Возвращаемое значение функции x вместо y

def f(x): 

    y=x 

    if x in arange(-math.pi,-math.pi/2): 
     y=(-2/math.pi)*x-2 


    elif x in arange(-math.pi/2,math.pi/2): 
     y=(2/math.pi)*x 


    elif x in arange(math.pi/2,math.pi): 
     y=(-2/math.pi)*x+2 

    return y 
+1

Если у вас не было ровно 1 в массиве, то вы ничего не сопоставляете, распечатываете каждый диапазон, и это будет довольно очевидно. –

ответ

1

numpy.arange возвращает массив непоследовательных чисел. in операция против него вернет True, только если левый операнд принадлежит этим числам.

Чтобы избежать такой проблемы, лучше использовать <=/<. В дополнение к тому, чтобы быть правильным, это также экономит затраты на создание массивов.

def f(x): 
    y = x 

    if -math.pi <= x < -math.pi/2: 
     y = (-2/math.pi)*x-2 
    elif -math.pi/2 <= x < math.pi/2: 
     y = (2/math.pi)*x 
    elif math.pi/2 <= x < math.pi: 
     y = (-2/math.pi)*x+2 

    return y 
0

Ключевое слово 'in' проверяет, находится ли найденный элемент в списке. Здесь ваш список содержит только значения на шаге 1. Возможно, значение x не является целым шагом. Следовательно, скорректированная функция будет:

def f(x): 

    y=x 

    if x>-math.pi and x<-math.pi/2: 
     y=(-2/math.pi)*x-2 


    elif x>-math.pi/2 and x<math.pi/2: 
     y=(2/math.pi)*x 


    elif x>math.pi/2 and x<math.pi: 
     y=(-2/math.pi)*x+2 

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