Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 10.11.2013
Сообщений: 53
1

Реализовать функцию нахождения длины заданной кривой

17.01.2014, 21:25. Показов 1374. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Помогите пожалуйста разобраться с задачкой, я не понимаю что от меня требуют....Задача номер 5
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2014, 21:25
Ответы с готовыми решениями:

Реализовать функцию нахождения среднего арифметического цифр заданной последовательности
Вводится последовательность из N целых чисел. Найти среднее арифметическое его цифр (функцией...

Реализовать функцию для нахождения максимального элемента заданной матрицы
Задание : Создать прототип функции для нахождения макс. элемента прямоугольной матрицы Есть код...

Реализовать рекурсивную функцию для нахождения суммы ряда по заданной формуле
Как составить рекуррентную формулу для вычисления суммы ряда sin(4x)=4x-(4x)3^3!+(4x)^5/5!-......

Реализовать шаблонную функцию для нахождения количества локальных минимумов заданной матрицы
Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него...

4
Модератор
Эксперт функциональных языков программированияЭксперт Python
37331 / 20763 / 4275
Регистрация: 12.02.2012
Сообщений: 34,174
Записей в блоге: 14
17.01.2014, 21:45 2
Я думаю, суть задачи вот в чем: задается функция y=f(x). Нужно реализовать функцию, вычисляющую длину кривой заданной формулой y=f(x) на отрезке [a,b]. Поскольку длина кривой есть интеграл от выражения, содержащего производную f'(x), то необходимо получить производную функции и реализовать вычисление интеграла методом трапеций с заданной точностью по прилагаемой к заданию формуле.

Добавлено через 4 минуты
Не вполне, правда, понятно, как быть с производной... В pdf-ке есть ссылка на функцию "derivation". Непонятно, нужно ли ее реализовывать. Но можно задавать сразу производную и считать интеграл уже от выражения, содержащего производную.
1
25 / 25 / 2
Регистрация: 17.03.2013
Сообщений: 48
18.01.2014, 08:37 3
Можно просто сделать: Найти точки, затем расстояния между ними, затем суммировать эти расстояния.

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{-# LANGUAGE NoMonomorphismRestriction #-}
 
lengthOfLine = 
    (\f t1 t2 numOfSteps->
        fst . 
        (\coordsList -> 
            foldl (\(accum,(x1,y1)) (x2,y2) -> 
                    (accum+sqrt((x2-x1)^2 + (y2-y1)^2),(x2,y2))
                  ) 
                  (0,head coordsList)
                  coordsList
        )
            $ [f t|
                t<-map 
                    (\x->t1+fromIntegral x*(t2-t1)/
                        (fromIntegral $ numOfSteps-1)
                    ) 
                    [0..numOfSteps-1]
              ]
    )
Haskell
1
2
3
4
> lengthOfLine (\t->(t,t)) 0 1 10
1.414213562373095
lengthOfLine (\t->(t^2,t)) 0 2 10
4.642791186533929
Здесь кривая задана параметрически, функцией f, возвращающей координаты точки.
2
Модератор
Эксперт функциональных языков программированияЭксперт Python
37331 / 20763 / 4275
Регистрация: 12.02.2012
Сообщений: 34,174
Записей в блоге: 14
18.01.2014, 13:10 4
В задаче-то требуется вычислить длину с задаваемой точностью. И с использованием рекурсии. Это можно реализовать, например, так:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
-- Удвоить список аргументов
 
dupList :: [Double] -> [Double]
dupList [] = []
dupList (x:xs) | (xs == []) = [x]
               | otherwise = x : (x+head xs)*0.5 : dupList xs
  
-- Построить ломаную  
  
mkL :: (Double -> Double) -> [Double] -> [(Double,Double)]
mkL f xx = zip xx $ map f xx
  
-- Длина ломаной 
 
lenL :: [(Double,Double)] -> Double
lenL [] = 0
lenL (w:ws) | (ws == []) = 0
            | otherwise = (lenL ws) + (sqrt $ (x1-x2)^2 + (y1-y2)^2)
              where x1=fst w
                    y1=snd w
                    x2=fst $ head ws
                    y2=snd $ head ws
 
-- Рекурсивное вычисление длины с заданной точностью
                    
lenCurve' :: (Double -> Double) -> [Double] -> Double -> Double -> Double
lenCurve' f w eps prev | (abs (prev - curr)) <= eps = curr
                      | otherwise = lenCurve' f ww eps curr
                        where curr = lenL $ mkL f ww
                              ww   = dupList w
                              
-- Парадная функция
 
lenCurve :: (Double -> Double) -> Double -> Double -> Double -> Double
lenCurve f a b eps = lenCurve' f [a,b] eps 0
 
Main> lenCurve sin 1 2 0.001
1.04011
Main> lenCurve sin 1 2 0.0001
1.04024
Main> lenCurve sin 1 2 0.00001
1.04024
Main> lenCurve (\ x -> x*x) 0 5 0.001
25.8741
Main> lenCurve (\ x -> x*x) 0 5 0.0001
25.8742
Но, боюсь, это все - не то, что требует задание.
0
IEAIAIO
18.01.2014, 13:19     Реализовать функцию нахождения длины заданной кривой
  #5

Не по теме:

А как пдф-ку то чкачать тут?

0
18.01.2014, 13:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2014, 13:19
Помогаю со студенческими работами здесь

Написать функцию, описывающую формулу вычисления длины кривой
x= y= sum(abs(diff(complex(x,y)))) не подскажите, правильно ли это?

Разработать функцию нахождения строки минимальной длины
Создать текстовый файл. Разработать функцию нахождения строки минимальной длины.

Реализовать функцию нахождения периметра заданного многоугольника
Мне нужно написать программу, в которую мы задаём массив с кол-вом элементов N&gt;5, т.к. потом этот...

Реализовать функцию нахождения минимального элемента матрицы
Здравствуйте, прошу помощи с программой. Найти минимальный элемент матрицы A(4х4) и вывести на...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru