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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2020, 20:01   #1
W1ppie
Новичок
Джуниор
 
Регистрация: 15.11.2020
Сообщений: 2
По умолчанию Решение задачи на рекуррентную зависимость

Не могу понять,как решаются задачи такого типа.
На конкретном примере сможет кто-то объяснить,что от меня требуется и как добиться результата.
Язык Си.
Изображения
Тип файла: png image_2020-11-15_194657.png (24.1 Кб, 39 просмотров)
W1ppie вне форума Ответить с цитированием
Старый 15.11.2020, 20:38   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,567
По умолчанию

Могу пояснить.
Для решения этой супер-элементарнейшей задачи пишется программа в 5 строк. Когда i-й член суммы станет меньше епсилона, говорим: "Хана!" и сравниваем вычисленное значение с точным. Работы минут на 5 с перекурами.
У меня на компе нет Си. Да Делфи хочешь ?
digitalis вне форума Ответить с цитированием
Старый 15.11.2020, 20:50   #3
W1ppie
Новичок
Джуниор
 
Регистрация: 15.11.2020
Сообщений: 2
По умолчанию

Да,буду не против
W1ppie вне форума Ответить с цитированием
Старый 16.11.2020, 12:32   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,567
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var x,sum,term,n,up,dwn: double ;
begin
   x := StrToFloat (Edit.Text) ; // x вводим любым другим способом
   sum := x ;
   up := x ;
   n := 2 ;
   dwn := 1.0 ;
   term := 1.0 ;
   while (Abs(term) > 0.00001) do
     begin
       up := up * x * (-x) ;
       dwn := dwn * n * (n+1) ;
       term := up/dwn ;
       sum := sum + term ;
       Memo1.Lines.Add(Format('%4.1f %9.6f %8.1f  %9.6f = %8.6f',
           [n,up,dwn,term,sum])); ;
       n := n + 2 ;
     end;
   sum := Sin(x) ;
   Memo1.Lines.Add(Format('%8.6f',[sum])); ;
end;
Имеем, к примеру, для х=0.5 быструю сходимость

2,0 -0,125000 6,0 -0,020833 = 0,479167
4,0 0,031250 120,0 0,000260 = 0,479427
6,0 -0,007813 5040,0 -0,000002 = 0,479426
8,0 0,001953 362880,0 0,000000 = 0,479426
0,479426

Последний раз редактировалось digitalis; 16.11.2020 в 13:25.
digitalis вне форума Ответить с цитированием
Старый 16.11.2020, 15:04   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,312
По умолчанию

Моё предложение:
Найди в Сети Т.А. Павловская, ЯВУ Паскаль. Там хорошо изложен алгоритм решения подобных задач.
Да, это Паскаль, но алгоритм от языка не зависит.

В данном случае an+1 = k*an, где k = -x*x/(2*n+2)*(2*n+3)).
В этом случае точность вычисления будет повыше.
Т.е., в цикле по x (от xbeg до xfin - если это тоже есть в задании) организуешь вложенный цикл типа
Код:
do {
...
 } while<>;
первое значение для ряда равно x, a = x. Сумма равна: sum = x.
В цикле do: <вычисляем k>; a = a*k; sum = sum + a; n = n + 1; если abs(a) < eps то break.

PS:
Выражение
dwn := dwn * n * (n+1);
- это прямой счёт факториала, но факториал растёт очень быстро и получить достаточную точность будет сложно из-за переполнения значения переменной dwn.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 16.11.2020, 17:34   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,567
По умолчанию

Вот именно - факт. (он же и знаменатель) растёт очень быстро, поэтому слагаемые тоже очень быстро стремятся к нулю а сумма - к сходимости. Потому моего варианта для ТС более чем достаточно, если сумеет перепереть его в Си. Тем более что up,dwn я взял для наглядности - как что изменяется. А так i+1е слагаемое получаем из i-го путём доумножения на -х^2 и деления на n,n+1, не беспокоя при этом по таким пустякам г-жу Павловскую, которой мне читать не довелось.
-----------------------------
Или это совет был не мне, а ТСу ?

Последний раз редактировалось digitalis; 16.11.2020 в 17:43.
digitalis вне форума Ответить с цитированием
Старый 17.11.2020, 08:57   #7
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,312
По умолчанию

digitalis
Цитата:
Потому моего варианта для ТС более чем достаточно, ...
Вопрос не в достаточности варианта, а в алгоритме решения.
"А, и так сойдёт!" - из мультика про зайчишку, который помогал строить и ещё чего-то там ...
Это не катит. Не катет, а именно не катИт.

Ваш вариант быстро "заткнётся", если поднять точность.
На эту тему тут уже был разговор с newerow1989, который давал решения в аналогичном стиле.
Просто сделайте вычисления в двух вариантах и сравните результат.

PS: А Т.А. Павловскую я рекомендую всем начинающим изучать Паскаль, поскольку там изложен материал от А до я: от основ Паскаля, до уровня динамического программирования и ООП.
И там много примеров.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 17.11.2020, 11:20   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,567
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
digitalis
PS: А Т.А. Павловскую я рекомендую всем начинающим изучать Паскаль
Где же Вы раньше были, когда я начал его изучать, лет 40 тому ?
Повторю ещё раз: предлагаемый Вами вариант был (и есть) у меня изначально, а разделил для up - dwn я для наглядности - как одно стремительно растёт, слагаемоё - так же стремительно падает.
Пожалуй, не сто'ит меня убеждать, что не надо делать "и так сойдёт", потому что это - не мой стиль. И закончим на этом обсуждение этой сверх-элементарнейшей мини-задачи. ТС , надеюсь, её уже переварил. Или нашёл на другом форуме готовое сишное решение.

Последний раз редактировалось digitalis; 17.11.2020 в 12:03.
digitalis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение задачи на C# PiterParkur Помощь студентам 0 26.01.2020 16:00
Решение задачи на c# Vestet Помощь студентам 1 24.01.2020 12:11
Решение задачи. C++ alucard115 Помощь студентам 24 16.02.2013 12:34
Решение задачи zheka21 Помощь студентам 13 08.11.2012 12:06
решение задачи (C#) Uimbldon Помощь студентам 0 02.10.2012 13:02