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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2018, 18:50   #1
Vladonna
Новичок
Джуниор
 
Регистрация: 13.09.2018
Сообщений: 2
По умолчанию [C++] найти сумму ряда , посчитать функцию ch(x) и найти абсолютную и относительную погрешности. Помогите найти ошибку!

В заданиии нужно найти сумму ряда , посчитать функцию и найти абсолютную и относительную погрешности. Код написан, промежуточные значения членов ряда (от 1 до 5, от 1 до 10, от 1 до 100) корректные. Но при прибавлении члены ряда округляются, сумма 10 и 100 членов ничем не отличается после вывода на консоль. Как решить эту проблемму?
Условие во вложении. Игрек с подчеркиванием-нужный ряд.
Код:
#include <iostream>
#include <stdlib.h>
#include<math.h>
#include<conio.h>
using namespace std;

double fact(double num);
 double X1(double Np,double Ng);
 double X2(double Np,double Ng);



int main(int argc, char** argv) {
	double x1,x2,S,a,y,exp;
	double ng,np;
	double num,n;
	
	exp=2.718;
	x1=X1(7,206);
	x2=X2(7,206);

	
	y=(pow(exp,x2)+pow(exp,(-x2)))/2;
	cout<<"ch:"<<y<<endl;
	
	n=10;
	S=0;
	a=0;
	double i=0;
	double b = 0;
	while (i<=n)
	{
	   
	    b = fact(i*2);
		a=pow(x2,(i*2))/b;
		S=S+a;
	

		i++;
	}
cout<<"Sum:"<<S <<endl;
	
	double delta =fabs(y-S);
	double g =delta/fabs(S);
	cout<<"delta:"<<delta<<endl;
	cout<<"g:"<<g<<endl;
	getch();
	
	return 0;
}



double fact(double num){
 if(num < 0) 
        return 0; 
    if (num == 0) 
        return 1; 
    else 
        return num * fact(num - 1); 
}

 double X1(double Np,double Ng){
  double	res= Np/Ng;
	return res;
}

 double X2(double Np,double Ng){
	return Ng/(Np*10);
}
Изображения
Тип файла: jpg Безымянный.jpg (13.3 Кб, 126 просмотров)

Последний раз редактировалось ACE Valery; 13.09.2018 в 19:01.
Vladonna вне форума Ответить с цитированием
Старый 13.09.2018, 21:53   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Возможно, что проблема в другом.
Ряд надо считать по другому, через рекурентное соотношение: an+1 = k * an
Понятно, что k находится из отношения элементов ряда:
k = x^(2n+2) * (2n)! / ((2n)!*(2n+1)*(2n+2)*x^2n) =x^2/((2*n+1)*(2*n+2))
Код:
sum = 0 // начальная сумма
an = 1 // первый элемент ряда
m = 0 // номер элемента ряда
while (m <=10)
{
   sum = sum + an;  // добавим элемент ряда в сумму
   m = m + 1;          // увеличим номер
   k = x*x/(2*m+1)*(2*m+2)); // получим новый k
   an = an*k   // получим следующий элементряда
}
...
Что-то вроде этого ...
PS: 1. Проблема заключается в том, что факториал растёт очень быстро, а при таком методе вычисления точность выше.
2. Предлагаю поискать книгу Т.А. Павловская, Программирование на ЯВУ С++ или её же книга Программирование на ЯВУ Паскаль (эта книга была в списке литературы в разделе Паскаль на этом форуме). В книге тема вычисления подобных рядов раскрыта подробнее.
3. Тут: http://www.programmersforum.ru/showthread.php?t=300599 есть вложение work.rar, в котором рассмотрен один из подобных примеров.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 13.09.2018, 22:07   #3
Vladonna
Новичок
Джуниор
 
Регистрация: 13.09.2018
Сообщений: 2
По умолчанию

Большое спасибо за Ваш ответ! Вы очень помогли)
Vladonna вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите, пожалуйста, найти ошибку в коде (найти сумму факториалов чётных чисел в заданном диапазоне) kris14 Паскаль, Turbo Pascal, PascalABC.NET 8 25.10.2017 15:42
Дан массив а(n) типа SWORD. найти сумму всех отрицательных элементов массива.помогите найти ошибку Юлия123456 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 07.09.2016 06:12
Паскаль. Вычислить сумму ряда. (помогите найти ошибку в программе) Максимилианн Помощь студентам 10 03.05.2014 15:36
Ток протекает по резистору 10 Ом, сопротивление задано с точностью 10%. Найти относительную и абсолютную погрешность вычислений. l2saken Помощь студентам 1 29.09.2013 16:07
Нужно посчитать сумму ряда. В программе ошибка. Пожалуйста помогите найти Рита Белова Помощь студентам 5 05.12.2009 13:07