Задача: Сумма последовательности (с заданной точностью)

  • Автор темы Sheriff92
  • Дата начала
S

Sheriff92

#1
Задание: Составить программу, вычисляющую с точностью eps сумму заданного ряда. Примечание: вычислить сумму ряда с точностью eps значит завершить суммирование членов ряда тогда, когда очередной член ряда окажется меньше eps по абсолютной величине. Сверить с контрольными значениями. Результаты вывести на экран монитора.

Выражение:
S(z)=∑_(n=0)^∞▒〖((-1)^n 〖(π/2)〗^(2n+1))/((2n+1)!(4n+3)) z^(4n+3) 〗

Точность eps:
pow(10,-3);
pow(10,-6);
pow(10,-8)

Аргумент:
Z=0.5
z=1

Контрольные числа:
S(0.5)=0.0647324
S(1)=0.4382591
 

DarkKnight

Well-known member
01.08.2010
653
0
#2
Ваши идеи по поводу решения???
Какой нибудь код может быть?
 
S

Sheriff92

#3
Единственное, что через do - while. А чтоб точность eps указывать, можно либо через меню выбора, либо задать какую-нибудь переменную, и чтобы если пользователь вводил "1", то программа выдавала pow(10,-3), если "2", то eps=pow(10,-6)...ну и на pow(10,-8) соответственно "3".
 

DarkKnight

Well-known member
01.08.2010
653
0
#4
А выражение можешь понятнее написать, или лучше скан-копию его.....
А то разобрать не могу...
 
F

flashkpi

#6
Если что, обращайся, напишу
icq: 588002847
email: flash_1989@ukr.net
 

lazybiz

Well-known member
03.11.2010
1 339
0
#7
Sheriff92
А что означает восклицательный знак в знаменателе? Между скобками я так понимаю умножение на факториал происходит?

Добавлено: flashkpi
За деньги предлагаешь?

Добавлено: Sheriff92
Что это?
 

DarkKnight

Well-known member
01.08.2010
653
0
#8
C++:
/*
codeby.net
Autor: DarkKnight125
*/

#include <iostream>
#include <iomanip>

using namespace std;

void main(void)
{
setlocale(LC_ALL,"Russian"); //Локаль
const double Pi = 3.141592653589; //Число ПИ
double esp = pow(10.0,-3.0); //Точность *определять ее тут не обязательно, она в цикле определяется
double z; //Аргумент функции
double Sum = 0; //Сумма
double Current = ::numeric_limits<double>::max(); //Текущий элемент последовательности
double n = 0; //Индекс последовательности
cout<<"Введите аргумент Z = ";
cin >> z; //Ввод агрумента

for (int k = -3; k> - 13; k--) //Цикл отвечающий за погрешность (точность)
{
esp = pow(10.0,(double)k); //Зададим точность
Current = ::numeric_limits<double>::max(); //Максимальное значение типа double
Sum = 0; //Обнулим сумму
n=0; //Обнулим n
while (abs(Current) > esp) //Пока модуль текущего значения последовательности > точности
{
Current = pow(-1.0,n) * pow (Pi/2,2*n+1); //Вычислим числитель первого 
for (int i = 2*n+1; i>1; i--) //Вычислим факториал в знаменателе первого
Current/=i; 
Current /= (4*n +3); //Разделим на второй множитель знаменателя первого
Current *= pow(z,4*n+3); //Умножим на второе
Sum += Current; //Увеличим сумму 
n++; //Увеличим индекс
}
cout<<"Результат (точность 10^"<<(int)k<<") : "<<setprecision(int(abs(k)))<<Sum<<endl;
}

}
 

Вложения

  • 54.3 КБ Просмотры: 33