Показать результат дроби с е в делителе в виде графика? - PullRequest
1 голос
/ 14 июня 2019

Я получил домашнее задание, где мне нужно написать функцию, которая показывает на графике функцию: 1/1 + e ^ (- x).

Таким образом, мне удалось показать функцию так, как она должна быть написана в заголовке, однако при попытке определить переменную (f_x) в качестве вычисления кажется, что я не могу ни ввести e в знаменатель, ни дать ей показатель степени .

Чтобы упростить мой вопрос: я бы хотел f_x показать на графике функцию, написанную в заголовке, в заданном диапазоне (a и b). Как правильно написать функцию в 'f_x'?

f_x=1/(1+(math.frexp)**(-x)) не работает

f_x=1/(1+math.exp(-x)) niether

def plot_sigmoid(a,b):
    if a<b:
        style.use("seaborn")
        plt.title(r'$F(x)=(\frac{1}{1+e^{-x} )})$')
        x=np.arange(a,b+1,0.1)
        f_x=1/(1+math.exp(-x))
        plt.plot()
        plt.show()
    else:
        print("a should be smaller than b (a < b)")
        return

got me:
Traceback (most recent call last):
  File "C:/Users/User/PycharmProjects/Tirgul/assign 5 plot-sci-num/Q2.py", line 16, in <module>
    plot_sigmoid(1,3)
  File "C:/Users/User/PycharmProjects/Tirgul/assign 5 plot-sci-num/Q2.py", line 10, in plot_sigmoid
    f_x=1/(1+math.exp(-x))
TypeError: only size-1 arrays can be converted to Python scalars

1 Ответ

1 голос
/ 14 июня 2019

Спасибо за включение кода в ваш вопрос.Ошибка говорит вам, что math.exp не может выполнять векторизованные операции.Поскольку x является массивом NumPY, вы пытаетесь выполнить векторизованную операцию.Это будет работать, если вы используете цикл for, а затем применяете math.exp к одному элементу за раз.Другие альтернативы включают map.

Однако для текущей проблемы, поскольку вы уже импортировали NumPy, вы можете использовать np.exp из модуля NumPy следующим образом.Кроме того, вам также необходимо передать значения x и y в команду plot

def plot_sigmoid(a,b):
    if a<b:
        plt.title(r'$F(x)=(\frac{1}{1+e^{-x} )})$')
        x=np.arange(a,b+1,0.1)
        f_x=1/(1+np.exp(-x))
        plt.plot(x, f_x)
        plt.show()
    else:
        print("a should be smaller than b (a < b)")
        return

plot_sigmoid(0, 10)    

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...