Haskell: численное интегрирование с использованием рекурсии

В данный момент я пробую Haskell и изо всех сил пытаюсь переписать циклы с точки зрения рекурсии.

Я пытаюсь написать базовый интегратор, который берет некоторую функцию f (x) и интегрирует ее в диапазоне [a, b] с помощью метода средней точки. Интегрирующая функция принимает три параметра N, a и b, где N — количество прямоугольников, используемых для аппроксимации интеграла.

Ссылка Wolfram Alpha

Когда я пытаюсь скомпилировать это с помощью GHCI, я получаю много абстрактных сообщений об ошибках, и я действительно не знаю, с чего начать. Много «вне области действия» и несколько «несколько объявлений Main.a [или b]».

Спасибо

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

person user1324521    schedule 10.04.2012    source источник


Ответы (1)


  • Вы назвали свою функцию MPInt. Только имена модулей, классов, типов и конструкторов могут начинаться с заглавных букв; значения (включая функции) должны начинаться со строчных букв (или символа подчеркивания, или определенных знаков препинания). Та же проблема также относится к N и DELTA.

  • Вы используете DELTA в определении первого случая MPInt, но он определяется как часть второго случая. Предложение where применяется только к выражению непосредственно перед ним (в данном случае определение MPInt N a b = ...). (Кроме того, это первое использование DELTA рассматривает его как функцию, а второе использование и его определение имеют его как числовое значение).

person jwodder    schedule 10.04.2012
comment
Работает в настоящее время. Спасибо за вашу помощь. - person user1324521; 10.04.2012