2012-04-10 13 views
1

Ich gebe Haskell im Moment einen Versuch und kämpfe, um Schleifen in Bezug auf Rekursionen neu zu schreiben.Haskell: Numerisch integrierend mit Rekursion

Ich versuche, einen Grund Integrator zu schreiben, die sie über den Bereich eine Funktion f (x) und integriert nimmt [a, b] über die Mittelpunktmethode. Die Integrationsfunktion nimmt drei Parameter N, a und b an, wobei N die Anzahl der Rechtecke ist, die verwendet werden, um das Integral anzunähern.

Wolfram Alpha link

Wenn ich versuche, dies mit GHCI zu kompilieren bekomme ich eine Menge von abstrakten Fehlermeldungen und ich weiß nicht wirklich, wo ich anfangen. Viele 'Außerhalb der Bereiche' und mehrere 'Mehrfache Deklarationen von Main.a [oder b]'.

Dank

MPInt 1 a b = DELTA 1 -- Base case 
MPInt N a b = (MPInt (N-1) a b) + DELTA 
    where 
    dX = (b - a)/N 
    DELTA = dX * f (a + dX * (N+0.5)) 

f :: (Num a) => a -> a 
f x = x^2 

Antwort

10
  • Sie haben Ihre Funktion MPInt benannt. Nur die Namen von Modulen, Klassen, Typen und Konstruktoren können mit Großbuchstaben beginnen. Werte (einschließlich Funktionen) müssen mit Kleinbuchstaben (oder einem Unterstrich oder bestimmten Satzzeichen) beginnen. Dasselbe Problem gilt auch für N und DELTA.

  • Sie verwenden DELTA in der Definition des ersten Falls MPInt, aber es ist als Teil des zweiten Falles definiert. Eine where Klausel gilt nur für den Ausdruck unmittelbar davor (in diesem Fall die MPInt N a b = ... Definition). (Auch diese erste Verwendung von DELTA behandelt es als eine Funktion, doch die zweite Verwendung und ihre Definition haben es als numerischen Wert).

+0

jetzt arbeiten. Danke für Ihre Hilfe. – user1324521