Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ряд с заданной точностью, Программирование 
:(
    Опции темы
username12
Дата 9.11.2015, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 4.11.2015

Репутация: нет
Всего: нет



Найти сумму ряда с заданной точностью - C (СИ)
Как реализовать задачу? Элементарная теория погрешностей

http://pixs.ru/showimage/wFpMc3XPGg_1844619_19447484.jpg

http://pixs.ru/showimage/wFpMc3XPGg_3257615_19447524.jpg

Это сообщение отредактировал(а) username12 - 9.11.2015, 18:47
PM MAIL   Вверх
feodorv
Дата 9.11.2015, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Что-то вроде такого:
Код

double x = 0.5, eps = 0.001;
double sum = 1.0, mult = 1.0, elem;
unsigned int n = 1;

do
{
  mult = mult / n * x * x;
  elem = (2.0 * n + 1.0) * mult;
  sum += elem; 
  n++;
} while( elem < eps );                 // fabs(elem) in general

Код не проверял...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
math64
Дата 10.11.2015, 08:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Вообще-то нужно проверять не elem < eps, а оценить сумму членов ряда в хвосте.
А то можно посчитать сумму ряда 1/n с точностью eps - а ряд-то расходится.
Оценить хвост в данном случае можно заменив его на геометрическую последовательность.
PM   Вверх
Sajtran
Дата 10.11.2015, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 15.10.2008
Где: Мегион

Репутация: нет
Всего: 2



Код

double x = 0.5, eps = 0.001;
double sum = 1.0, mult = 1.0, elem;
unsigned int n = 1;
double oldv; 
do
{
  mult = mult / n * x * x;
  elem = (2.0 * n + 1.0) * mult;
  oldv = sum;
  sum += elem; 
  n++;
} while( fabs(sum - oldv) < eps );
  

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
math64
Дата 10.11.2015, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Цитата(Sajtran @  10.11.2015,  11:38 Найти цитируемый пост)
Код

while( fabs(sum - oldv) < eps );

Это то же самое, что и
Код

while( elem < eps ); 

PM   Вверх
username12
Дата 10.11.2015, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 4.11.2015

Репутация: нет
Всего: нет




Как сделать чтобы он мой пример считал,куда подставлять?
PM MAIL   Вверх
math64
Дата 10.11.2015, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Нужно посчитать q, такое что следующие члены ряда будут меньше elem*q, elem*q*q, ...
Тогда сумма отбрасываемых членов будет меньше elem*q/(1-q). (При q < 1)
Условие окончания цикла будет такое (все члены ряда положительны):
Код

} while(q >= 1 || elem*q/(1-q) > eps);

(и да, везде выше знак был напутан - это while а не паскалевский until.)
Если же ряд знакопеременый, можно просто
Код

} while(fabs(oldelem) >= fabs(elem) || fabs(elem) > eps);

т.е. необходимо убедиться, что члены ряда начали уменьшаться по абсолютной величине.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0454 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.