Форум программистов, компьютерный форум CyberForum.ru

рекуррентная формула - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.62
_nik_
0 / 0 / 0
Регистрация: 10.12.2010
Сообщений: 4
10.12.2010, 21:16     рекуррентная формула #1
Здравствуйте.
Необходимо Вычислить и вывести на экран в виде таблицы значение функции, заданной с помощью ряда Тейлора, на интервале от Хнач до Хкон с шагом dX с точностью ε. Таблицу снабдить заголовком и шапкой. Каждая строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда. Для вычисления последующего члена ряда использовать рекуррентную формулу.


Вот, что у меня получилось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//Подключение библиотеки стандартного ввода и вывода
#include<stdio.h>
//Подключение библиотеки математических функций
#include<math.h>
 
int main()
{
    //Объявление и инициализация
    //переменных программы
    double e, eps=0.0001, x, sum = 0, fact=1;
    int j, i, xk, xn, dx, count=0;
    bool flag = false;
 
    do
    {
        //Приглашение к вводу x нач
        printf("xn = ");
        //Ввод значения 
        scanf("%d",&xn);
 
        //Приглашение к вводу x кон
        printf("xk = ");
        //Ввод значения
        scanf("%d",&xk);
 
        if(xn > xk)
        {
            printf("xn doljno bit' < xk!\n");
        }else
        {
            flag = true;
        }
    }while (!flag);
 
    //Приглашение к вводу dx
    printf("dx = ");
    //Ввод значения
    scanf("%d",&dx);
 
    //Приглашение к вводу x
    printf("x = ");
    //Ввод значения
    scanf("%lf",&x);
 
    //Выводим шапку на экран
    printf("+-----------------------------------------------------------------------+\n");
    printf("| znachenie argumenta\t| znachenie funkcii\t| kol-vo prosumm el-tov\t|\n");
    printf("+-----------------------------------------------------------------------+\n");
 
    //Рассчитываем значения функции
    for(i = xn; i <= xk > eps; i+=dx)
    {
        fact = 1;
        //Цикл вычисления значения факториала числа
        for(j=2;j<=i;j++) 
            fact*=(double)j;
 
        e = (pow((-1), i) * pow(x, 2*i)) / fact;
        
        sum += e;
        count++;
 
        printf("|\t   %d \t\t|\t%lf \t|\t  %d  \t\t|\n", i, e, count);
 
    }
 
    printf("+-----------------------------------------------------------------------+\n\n");
    printf("e^-%.1lf^2 = %.3lf\n", x, sum);
 
    return 0;
}
а вот, что не понравилось преподавателю :
Для вычисления последующего члена ряда использовать рекуррентную формулу. С точностью ε(не учтена в коде)

помогите пожалуйста.
Миниатюры
рекуррентная формула  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2010, 21:16     рекуррентная формула
Посмотрите здесь:

рекуррентная формула C++
Рекуррентная формула C++
C++ Рекуррентная формула - найти ошибку
C++ Рекуррентная формула
C++ Рекуррентная формула
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_nik_
0 / 0 / 0
Регистрация: 10.12.2010
Сообщений: 4
11.12.2010, 09:58  [ТС]     рекуррентная формула #2
подскажите пожалуйста, что делать с точностью, куда её вставить если ряд вычисляется на интервале
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
11.12.2010, 10:01     рекуррентная формула #3
Точность должна быть в условии while, т.е. цикл выполняется пока не достигнута заданая точность.
_nik_
0 / 0 / 0
Регистрация: 10.12.2010
Сообщений: 4
11.12.2010, 10:21  [ТС]     рекуррентная формула #4
это я понимаю, если я вставляю while внутрь цикла for программа зацикливается потому что не изменяется значение функции
моя проблема в том, что я не могу совместить интервал с точностью
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
11.12.2010, 10:40     рекуррентная формула #5
Цитата Сообщение от _nik_ Посмотреть сообщение
Для вычисления последующего члена ряда использовать рекуррентную формулу.
C
1
2
3
4
5
6
7
8
9
10
11
double sum, iter, x; /*sum - сумма ряд, iter - член ряда, x - аргумент функции*/
int n;/*номер вычисляемого члена ряда*/
/*Вычисление функции*/
sum = iter = 1.;
n = 1;
do
{
   iter *= (-1.)*x*x/n;
   sum += iter;
   n++;
}while (fabs(iter) > eps);
Аналитическая формула n-го члена
http://www.cyberforum.ru/cgi-bin/latex.cgi?A_n=\frac {{(-1)}^n\,x^{2n}}{n!}
Рекурентная формула
http://www.cyberforum.ru/cgi-bin/latex.cgi?A_n =\begin{cases}<br />
 1&, \,n=0 \\<br />
 A_{n-1}\,\cdot\,(-\frac{x^2}{n})&, \,n \g 0<br />
\end{cases}

Добавлено через 3 минуты
Цитата Сообщение от _nik_ Посмотреть сообщение
for(i = xn; i <= xk > eps; i+=dx)
Интересное условие)
_nik_
0 / 0 / 0
Регистрация: 10.12.2010
Сообщений: 4
11.12.2010, 10:46  [ТС]     рекуррентная формула #6
Добавлено через 3 минуты

Интересное условие)
это я очепятка
for(i = xn; i <= xk; i+=dx)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2010, 10:55     рекуррентная формула
Еще ссылки по теме:

C++ Рекуррентная формула
C++ Рекуррентная формула
C++ Рекуррентная формула

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
11.12.2010, 10:55     рекуррентная формула #7
Цитата Сообщение от _nik_ Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
for(i = xn; i <= xk > eps; i+=dx)
{
   fact = 1;
   //Цикл вычисления значения факториала числа
   for(j=2;j<=i;j++) 
      fact*=(double)j;
   e = (pow((-1), i) * pow(x, 2*i)) / fact;
   sum += e;
   count++;
   printf("|\t %d \t\t|\t%lf \t|\t %d \t\t|\n", i, e, count);
}
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Рассчитываем значения функции
for(i = xn; i <= xk; i+=dx)
{
   x = (double)i;
   sum = iter = 1.;
   n = 1;
   do
   {
      iter *= (-1.)*x*x/n;
      sum += iter;
      n++;
   }while (fabs(iter) > eps);
 
    printf("|\t   %lf \t\t|\t%lf \t|\t  %d  \t\t|\n", x, sum, n);
 }
Yandex
Объявления
11.12.2010, 10:55     рекуррентная формула
Ответ Создать тему
Опции темы

Текущее время: 23:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru