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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2018, 20:35   #1
Cordis
 
Регистрация: 13.02.2018
Сообщений: 2
По умолчанию Нужна помощь в расчете формулы

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

Задание: Для каждого x, изменяющегося от a до b с шагом h найти значение функции S(x). a, b, h вводятся с клавиатуры.
Изображения
Тип файла: png Снимок.PNG (3.4 Кб, 140 просмотров)

Последний раз редактировалось Cordis; 13.02.2018 в 20:41. Причина: Добавил задание.
Cordis вне форума Ответить с цитированием
Старый 13.02.2018, 21:54   #2
Мановар
Пользователь
 
Регистрация: 13.11.2016
Сообщений: 84
По умолчанию

Помощь то в чем нужна? Что то из сообщения не очень понятно.
Мановар вне форума Ответить с цитированием
Старый 13.02.2018, 22:08   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Если это вычисление сходящегося ряда, д.быть указана требуемая точность eps, иначе д.быть указано фиксирванное число n.
Моя телеповина подсказывает, что шас тебя модераторы пошлют на хр хриланс, так что пиши свою версию, а я ее выкину и напишу правильную, тем боле что задачка - на 2 глотка кофе. Если модераторы затопчут - пиши в личку; люблю помогать лентяям и несмышленышам, все равно - не им поднимать Расею
Даю наводку: во внешнем цикле перебираешь x от a до b, во внутреннем - вспомогательную переменную домножаешь на (x*x) и делишь ее на ((i*2-1)*(i*2) ), где i - параметр цикла, а потом добавляешь этот борщ в накапливающий сумматор sum, пока он не перестанет увеличиваться (почти) .
И кошке понятно, что начальные значения tmp и sum д. быть 1.0 .

Последний раз редактировалось digitalis; 13.02.2018 в 22:22.
digitalis вне форума Ответить с цитированием
Старый 13.02.2018, 22:59   #4
СтудПом
Форумчанин
 
Регистрация: 08.11.2017
Сообщений: 347
По умолчанию Вычисление косинуса через разложение в ряд

Цикл собственно не сложный
Код:
while (abs(Add)>Eps) do Sum+=Add*=(x*x/((k-1)*k));
есть хитрость в инициализации слагаемого - члена ряда. Нельзя набирать эту сумму с нуля

Похоже на программу вычисления косинуса, но не вижу в задании чередования знака у членов ряда.

Последний раз редактировалось СтудПом; 13.02.2018 в 23:13.
СтудПом вне форума Ответить с цитированием
Старый 14.02.2018, 09:02   #5
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
И кошке понятно, что начальные значения Tmp и Sum должны быть 1.
- почему начальное значение Sum = 1? В рядах всегда при вычислении суммы Sum = 0.:D При всем уважении к Вам, Digitalis.
СтудПом, используй fabs вместо abs - так по-моему будет правильнее. Если знак не надо чередовать и вычислять, то это же хорошо.
Цитата:
Сообщение от digitalis Посмотреть сообщение
во внешнем цикле перебираешь x от a до b, во внутреннем - вспомогательную переменную домножаешь на (x*x) и делишь ее на ((i*2-1)*(i*2) ), где i - параметр цикла, а потом добавляешь этот борщ в накапливающий сумматор sum, пока он не перестанет увеличиваться (почти).
- с домножением на (x*x) согласен, но зачем делить на ((i*2-1)*(i*2))? Разве нельзя просто поделить на (i*2)? - Так домножиться факториал в знаменателе. Не так?

Последний раз редактировалось Cuprum5; 14.02.2018 в 09:12.
Cuprum5 вне форума Ответить с цитированием
Старый 14.02.2018, 11:07   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Цитата:
- почему начальное значение Sum = 1? В рядах всегда при вычислении суммы Sum = 0.:D

- с домножением на (x*x) согласен, но зачем делить на ((i*2-1)*(i*2))?
" Это правильно. Но неверно."©
Нулевой член ряда = 2^(2*0) / 0! Т.к. 0! принято считать за 1, получаем - 0-й член ряда, он же tmp, он же начальное значение суммы=1. Первый = tmp*(x^2)/(2)! = x^2/(1*2), второй tmp*(x^2)/(4)! = x^4/(1*2*3*4) и далее до упора. Кстати, об упоре. Взял х=100, и на 99, 100 шаге имеем вот что:
99 5,04655E+025 1,34406E+043
100 1,26798E+025 1,34406E+043
Ряд практически сошелся, а прибавка еще ооочень большая. Я бы условие сходимости оценивал как eps = Abs(1-S[i]/S[i-1]), т.е. относительная погрешность. Ну и что это за ряд - ХЗ, но к косинусу, как видим, он никаким боком. Косинусов с 43 нулями в целой части - не бывает.
Ну че, уважение ко мне ешшо повысилось ?
Код:
function SmRd(x:extended):extended ;
var i: integer ;
    x2,i2,tmp,sum: extended ;
begin
  tmp := 1.0 ;
  sum := tmp ;
  x2 := x*x ;
  for i := 1 to 100 do
    begin
      i2 := i * 2.0 ;
      tmp := tmp*x2/((i2-1)*i2) ;
      sum := sum + tmp ;
      Result := sum ;
    end ;
end;
Перетаскивать из Дельфи в С мне лень . Здесь я не вычислял eps, а тупо фиксированное число шагов - посмотреть, что будет. Это чтобы ТС-у тоже немножко поработать бошкой, если он еще не растворился в тумане (купил решение у сокурсника или препода).

Последний раз редактировалось digitalis; 14.02.2018 в 11:22.
digitalis вне форума Ответить с цитированием
Старый 14.02.2018, 11:18   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
с домножением на (x*x) согласен, но зачем делить на ((i*2-1)*(i*2))? Разве нельзя просто поделить на (i*2)? - Так домножиться факториал в знаменателе. Не так?
Не так. Мало того, должно быть не x*x/((k-1)*k, а x*x/((2*k-1)*2*k). Раздели k-ый член ряда на (k-1)-ый и поймешь почему

ps это ряд для гиперболического косинуса
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 14.02.2018 в 11:23.
Аватар вне форума Ответить с цитированием
Старый 14.02.2018, 11:35   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

У кого-то из нас что-то с монитором... Или у меня с глазами
Пардон, пустился в полемику, хотя возражали не мне. Бывает.

Код:
  x*x/((2*k-1)*2*k).
аналогично
Код:
  x2 := x*x ;
 .........
  i2 := i * 2.0 ;
  tmp := tmp*x2/((i2-1)*i2) ;

Последний раз редактировалось digitalis; 14.02.2018 в 11:47.
digitalis вне форума Ответить с цитированием
Старый 14.02.2018, 11:37   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

x*x/((k-1)*k к посту #4
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.02.2018, 12:27   #10
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Круто, Digitalis, теперь я все понял - спасибо за объяснения!!!!!
Уважение еще сильнее повысилось!!!!!
А уже сказали, что это гиперболический косинус. Чистый косинус это вот это(см. картинку).
Изображения
Тип файла: jpg Разложение Косинуса в ряд Тейлора.jpg (46.4 Кб, 134 просмотров)
Cuprum5 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь в создании формулы в MS Excel Лия666 Помощь студентам 6 20.09.2017 17:39
Нужна помощь в привязке к выпадающему меню определённой формулы VilgaukAV Microsoft Office Excel 2 14.11.2014 14:07
Помощь в написание формулы x_omega_x Microsoft Office Excel 1 07.07.2009 13:52
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Очень нужна помощь с написанием программы... срочно(буду благодарен за помощь) 5Paladin5 Помощь студентам 3 02.07.2009 09:12