Вы можете использовать ваше условие в качестве маски, а затем использовать индексирование массива NumPy, чтобы присвоить значения от y до 0 для областей, которые вы хотите.
Пара изменений:
- Я использовал
linspace
для создания мелкой сетки, чтобы включить больше точек данных между x=0
и x=1
.range
, который вы использовали, генерирует целое число, так что в противном случае вы будете иметь прямую линию между 0 и 1. y[(x<=0) | (x>=1)] = 0
является ключевым моментом здесь.Оператор |
объединяет два условия (x<=0) | (x>=1)
и возвращает индексы из массива x, в котором выполняется это условие True
.Затем эти индексы используются в качестве входных данных для вашего массива y, а затем эти значения присваиваются 0.
Я ограничил пределы x от -1,5 до 1,5, чтобы выделить интересную область.
Полный ответ для случая x ^ 2
import numpy as np
import matplotlib.pyplot as plt
def graph(formula, x_range):
x = np.array(x_range)
y = eval(formula)
y[(x<=0) | (x>=1)] = 0
plt.plot(x, y)
plt.xlim(-1.5,1.5)
plt.show()
graph('x**2', np.linspace(-100, 100, 10000))
График для вашего фактического уравнения
import numpy as np
import matplotlib.pyplot as plt
def graph(formula, x_range):
x = np.array(x_range)
y = eval(formula)
y[(x<=0) | (x>=1)] = 0
plt.plot(x, y)
plt.xlim(-1.5,1.5)
plt.show()
graph('(4/5)*(((x**4)/4)+x)', np.linspace(-100, 100, 10000))