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

Исправить формулу

03.04.2014, 21:48. Показов 1038. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот осваиваю для себя новый язык программирования:
Есть формула (Во вложении) и кусок кода:

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
--Вычисление факториала
fac :: Int -> Int
fac n | n==0 = 1
      | n>0  = n * fac (n-1)
 
--Функция вычисления xn
power :: Float -> Int -> Float
power x n | n==0 = 1
          | n>0  = x*power x (n-1)
 
--Функция вычисления (-1)n
signnum :: Int -> Float
signnum n | n `mod` 2 == 0 = 1
          | otherwise  = (-1)
 
--Функция вычисления суммы ряда
s :: Float -> Int -> Float
s x n | n==1 = (-1) * x *x * 2
      | n>1  =  (((power x 3) / 3) - ((power x 5) /15) + signnum(n+1) * ((power x f2i 2 * n + 1))/(4 * n * n - 1) + s x  (n-1)) --Здесь нужно правильно написать формулу
         
 
--Проверочная функция
y :: Float -> Float
y x =   ((1 + x * x)/2) * atan (x) * (x / 2)
 
--------------------------------------
--Примеры функций преобразованием типов данных
f2i :: Float -> Integer
f2i f = round (f)       -- преобразование Float -> Int
 
i2f :: Int -> Float
i2f n = fromIntegral (n) -- преобразование Int -> Float
 
--Основная программа
main :: IO ()
main = do
             putStrLn "Hello!  What is x?"
             x <- getLine
             let sum = s (read x) 12
             putStrLn $ "Summa =" ++ (show sum)
             let con = y (read x)
             putStrLn $ "Y     =" ++ (show con)
Как правильно ее запилить в хаскелЬ?
Миниатюры
Исправить формулу  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2014, 21:48
Ответы с готовыми решениями:

Исправить формулу
Есть задача : Я думал так : ...

Нужно исправить формулу
Вот что нужно сделать А вот мой код =ЕСЛИ(B1&lt;=0;0,8-0,1*(B1);4,756 LN(B1)+COS(B1)) Как нужно...

Метод Монте-карло: исправить формулу
Dim image1 As New Bitmap(800, 800) Dim graph1 As Graphics = Graphics.FromImage(image1) ...

Нужно исправить формулу связанное с ЕСЛИ
Препод вузе сказала что нельзя писать два раза ЕСЛИ в формуле. Исправьте пожалуйста код.

5
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,643
Записей в блоге: 13
03.04.2014, 21:58 2
Методика "запиливания" таких формул состоит в том, что вычисляется на какой множитель отличается an и an+1. В данном случае:

an+1=(-an)*x2*(4n2-1)/(4(n+1)2-1)

Возведение в степнь не нужно.
0
0 / 0 / 0
Регистрация: 03.04.2014
Сообщений: 2
03.04.2014, 22:04  [ТС] 3
Catstail, я что то не могу догнать как она в хаскель коде может выглядеть?
x * x *(4 * n*n-1)/(4 * ((n+1)*(n+1))-1) ? Или я что то не понимаю?
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4300 / 2091 / 431
Регистрация: 19.07.2009
Сообщений: 3,162
Записей в блоге: 24
03.04.2014, 22:48 4
Речь идёт о том, что в случае, когда в сумме https://www.cyberforum.ru/cgi-bin/latex.cgi?\sum a_n имеет выражение https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{a_{n+1}}{a_n} = p_n выглядит сравнительно просто, можно воспользоваться этим и не городить много-много рекурсивных определений, как у Вас в коде.

Haskell
1
2
3
4
5
6
finitSum [] a0 = a0
finitSum (p:ps) a0 = a0 + finitSym ps (p*a0)
 
task n x = let
  ps = [ (-1)*x*x*(4*n*n-1) / (4*(n+1)*(n+1)-1) | k <- [1..n]]
  in finitSum ps (x^3 / 3)
Хотя я бы делал немного по-другому:
Haskell
1
2
3
4
5
6
task' x = let
  xs = iterate ((x*x)*) x
  ms = iterate negate 1
  as = [ 4*n*n - 1 | n <- [1..] ]
  in zipWith3 (\x m a -> x*m/a) xs ms as
task n x = sum $ take n $ task' x
2
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
03.04.2014, 22:50 5
например так.
Haskell
1
2
a 1 x = x^3/3 
a (n+1) x = (-1*(a n x))*x^2*(4*n^2-1)/(4(n+1)^2-1)
2
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,643
Записей в блоге: 13
03.04.2014, 23:03 6
Лучший ответ Сообщение было отмечено tatarinov как решение

Решение

Вот рекурсивное вычисление суммы (если не ошибся):

Haskell
1
2
3
4
5
6
7
8
9
10
f :: Int -> Double
f n = (4*(fromInt n)**2-1) / (4*(fromInt (n+1))**2-1)
    
sum' :: Int -> Int -> Double -> Double -> Double
sum' n 0 x _ = sum' n 1 x (x**3)/3.0  
sum' n k x a = if (k < n) then  an + sum' n (k+1) x an else 0.0
               where an=0-a*(x**2)*(f (k+1))
            
task :: Int -> Double -> Double
task n x = sum' n 0 x 0.0
1
03.04.2014, 23:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2014, 23:03
Помогаю со студенческими работами здесь

Необходимо исправить формулу для вычисления среднего значения
Здравствуйте форумчане, работал с базой данных и что-то не могу разобраться с формулой, задумка...

Кто знает как исправить формулу и запустить прогу
Привет всем, помогите пожалуйста записать правильно формулу.. я записал как знал.. но оно...

Нужно исправить в 14 строке формулу чтобы ответ получился -2,341 при x=5 n=4
1.program summa; 2.var 3. q,x,y,s:real; 4. n,i,p,t:integer; 5.begin 6. writeln('x'); 7. ...

Нужно исправить в 14 строке формулу чтобы ответ получился -2,341 при x=5 n=4
1.program summa; 2.var 3. q,x,y,s:real; 4. n,i,p,t:integer; 5.begin 6. writeln('x'); 7. ...


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

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