2013-07-11 14 views
7

Mam dwie tabelaryczne tablice danych, x i y, i nie znam funkcji, która wygenerowała dane. Chcę móc ocenić całkę linii produkowanej przez dane w dowolnym punkcie wzdłuż osi X.Jak mogę zintegrować dwie macierze danych 1-D w Pythonie?

Zamiast wstawiać do danych częściową funkcję, a następnie próbować ją zintegrować, z czym mam problem, czy jest coś, czego mogę użyć, aby po prostu dostarczyć całkę przez ocenę tablic?

Podczas wyszukiwania rozwiązań widziałem odniesienia do iPythona i Pandy, ale nie udało mi się znaleźć części tych pakietów, które pomogą w tym zadaniu.

Jeśli nie ma sposobu, aby po prostu zintegrować tablice, czy można udzielić porady na temat najlepszego sposobu obsługi tego zadania?

Odpowiedz

9

Scipy has some nice tools to perform numerical integration.

Na przykład, można użyć scipy.integrate.simps wykonać Metoda Simpsona, można przekazać je następujące:

scipy.integrate.simps (y, x = None, dx = 1 , axis = -1, even = "avg")

Parametry:
y: array_like Tablica do zintegrowania.

x: array_like, opcjonalnie Jeśli podano, punkty, w których y jest próbkowana.

dx: int, opcjonalnie Rozstaw punktów integracji wzdłuż osi y. Używane tylko, gdy x jest Brak. Wartość domyślna to 1.

oś: int, opcjonalnie Oś, po której następuje integracja. Domyślna to ostatnia oś.

nawet { 'średnia', 'pierwszy', 'ul'} opcjonalnie

Śr ': Średnia wyników: 1) zastosowanie pierwszych N-2 przedziałów ze reguły trapezów w ostatnim interwał i 2) użyć ostatnich przedziałów N-2 z regułą trapezową w pierwszym przedziale.

"first": używaj reguły Simpsona dla pierwszych interwałów N-2 z z regułą trapezową w ostatnim interwale.

"last": używaj reguły Simpsona dla ostatnich przedziałów N-2 z regułą trapezową w pierwszym przedziale.

Dzięki temu można korzystać z dwóch tablic do integracji numerycznej.

5

Scipy ma funkcję integration, która może Ci pomóc.

Jeśli chcesz użyć integracji z cumulative sum of trapezoids, która prawdopodobnie byłaby najlepsza dla serii punktów.

Można to zrobić:

>>> from scipy import integrate 
>>> x = np.linspace(-2, 2, num=20) 
>>> y = x 
>>> y_int = integrate.cumtrapz(y, x, initial=0) 
>>> plt.plot(x, y_int, 'ro', x, y[0] + 0.5 * x**2, 'b-') 
>>> plt.show() 

Będzie to również wykreślić dane i pokazać je do Ciebie w formie graficznej.To jest połączenie integracyjne, gdzie x, y są twoimi tablicami.

Powiązane problemy