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