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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2015, 22:41   #1
Damning
 
Регистрация: 18.01.2015
Сообщений: 4
По умолчанию Рекуррентная формула

Помогите с заданием. Не получается правильно составить выражение.
Вычислить значение некоторой функции в заданном диапазоне изменения аргумента Х с заданной точностью.


Код:
 double factorial(int N)
{
    if(N < 0) 
        return 0; 
    if (N == 0) 
        return 1; 
    else 
        return N *  factorial(N - 1); 
}

void func::formula(float X)
{
	x = X;
	float s = 1;
	k = 1;
	sum = s;
	y = 2 * (powf(cos(x), 2) - 1);
	do 
	{
		k++;
		s *= powf((-1),k) * ( (powf((2*x),(2*k))) / (2*factorial(k)));
		sum += s;
	} while (fabs(s) > eps);
}
Изображения
Тип файла: png 1й.png (11.6 Кб, 51 просмотров)
Damning вне форума Ответить с цитированием
Старый 19.01.2015, 07:42   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

функция factorial() здесь не нужна: в каждой итерации достаточно домножать знаменатель на k.
Знак очередного слагаемого не надо вычислять, возводя –1 в степень:
Код:
sign = (k & 1) ? –1 : +1;
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 19.01.2015, 13:22   #3
Damning
 
Регистрация: 18.01.2015
Сообщений: 4
По умолчанию

Все равно значение функции Y и суммы не сходятся. Что я делаю не так?

Код:
void func::formula(float X)
{
	x = X;
	float s = 1;
	int sign;
	k = 1;
	sum = s;
	y = 2 * (powf(cos(x), 2) - 1);
	do 
	{
		k++;
		s *= (powf((2*x),(2*k))) / (2*k);
		sign = (k&1) ? -1 : +1;
		sum += s*sign;
		
	} while (fabs(s) > eps);
}
Изображения
Тип файла: png Безы111мянный.png (6.7 Кб, 47 просмотров)
Damning вне форума Ответить с цитированием
Старый 19.01.2015, 13:38   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

я ж сказал
Цитата:
в каждой итерации достаточно домножать знаменатель на k
а ты чо творишь? вынеси знаменатель в отдельную переменную z = 1, затем в каждой итерации перед вычислением члена ряда:
Код:
z *= k;
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 19.01.2015, 15:08   #5
Damning
 
Регистрация: 18.01.2015
Сообщений: 4
По умолчанию

Все равно не получается. Не могли бы вы исправить предыдущий код? Очень прошу.
Damning вне форума Ответить с цитированием
Старый 19.01.2015, 16:45   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Рекуррентная формула
Не вижу вообще. Рекуррентная - это когда кадый последующий член ряда выводится из предыдущего. Здесь:

R(1)=-x*x
R(k)=-R(k-1)*4*x*x/k

и получается алгебраическим делением k-го члена на (k-1)-ый
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.01.2015, 19:57   #7
Damning
 
Регистрация: 18.01.2015
Сообщений: 4
По умолчанию

-------------

Последний раз редактировалось Damning; 19.01.2015 в 21:28.
Damning вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекуррентная формула Solidera Помощь студентам 5 01.12.2013 18:47
Рекуррентная формула dimka123 Паскаль, Turbo Pascal, PascalABC.NET 6 09.11.2013 07:03
Рекуррентная формула topside Помощь студентам 2 29.09.2011 22:07
рекуррентная формула unbanned Паскаль, Turbo Pascal, PascalABC.NET 5 18.12.2010 09:23
Рекуррентная формула Russik Помощь студентам 1 14.12.2010 09:41