2017-10-27 2 views
1

Ich brauche Hilfe bei diesem Problem. Die Mittelpunkt-Regel für ein integrales Annähern kann ausgedrückt werden als:Vectoriere die Midpoint-Regel für die Integration

      h * summation of f(a -(0.5 * h) + i*h) 

wobei h = (b - a)/2

eine Funktion midpointint schreiben (f, a, b, n) die berechnen, Mittelpunkt-Regel mit der Funktion "Summe Summe".

Stellen Sie sicher, dass Ihr Bereich von 1 bis einschließlich n reicht. Sie könnten einen Bereich verwenden und ihn in ein Array konvertieren.

für Mittelpunkt (np.sin, 0, np.pi, 10) sollte die Funktion zurückgeben 2,0082

Hier ist, was ich

import numpy as np 

def midpointint(f,a,b,n): 
h = (b - a)/(float(n)) 
for i in np.array(range(1,n+1)): 
    value = h * np.sum((f(a - (0.5*h) + (i*h)))) 
return value 

print(midpointint(np.sin,0,np.pi,10)) 

Mein Code so weit haben Ausdrucken ist nicht die richtige Ausgabe.

Antwort

2

Problem mit dem gebuchten Code war, dass wir Akkumulation in der Ausgabe benötigt: value += .. nach der Initialisierung als Null zu Beginn.

können Sie vektorisieren durch eine Reihe Array für den Iterator, wie so -

I = np.arange(1,n+1) 
out = (h*np.sin(a - (0.5*h) + (I*h))).sum() 

Probelauf -

In [78]: I = np.arange(1,n+1) 

In [79]: (h*np.sin(a - (0.5*h) + (I*h))).sum() 
Out[79]: 2.0082484079079745 
Verwandte Themen