График этой функции как совокупное распределение - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь создать накопительный график распределения следующей функции в Python, от -infinity до бесконечности:

enter image description here

Изначально я пыталсяэтот код, который я нашел в сети, похоже, работает для таких функций, как x ** 2:

import numpy as np
import matplotlib.pyplot as plt
def graph(formula, x_range):
    x = np.array(x_range)
    y = eval(formula)
    plt.plot(x, y)
    plt.show()

#graph('(4/5)*(((x**4)/4)+x)', range(-100, 100))

graph('x**2', range(-100, 100))

Результат: enter image description here

Проблема в том, что я 'Я не уверен, как перевести этот код, чтобы учесть другие условия функций в этом графе (т. е. 0, если x <= 0, 0, если x> = 1).Если этот код не может быть изменен для учета этих двух условий, есть ли другие предложения по коду, которые могут это сделать?

1 Ответ

0 голосов
/ 05 февраля 2019

Вы можете использовать ваше условие в качестве маски, а затем использовать индексирование массива 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))

enter image description here

enter image description here

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