Численное интегрирование функций

Численные методы с Python 3
18.12.2020

(Всего голосов: 0)

Перечень алгоритмов:

 Метод левых прямоугольников;

 Метод правых прямоугольников;

 Метод средних прямоугольников;

 Метод трапеций;

 Метод Симпсона (парабол);

 Метод Ньютона («3/8»).

Теорию рекомендую почитать здесь!

 

Код:

#библиотека для параметризации функции
from sympy import *

#метод левых прямоугольников
def left_rectangle(y, ab, N):
    a, b = ab[0], ab[1]
    h = (b - a) / N #шаг
    s = 0
    while round(a, 8) < b:
        s += h * y.evalf(subs={'x': a})
        a += h
    return s

#метод правых прямоугольников
def right_rectangle(y, ab, N):
    a, b = ab[0], ab[1]
    h = (b - a) / N #шаг
    s = 0
    while round(a + h, 8) < b:
        s += h * y.evalf(subs={'x': a + h})
        a += h
    return s

#метод средних прямоугольников
def middle_rectangle(y, ab, N):
    a, b = ab[0], ab[1]
    h = (b - a) / N #шаг
    s = 0
    while round(a, 8) < b:
        s += h * y.evalf(subs={'x': a + h / 2})
        a += h
    return s

#метод трапеций
def trapeze(y, ab, N):
    a, b = ab[0], ab[1]
    h = (b - a) / N #шаг
    s = 0
    while round(a, 8) < b:
        s += 0.5 * h * (y.evalf(subs={'x': a}) + y.evalf(subs={'x': a + h}))
        a += h
    return s

#метод Симпсона
def simpson(y, ab, N):
    a, b = ab[0], ab[1]
    h = (b - a) / N #шаг
    s = 0
    while round(a, 8) < b:
        s += (h / 6) * (y.evalf(subs={'x': a}) + 4 * y.evalf(subs={'x': a + h / 2}) + y.evalf(subs={'x': a + h}))
        a += h
    return s

#метод Ньютона
def nyton(y, ab, N):
    a, b = ab[0], ab[1]
    h = (b - a) / N #шаг
    s = 0
    while round(a, 8) < b:
        s += (h / 8) * (y.evalf(subs={'x': a}) + 3 * y.evalf(subs={'x': a + h / 3}) + 3 * y.evalf(subs={'x': a + h / 1.5}) + y.evalf(subs={'x': a + h}))
        a += h
    return s

#вывод на экран
x = symbols('x')
y = 2 * x ** 3  #функция
ab = [0, 4]     #отрезок
N = 10          #число разбиений

print(left_rectangle(y, ab, N))
print(right_rectangle(y, ab, N))
print(middle_rectangle(y, ab, N))
print(simpson(y, ab, N))
print(nyton(y, ab, N))


Оставить комментарий