Как интегрировать правило Симпсона с помощью Scipy для построения одномерного графика

Мне нужна помощь, у меня есть задание закодировать интеграцию функции с использованием правила Симпсона. Мне нужно использовать встроенную функцию scipy integrationtesimps для построения одномерного графика. Я просто не знаю, с чего начать. Я думаю, мне нужно получить список / массив каждого значения y для функции, которая соответствует каждому значению x: например

если моя функция - x ^ 2, тогда, когда x равно 0, y равно 0, x равно 1, y равно 1, x равно 2, y равно 4, и так далее до огромного предела ...

а затем используйте интегрировать.simps (y, x), где y - все значения y, как показано выше, а x - все соответствующие значения x.

Однако я вообще не могу заставить его работать ... есть ли у кого-нибудь примеры графика для функции x ^ 2 с использованием Integrate.simps (y, x)?

вот что у меня есть на данный момент:

import numpy as np
from scipy import integrate
import matplotlib.pyplot as plt

x = np.linspace(-10,10,N)
N = 100

yarray = []

def f(x):
    return x**2

for i in x :
    y = f(i)
    yarray.append(y)

print(yarray)


E = integrate.simps(yarray,x)
print(E)

plt.plot(x,E)

person M.B    schedule 20.11.2018    source источник
comment
Что вы подразумеваете под построением одномерного графика, пытаетесь ли вы построить x ^ 2, интеграцию x ^ 2 или что-то еще?   -  person William Lee    schedule 20.11.2018
comment
я пытаюсь построить интеграцию x ^ 2, используя интегрировать.simps ()   -  person M.B    schedule 20.11.2018


Ответы (1)


По сути, вам нужно вычислить интегральное значение для каждого диапазона x, от [-10, -10] до [-10,10].

Этот пример кода отображает

введите описание изображения здесь

import numpy as np
from scipy import integrate
import matplotlib.pyplot as plt

def f(x):
    return x**2

N = 100
x = np.linspace(-10,10,N)


integrals = []
x_range = []
y_range = []
for i in x:
    x_range.append(i)
    y_range.append(f(i))
    integral = integrate.simps(y_range, x_range)
    integrals.append(integral)

plt.plot(x, integrals)
plt.show()

Чтобы обернуть это

import numpy as np
from scipy import integrate
import matplotlib.pyplot as plt

def integrals(f, xs):
    x_range = []
    y_range = []
    results = []
    for x in xs:
        x_range.append(x)
        y_range.append(f(x))
        integral = integrate.simps(y_range, x_range)
        results.append(integral)
    return results

def f(x, b):
    return (x-b)**2

xs = np.linspace(-10, 10, 100)

plt.plot(xs, integrals(lambda x: f(x, 0), xs), label='b=0')
plt.plot(xs, integrals(lambda x: f(x, 2), xs), label='b=2')
plt.plot(xs, integrals(lambda x: f(x, 4), xs), label='b=4')
plt.title('$y(x) = \int_{-10}^{x}(t-b)^2dt$')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

и вы получите  введите описание изображения здесь

person William Lee    schedule 20.11.2018
comment
Спасибо! это действительно хорошо работает, что произойдет, если в моей функции будет переменная? например (x-b) ^ 2, где b меняется - person M.B; 20.11.2018
comment
Не должно ли Y быть равным нулю, если X = 0? Что заставляет все двигаться вверх? - person Michael H; 21.09.2020