Подтвердить что ты не робот

Вычисление площади под кривой, заданной набором координат, не зная функции

У меня есть один список из 100 чисел в качестве высоты для оси Y и как длина для оси X: от 1 до 100 с постоянным шагом 5. Мне нужно рассчитать площадь, чтобы она включалась кривой (x, y) и ось X, используя прямоугольники и Scipy. Должен ли я найти функцию этой кривой? или нет?... почти все примеры, которые я прочитал, касаются конкретного уравнения для оси Y. В моем случае нет никакого уравнения, просто данные из списка. Классическое решение состоит в том, чтобы добавить или Y точек и несколько на шаг X... используя Scipy любую идею?

Пожалуйста, может ли кто-нибудь рекомендовать любую книгу, которая фокусируется на числовых (конечных элементарных) методах, используя Scipy и Numpy?...

4b9b3361

Ответ 1

В числовых и scipy-библиотеках входят композитные трапециевидные (numpy.trapz) и Симпсон (scipy.integrate.simps).

Вот простой пример. В trapz и simps аргумент dx=5 указывает, что расстояние между данными по оси x равно 5 единицам.

from __future__ import print_function

import numpy as np
from scipy.integrate import simps
from numpy import trapz


# The y values.  A numpy array is used here,
# but a python list could also be used.
y = np.array([5, 20, 4, 18, 19, 18, 7, 4])

# Compute the area using the composite trapezoidal rule.
area = trapz(y, dx=5)
print("area =", area)

# Compute the area using the composite Simpson rule.
area = simps(y, dx=5)
print("area =", area)

Вывод:

area = 452.5
area = 460.0

Ответ 2

Вы можете использовать правило Симпсонов или правило Трапеции, чтобы вычислить область под графом, учитывая таблицу значений y в регулярном интервале.

Правила Симпсонов

Правило трапеции

Если математика не ваша вещь, оставьте комментарий, и я объясню это дальше.

Python script, который вычисляет правило Симпсонов:

def integrate(y_vals, h):
    i=1
    total=y_vals[0]+y_vals[-1]
    for y in y_vals[1:-1]:
        if i%2 == 0:
            total+=2*y
        else:
            total+=4*y
        i+=1
    return total*(h/3.0)

h - смещение (или пробел) между значениями y, а y_vals - это массив значений y, y.

Пример (в том же файле, что и выше):

y_values=[13, 45.3, 12, 1, 476, 0]
interval=1.2
area=integrate(y_values, interval)
print "The area is", area