2016-03-24 4 views
0

Есть ли способ выполнить правило трапеции по набору значений x и y в списке? У меня есть два списка чисел, которые при построении друг против друга дают форму кривой звонка, как бы я мог найти область кривой? У меня есть этот код, но я не могу понять, как его изменить, чтобы работать только с двумя списками чисел;Значение правила трапеции в списке

def trap0 (f ,a ,b ,n): 
    # Basic trapezium rule . Integrate f(x) over theinterval from a to b using n strips 
    h= float (b-a)/n 
    s =0.5*(f(a)+f(b)) 
    for i in range (1,n): 
     s= s+f(a+i*h) 
    return s*h 
+0

В настоящий момент этот код не делает правильную вещь. От куда это? Вы протестировали его? –

+0

Вам нужно реализовать функцию самостоятельно? Доступны ли внешние библиотеки, например. [ 'Numpy.trapz()'] (http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.trapz.html)? [Scipy] (http://docs.scipy.org/doc/scipy/reference/tutorial/integrate.html) также вызывает ту же функцию. – Reti43

ответ

0

Какую функцию, точно, вы хотите интегрировать? Это, например, тот, который задается путем сортировки х-коордов на порядок и затем линейно интерполировать между последовательными (х, у) парами?

Или идея о том, что у вас есть пучок возможных нерегулярно разнесенных (x, f (x)) пар, и вы хотите вычислить сумму площадей трапеций, определяемых последовательными парами (которые будут аппроксимация интеграла любой функции, проходящей через эти точки)?

Если бывший: я предлагаю что-то вдоль этих линий (опасность: непроверенный код):

class PiecewiseLinearFunction: 
    def __init__(self, xs, ys): 
     self.coords = zip(xs, ys) 
     self.coords.sort() 
    def __call__(self, x): 
     # I'll let you implement this 
     # but the idea is to find which interval x lies in, e.g. 
     # by bisection, and then to evaluate f by linear interpolation 
     # between the ys on either side 

, после чего вы можете сделать экземпляр PiecewiseLinearFunction и передать его в trap0 функции или любой другой.

Если последний: сортируйте пары (x, y), возможно, как в приведенном выше коде, а затем вычислите площадь каждой трапеции (ширина по средней высоте) и сложите.