Как мне построить интеграл от e ^ (- t ^ 2) от x = 0 до x = 3 в Python? - PullRequest
0 голосов
/ 24 ноября 2018

Мне нужно как рассчитать, так и построить интеграл ниже в Python:

интеграл от функции e ^ (- t ^ 2) от x = 0 до x = 3

Пока мне удалось вычислить интеграл, используя правило Симпсона.Следующий бит, с которым я борюсь, это построение интеграла e ^ (- t ^ 2) против x от x = 0 до x = 3 (см. Изображение выше).

Вот код I 'написано для вычисления интеграла -

from math import exp

def f(t):
    return exp(-(t**2))

a = 0
b = 3
h = 0.1
N = int((b-a)/h)
s_even = 0
s_odd = 0

for k in range(1,N,2):
    s_odd += f(a+k*h)

for k in range(2,N,2):
    s_even += f(a+k*h)

s = f(a) + f(b) + 4*s_odd + 2*s_even
Integral = h*s/3
print(Integral)

Как мне тогда создать график этого интеграла?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Спасибо за помощь Red Cricket.Похоже, вы, возможно, изобразили функцию e ^ (- t ^ 2), а не интеграл этой функции.Тем не менее, я думаю, что я решил это;Я обнаружил, что у Сципи есть интегрирующая функция:

from math import exp
from numpy import arange
from scipy import integrate

def f(t):
    return exp(-(t**2))

a = 0
b = 3
h = 0.1
N = int((b-a)/h)

s_even = 0
s_odd = 0

for k in range(1,N,2):
    s_odd += f(a+k*h)

for k in range(2,N,2):
    s_even += f(a+k*h)

s = f(a) + f(b) + 4*s_odd + 2*s_even
I = h*s/3

function = []
x = []
for t in arange(0,4,h):
    function.append(f(t))
for i in arange(0,4,h):
    x.append(i)

function_int = integrate.cumtrapz(function,x,initial=0)

plot(x,function_int)
show()
print(I)

Это создает график интеграла и выводит окончательное значение самого интеграла.Ура!

0 голосов
/ 24 ноября 2018

Вот скрипт, который я написал, который выполняет ваши расчеты и строит их с помощью PyQtGraph :

from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg

from math import exp

class I:

    def f(self,t):
        return exp(-(t**2))

    def __init__(self, a = 0, b = 3, h = 0.1):
        N = int((b-a)/h)
        s_even = s_odd = 0
        for k in range(1,N,2):
            s_odd += self.f(a+k*h)

        for k in range(2,N,2):
            s_even += self.f(a+k*h)

        s = self.f(a) + self.f(b) + 4*s_odd + 2*s_even
        self.I = h*s/3

    def __str__(self):
        return "I: %s" % self.I

def plot(array):
    app = QtGui.QApplication([])
    win = pg.GraphicsWindow(title="Basic plotting examples")
    win.resize(1000,600)
    win.setWindowTitle('pyqtgraph example: Plotting')

    # Enable antialiasing for prettier plots
    pg.setConfigOptions(antialias=True)

    p1 = win.addPlot(title="Basic array plotting", y=array)

    QtGui.QApplication.instance().exec_()

def main():
    a=0
    b=a+0.001
    points=[]
    while(a<3):
        points.append(I(a,b).I)
        a=b
        b=a+0.001
    plot(points)


## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
    main()

Вот график, который он рисует:

enter image description here

...