Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
6 / 6 / 8
Регистрация: 03.01.2013
Сообщений: 116

Во вспомогательной функции не совсем та формула, которая должна быть

11.11.2013, 18:19. Показов 797. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите найти ошибку.
задание: во вложении
язык sml, похож на haskell

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
fun y (_, _, 0) = 0.0         (* при N=0 - результат y0 *)
|   y (x, _, 1) = x * x * x * x     (* при N=1 - результат y1 *)
|   y (x, e, N) =             (* иначе определим две дополнительные функции *)
      let
        fun closeEnough a b = abs (a - b) < e
        (* функция yNext - функция вычисления i-го элемента
         * последовательности
         * yPred и yPrePred - i-1-й i-2-й элементы последовательности
         * соответственно *)
        fun yNext yPred yPredPred i =
          if closeEnough yPred yPredPred then yPred
          else
            let
              (* вычисляется yCur - i-й элемент последовательности *)
              val rN = real N
              val yCur = (5.0 * x * yPred) / rN - yPredPred
                         
            in
              (* если i достигло значения N то вернуть yCur как результат
               * в противном случае запускается вычисление i+1-го элемента *)
              if i >= N then yCur
              else yNext yCur yPred (i + 1)
            end
      in
        (* запуск вычисления 2-го элемента последовательности *)
        yNext (y (x, e, 1)) (y (x, e, 0)) 2
      end;
Изображения
 
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.11.2013, 18:19
Ответы с готовыми решениями:

Выделяется, как картинка, а должна быть формула
Добрый день! Не знаю что такое произошло, но я считала по формулам в одном документе, а потом перенесла все в диплом, в другой документ, и...

Написать функцию, которая вычисляет площадь квадрата. Параметром функции должна быть сторона квадрата
Написать функцию, которая вычисляет площадь квадрата. Параметром функции должна быть сторона квадрата.

Скорость интернета не та которая должна быть
У мя провайдер Vladlink,скорость и-нета по тарифному плану 5000 кбит/с,предположительно при скачивании с внешки у мя должнабыть скорость от...

4
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38193 / 21126 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
11.11.2013, 20:17
А что нужно сделать? При заданных x и n вычислить yn?
0
6 / 6 / 8
Регистрация: 03.01.2013
Сообщений: 116
11.11.2013, 20:59  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
А что нужно сделать? При заданных x и n вычислить yn?
верно
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38193 / 21126 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
11.11.2013, 22:37
В sml найти ошибку не берусь... Но вот решение в Haskell

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
-- Лобовое, но медленное решение:
 
fun :: Integer -> Double -> Double
fun 0 _ = 0
fun n x | (n == 1) = x^4
        | otherwise = 5*x*(fun (n-1) x)/(fromInteger n) - (fun (n-2) x)
        
-- в два действия, но значительно быстрее:
 
fun' :: Integer -> Double -> Double -> Double -> Double
fun' n x c p | (n == 1) = c
             | otherwise = fun' (n-1) x (5*x*c/(fromInteger n)-p) c
            
func :: Integer -> Double -> Double
func n x = fun' n x (x^4) 0.0
 
 
*Main> fun 10 0.5
2.1764749362144935e-2
(0.03 secs, 2234688 bytes)
*Main> fun 20 0.5
4.002569517260948e-2
(0.17 secs, 8076796 bytes)
*Main> fun 25 0.5
-5.5301351267522524e-2
(1.91 secs, 76083652 bytes)
*Main> func 25 0.5
-5.530135126752255e-2
(0.02 secs, 0 bytes)  -- ответ верный, но получен почти в 100 раз быстрее.
*Main>
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
12.11.2013, 12:19
TheAlpha, обрати внимание на вычисление rN: при каждом вызове локальной функции yNext это значение должно вычисляться на основе значения i, а не значения N. Вот полный пример, значение rN (знаменатель из формулы) вычисляется в строке 12:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
fun y (x : real, eps : real, n : int) : real =
    let
        fun closeEnough a b = abs (a - b) < eps
        fun loop prev1 prev2 i =
            if closeEnough prev1 prev2 orelse i > n
            then prev1
            else
                let
                    val next = (5.0 * x * prev1) / (real (i - 1)) - prev2
                in
                    loop next prev1 (i + 1)
                end
    in
        case n of
            0 => 0.0
          | 1 => x * x * x * x
          | _ => loop (x * x * x * x) 0.0 2
    end
Вот ещё версия с мемоизацией:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
exception NotFound
 
fun ymemo (x : real) : int -> real =
    let
        val hash = HashTable.mkTable (Word.fromInt, op =)
                                     (101, NotFound)
 
        fun calc 0 = 0.0
          | calc 1 = x * x * x * x
          | calc n = case HashTable.find hash n of
                         SOME r => r
                       | NONE   =>
                         let
                             val prev1 = calc (n - 1)
                             val prev2 = calc (n - 2)
                             val denom = real (n - 1)
                             val numer = 5.0 * x * prev1
 
                             val next = numer / denom - prev2
                         in
                             HashTable.insert hash (n, next);
                             next
                         end
    in
        calc
    end
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.11.2013, 12:19
Помогаю со студенческими работами здесь

Нетривиальная задача, которая должна быть решена в MS Access
Доброго всем дня. Обращаюсь к Вам за советом. Преподавателем в университете была поставлена задача создать систему учета заявок клиентов...

Какой должна быть константа с при функции
Пример на картинке, не знаю как правильно это решить надеюсь кто-то может помочь.

Обязательно ли директория должна быть пустой для применения функции rmdir()?
Всем добрый день! Мне хочется просто спросить, обязательно ли директория должна быть пустой для применения функции rmdir()? Кто нибудь...

Как должна быть организована сеть офиса? Что должно быть настроено обязательно, а чего быть не должно?
Добрый день. Сразу оговорюсь, что я инженер-строитель и настройкой сети занимаюсь только потому, что больше некому. Поэтому некоторые,...

Напишите программу, которая строит СДНФ и СКНФ для заданной булевой формулы. Формула может быть задана прямо в исходном
Напишите программу, которая строит СДНФ и СКНФ для заданной булевой формулы. Формула может быть задана прямо в исходном тексте программы.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru