crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Алгоритмы, Функциональное программирование
DEADHUNT
  опции профиля:
сообщение 29.8.2010, 0:02
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


Предлагаю в этой теме собирать вычислительные алгоритмы реализованные на функциональных языках.
Вычисление числа Пи путём интегрирование функции 1 / sqrt (1 - x^2) в пределах [-1; 1] методом центральных прямоугольников(sqrt вычисляется по алгоритму Ньютона):
(define (sqrt x)
    (define (sqrt_helper x y)
    (if (< (abs (- (square y) x)) 0.000001)
        y
        (sqrt_helper x (/ (+ y (/ x y)) 2))))
    (sqrt_helper x 1.0))
        
(define (pi)
    (define (f x)
        (/ 1.0 (sqrt (- 1.0 (square x)))))
    (define (pi_helper x lim h value)
        (if (> x lim)
            value
            (pi_helper (+ x h) lim h (+ value (* (f (+ x (/ h 2))) h)))))
    (pi_helper (- (- 1.0 0.000001)) (- 1.0 0.000001) 0.000001 0.0)
    )

Вычисление числа Пи путём интегрирование функции 1 / sqrt (1 - x^2) в пределах [-1; 1] методом Cимпсона:
integral f a b = (integral_helper f a a b 0 0) * 0.00001 / 3
            where
                integral_helper f x a b n sum | x == a = integral_helper f (x + 0.00001) a b 4 (f x)
                                | x >= b = sum + f b
                                | otherwise = integral_helper f (x + 0.00001) a b (if n == 2 then 4 else 2) (sum + n * f x)

main = print(integral (\x -> 1 / (sqrt(1 - x * x))) (-1 + 0.00001) (1 - 0.00001))

также принимается критика и усовершенствования этих алгоритмов.

Сообщение отредактировал DEADHUNT - 29.8.2010, 3:03
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Ответить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 1:19