0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 50
1

Вычислить и вывести на экран в виде таблицы значения функции, с заданной с помощью ряда Тейлора

02.11.2014, 03:21. Показов 3066. Ответов 12
Метки нет (Все метки)

Понимаю, что тема заезженная, но всё же не понимаю, как решать эту задачу.

Вычислить и вывести на экран в виде таблицы значения функции, с заданной с помощью ряда Тейлора, на интервале от а до b с шагом h=(b-a)/m с точностью ԑ. Таблицу
снабдить заголовком и шапкой. Каждая строка таблицы должна содержать значение
аргумента, значение функции и количество просуммированных членов ряда.

https://www.cyberforum.ru/cgi-bin/latex.cgi?arctg(x)=-\frac{\pi}{2}+\sum_{n=0}^{\infty}\frac{(-1)^{n+1}}{(2n+1)x^{2n+1}}=-\frac{\pi}{2}-\frac{1}{x}+\frac{1}{3x^3}-\frac{1}{5x^5}+...\; ;\;x \lt -1
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.11.2014, 03:21
Ответы с готовыми решениями:

Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора
Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на...

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

Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора
Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на...

Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора
Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на...

12
Модератор
Эксперт С++
12623 / 10122 / 6096
Регистрация: 18.12.2011
Сообщений: 27,154
02.11.2014, 11:49 2
Большая коллекция решенных задач
0
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 50
02.11.2014, 21:33  [ТС] 3
zss, всё бы ничего, да вот только не помогает ваша ссылка.
0
Модератор
Эксперт С++
12623 / 10122 / 6096
Регистрация: 18.12.2011
Сообщений: 27,154
02.11.2014, 22:12 4
Цитата Сообщение от Fighter215 Посмотреть сообщение
только не помогает
Не можете написать рекуррентное соотношение?
0
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 50
02.11.2014, 22:13  [ТС] 5
zss, да, всё очень плохо, я знаю:C
0
Модератор
Эксперт С++
12623 / 10122 / 6096
Регистрация: 18.12.2011
Сообщений: 27,154
02.11.2014, 22:23 6
https://www.cyberforum.ru/cgi-bin/latex.cgi?a_{n}=-{a}_{n-1}*\frac{2n+1}{(2n-1)x^{2}}
0
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 50
02.11.2014, 22:29  [ТС] 7
zss, а можно полный код? Ну уж очень нужно
0
Модератор
Эксперт С++
12623 / 10122 / 6096
Регистрация: 18.12.2011
Сообщений: 27,154
02.11.2014, 22:36 8
Лучший ответ Сообщение было отмечено Fighter215 как решение

Решение

Ну 3 строки заменить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// x - аргумент, значение функции которого надо вычислить
// epsilon - точность вычисления суммы
double MyAtan(double x,double epsilon)
{
    double s=0;// Тут копим сумму
    double an; // Тут храним N-ый член ряда
    int n;
    n=0; // начальное значение n
    an=-1.0/x; // начальное значение an
    while(fabs(an)>epsilon) 
// Суммировать будем пока член ряда an не станет достаточно маленьким по модулю
    {
          s+=an; // суммируем очередной член ряда
          n++; // переходим к следующему члену 
          an*=-(2.0*n+1.0)/(2.0*n-1.0)/x/x; // пересчитываем a(n) через a(n-1)
    }
    return s-M_PI/2.0; // получившаяся сумма
}
1
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 50
03.11.2014, 01:38  [ТС] 9
zss, будет ли этот код являться полным решением данной задачи?
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
double f(double x, double eps)
{
    double v, sum = x;
    long n = 1;
    double fn = pow(x,3)/2.0;
    while(eps < fabs(fn))
    {
        sum += fn;
        n   += 1;
        fn *=-(2.0*n+1.0)/(2.0*n-1.0)/x/x;
        
    }
    return sum;
}
 
int main()
{
    char sign[] = " ";
    double x, fx, dx = 0, xn = 0, xk = 0, eps = 0;
    printf("Enter xn : ");scanf("%lf",&xn);
    printf("Enter xk : ");scanf("%lf",&xk);
    printf("Enter dx : ");scanf("%lf",&dx);
    printf("Enter eps: ");scanf("%lf",&eps);
    printf("|------------------------------------|\n");
    printf("|    x   |  f(x)  |  arctg |(tan-f)/f|\n");
    printf("|------------------------------------|\n");
    for(x = xn; x <= xk; x += dx)
    {
        fx = f(x,eps);
        if(x < 0)
            sign[0] = '\0';
        else
            sign[0] = ' ';
        printf("|%s%.4f |%s%.4f |%s%.4f|%s%.4f  |\n",
            sign,x,sign,fx,sign,atan(fx),sign,(sin(x) != 0 ? fabs(tan(x) - fx)/tan(x) : 0));
    }
    printf("|-----------------------------------|\n");
    printf("Press any key to continue\n");
    return 0;
}
Добавлено через 2 часа 33 минуты
Точнее вот так:
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
double f(double x, double eps)
{
    double v, sum = x;
    long n = 1;
    double fn = pow(x,3)/2.0;
    while(eps < fabs(fn))
    {
        sum += fn;
        n   += 1;
        fn *=-(2.0*n+1.0)/(2.0*n-1.0)/x/x;
        
    }
    return sum;
}
 
int main()
{
    char sign[] = " ";
    double x, fx, dx = 0, xn = 0, xk = 0, eps = 0;
    printf("Enter xn : ");scanf("%lf",&xn);
    printf("Enter xk : ");scanf("%lf",&xk);
    printf("Enter dx : ");scanf("%lf",&dx);
    printf("Enter eps: ");scanf("%lf",&eps);
    printf("|------------------------------------|\n");
    printf("|    x   |  f(x)  |  arctg |(tan-f)/f|\n");
    printf("|------------------------------------|\n");
    for(x = xn; x <= xk; x += dx)
    {
        fx = f(x,eps);
        if(x < 0)
            sign[0] = '\0';
        else
            sign[0] = ' ';
        printf("|%s%.4f |%s%.4f |%s%.4f|%s%.4f  |\n",
            sign,x,sign,fx,sign,atan(fx),sign,(atan(x) != 0 ? fabs(atan(x) - fx)/atan(x) : 0));
    }
    printf("|------------------------------------|\n");
    printf("Press any key to continue\n");
    return 0;
}
Добавлено через 11 минут
Упс, ещё одна ошибка. Начальное значение не то.
0
Вездепух
Эксперт CЭксперт С++
10420 / 5692 / 1550
Регистрация: 18.10.2014
Сообщений: 14,018
03.11.2014, 03:19 10
Тут еще есть небольшая тонкость о том, в рамках какого предмета вам задали это задание. Если это просто "задание-по-программированию-напишите-просто-чтобы-что-то-считало", то все нормально. Но если это что-то на тему правильной работы с плавающей арифметикой в современных компьютерах, то за такую реализацию можно запросто схлопотать "садись, два".

Одной из широко известных тонкостей работы с плавающими числами является то, что если вам надо найти сумму слагаемых существенно разного порядка (как запросто может получится в случае ряда Тейлора), то суммирование следует выполнять от меньших (по модулю) слагаемых к большим. Иначе меньшие слагаемые могут просто не оказать влияния на общую сумму. Сумма будет неточной, несмотря на то, что существенно более точное представление было вполне в рамках возможностей используемого плавающего типа данных.

По этой причине одним и способов правильной организации суммирования является 1) определить, до какого слагаемого будет выполняться суммирование, 2) выполнить суммирование начиная с этого слагаемого в обратном порядке, т.е. по направлению к "началу" ряда Тейлора.

Интересуют ли вас такие вещи в рамках данного задания - вам виднее.

P.S. Из аналогичных соображений инкрементальный подход к вычислению очередного слагаемого (т.е. 'fn *=-(2.0*n+1.0)/(2.0*n-1.0)/x/x') может привести к накоплению ошибки.
1
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 50
03.11.2014, 03:33  [ТС] 11
TheCalligrapher, в данном случае просто "задание-по-программированию-напишите-просто-чтобы-что-то-считало". Т.к. не особо дружу с математикой, имею вот такие вот проблемы, на лёгких задачах.
Спасибо за дополнительную информацию, я учту это в будущем, но для конкретно этого случая, если код написан правильно, то сойдёт и так.
0
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 50
03.01.2015, 22:51  [ТС] 12
upd
0
Модератор
Эксперт С++
12623 / 10122 / 6096
Регистрация: 18.12.2011
Сообщений: 27,154
04.01.2015, 10:21 13
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
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#define _USE_MATH_DEFINES
#include <math.h>
 
double f(double x, double eps)
{
    if(fabs(x)<0)
        return 0;
    long n = 0;
    double fn = -1./x;
    double sum = 0;
    while(eps < fabs(fn))
    {
        sum += fn;
        fn *=-(2.0*n+1.0)/((2.0*n+3.0)*x*x);
        n++;
        
    }
    if(x<0)
        sum-=M_PI/2.0;
    else
        sum+=M_PI/2.0;
    return sum;
}
 
int main()
{
    double dx, xn,xk, eps;
    printf("Enter xn : ");scanf("%lf",&xn);
    printf("Enter xk : ");scanf("%lf",&xk);
    printf("Enter dx : ");scanf("%lf",&dx);
    printf("Enter eps: ");scanf("%lf",&eps);
    printf("|-------------------------------------|\n");
    printf("|   x    |  f(x)  | atan(x)|   dx     |\n");
    printf("|-------------------------------------|\n");
    for(double x = xn; x <= xk; x += dx)
    {
       double fx=f(x,eps);
       printf("|%8.4f|%8.4f|%8.4f|%8.3e|\n",
            x,fx,atan(x),fabs(fx-atan(x)) );
    }
    printf("|-------------------------------------|\n");
    printf("Press any key to continue\n");
    getch();
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.01.2015, 10:21
Помогаю со студенческими работами здесь

Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора
Всем доброй ночи, прошу о помощи нужно решить не в консоли, а на обычном Си. P.S.:Знаю, что...

Вычислить и вывести на экран в виде таблицы значения функции, с заданной с помощью ряда Тейлора
Посмотрите, пожалуйста мой код по рядам Тейлора, код явно не так считает ряд, что не так:? ...

Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора
Помогите написать блок-схему к программам: 1)Вычислить и вывести на экран в виде таблицы значения...

Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора
Здравствуйте. Нужно вычислить и вывести на экран в виде таблицы значения функции, заданной с...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru