Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2020, 14:11   #1
Konstantin_W
Новичок
Джуниор
 
Регистрация: 02.12.2020
Сообщений: 2
Сообщение Рекуррентное соотношение

Помогите получить рекуррентное соотношение для вычисление суммы ряда
Изображения
Тип файла: png 111.png (11.1 Кб, 20 просмотров)
Konstantin_W вне форума Ответить с цитированием
Старый 02.12.2020, 14:26   #2
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

S0 = 0; Sk = S(k-1) + (1 / (2k -1 )) * ((x-1)/(x+1))^(2k-1)
FrosyaZZ вне форума Ответить с цитированием
Старый 02.12.2020, 15:25   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Возможно и такой вариант подойдёт:
Код:
a0 = (x-1)/(x+1)
sum = a0
an = a0
k = 1
Цикл
   an= an*a0*a0*(2*k - 1)/((2*k + 1)
   sum = sum + an
   k = k + 1
   if <условие завершения цикла> break
Условие завершения цикла - это либо число суммируемых элементов (k > N), либо точность подсчёта суммы (an < epsilon).
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 02.12.2020, 20:55   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Возможно и такой вариант подойдёт:
Что значит - "возможно" ? Не надо излишней скромности. Отличный компактный вариант без ненужных телодвижений.
digitalis вне форума Ответить с цитированием
Старый 02.12.2020, 21:20   #5
Konstantin_W
Новичок
Джуниор
 
Регистрация: 02.12.2020
Сообщений: 2
Восклицание

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Возможно и такой вариант подойдёт:
Код:
a0 = (x-1)/(x+1)
sum = a0
an = a0
k = 1
Цикл
   an= an*a0*a0*(2*k - 1)/((2*k + 1)
   sum = sum + an
   k = k + 1
   if <условие завершения цикла> break
Условие завершения цикла - это либо число суммируемых элементов (k > N), либо точность подсчёта суммы (an < epsilon).
Спасибо, но вот при реализации выходит ответ отличающийся от контрольного примера C = log(x) / 2; хотя по условию они должны быть близки по значению
slag = (x-1)/(x+1);
sum = slag;
res = slag;
for (int i=1; i<=n; i++)
{
res = res * slag * slag * (2 * i - 1) / (2 * i + 1);
sum = sum + res;
}
вот цикл, возможно я напутал что то
Konstantin_W вне форума Ответить с цитированием
Старый 02.12.2020, 22:35   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Вот твоё решение, но на Python
Код:
import math
x = 3
slag = (x-1)/(x+1)
summ = slag
res = slag
for i in range(1,50):
    res = res * ((slag**2)*(2*i-1))/(2*i+1)
    summ = summ + res
print(2*summ)
print(math.log(x))
1.098612288668109
1.0986122886681098

так чтааа... ХЗ
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 03.12.2020, 18:03   #7
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Вот чуть проще, минус лишнее умножение.
Код:
var x,slag,summ,res: double ; i : integer ;
begin
x := 3 ;
slag := (x-1)/(x+1) ;
summ := slag ;
res := slag  ;
for i := 1 to 20 do
   begin
    res := res * slag*slag ;
    summ := summ + res / (2*i+1) ;
    Memo1.Lines.Add (Format('%3d %15.10f',[i,2 * summ])) ;
   end ;
end;
Конкурс: кто ещё проще решит эту зупер-простую задачу ?

1 1,0833333333
2 1,0958333333
3 1,0980654762
4 1,0984995040
5 1,0985882824
6 1,0986070624
7 1,0986111314
8 1,0986120290
9 1,0986122298
10 1,0986122752
11 1,0986122856
12 1,0986122879
13 1,0986122885
14 1,0986122886
15 1,0986122887
16 1,0986122887
17 1,0986122887
18 1,0986122887
19 1,0986122887
20 1,0986122887
digitalis вне форума Ответить с цитированием
Старый 04.12.2020, 09:43   #8
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Если уж экономить, то и вычисление постоянной составляющей лучше вынести за цикл:
Код:
...
m := slag*slag;
for i := 1 to 20 do
   begin
    res := res * m;
...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 04.12.2020, 11:05   #9
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Yes, Sir! Урезать - как урезать ! ©
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C] Рекуррентное соотношение serega339344 Помощь студентам 7 13.05.2017 23:11
Задача на рекуррентное соотношение и количество операций Technik90 Помощь студентам 4 01.10.2016 17:00
[C] Рекуррентное соотношение edw1n Помощь студентам 1 28.03.2013 10:54
Рекуррентное соотношение fbr Помощь студентам 3 06.12.2012 00:26