2012-11-10 11 views
21

Mam jedną listę 100 liczb jako wysokość dla osi Y, a jako długość dla osi X: od 1 do 100 ze stałym krokiem wynoszącym 5. I trzeba obliczyć Obszar, w którym jest uwzględniony przez krzywą punktów (x, y) i osi X, używając prostokątów i Scipy. Czy muszę znaleźć funkcję tej krzywej? albo nie? ... prawie wszystkie przykłady, które przeczytałem, dotyczą określonego równania dla osi Y. W moim przypadku nie ma równania, tylko dane z listy. Klasycznym rozwiązaniem jest dodanie punktów Y i wielokrotności na odległość X kroków ... używając Scipy jakiegokolwiek pomysłu?Obliczanie pola pod krzywą, dla którego podano zbiór współrzędnych, nie znając funkcji

Czy ktoś może polecić jakąkolwiek książkę, która koncentruje się na metodach numerycznych (skończonych elementarnych), używając Scipy i Numpy? ...

Odpowiedz

11

Możesz użyć reguły Simpsonów lub reguły Trapezu, aby obliczyć obszar pod wykresem, podając tabelę wartości y w regularnych odstępach czasu.

Simpsons rule

Trapezium rule

Jeśli matematyka nie jest twoja sprawa, zostaw komentarz i będę go dalej wyjaśniać.

Pythona skrypt oblicza Metoda Simpsona:

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 jest przesunięciem (lub szczeliny) pomiędzy wartościami Y i y_vals jest tablicą wartości, a, Y.

Przykład (w taki sam jak wyżej pliku funkcji):

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

+1. Ładne użyteczne linki, a także zawierają implementacje Pythona :) – nbrooks

+0

Dzięki! matematyka jest moją rzeczą !, python, nie jest! nowicjusz ... Nie wprowadziłem nowej zasady Simpsona ... dzięki! po prostu pokaż ... – user1640255

+0

Nie wiem, czy Scipy ma jeden, to nie powinno być zbyt trudne do wykonania funkcji dla siebie (mógłbym zrobić ... mam trochę wolnego czasu;) – javanut13

37

numpy a biblioteki scipy obejmują trapezoidalny kompozytowej (numpy.trapz) i (scipy.integrate.simps) zasady Simpsona.

Oto prosty przykład. Zarówno w trapz jak i simps, argument dx=5 wskazuje, że odstęp danych wzdłuż osi x wynosi 5 jednostek.

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's rule. 
area = simps(y, dx=5) 
print("area =", area) 

wyjściowa:

area = 452.5 
area = 460.0 
+0

to świetnie! ... Obie odpowiedzi pomagają mi zrozumieć i rozwiązać wszelkie pytania, które miałem. Chciałbym zapytać o coś względnego ... Czy radzisz używać tablic, a nie listy? jest czymś, co pomaga użytkownikowi? czy logika i szybkość algorytmu? – user1640255

+1

Pierwszą funkcją 'trapz' i' simps' jest konwersja argumentu 'y' na tablicę numpy, więc nie ma to znaczenia. Możesz spojrzeć na swój kod, który generuje wartości "y" i sprawdzić, czy skorzystałoby z tego dodatkowe funkcje numpy lub scipy. Jeśli tak, to "y" będzie już tablicą, kiedy przekazałeś ją do 'simps'. –

Powiązane problemy