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

Вычислить сумму n членов ряда Тейлора для косинуса - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.70
SKILHUNT
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 14
10.10.2012, 23:26     Вычислить сумму n членов ряда Тейлора для косинуса #1
По заданию дано число X, надо вычислить сумму n членов рада тейлора для косинуса и сравнить с результатом библиотечного косинуса. Получается, что x и n задаются пользователем. Я сделал наброски, но при вычислении у меня n приходится подбирать чтобы результаты совпали.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
#include<math.h>
int main()
{
double x,n,c,mx2 = -x*x,part=1,sum=1;
int i;
    for(;;){
    printf("Vvedite x:\n");
    scanf("%lf", &x);
    printf("Vvedite n:\n");
    scanf("%lf",&n);
    if(n<=0)break;
    for (i = 2; i < n; i+=2) {
        part *= mx2/((i-1)*i);
        sum += part;
    }
    c=cos(x);
    printf("cos(%lf) = %lf\n", x, sum); 
    printf("cos(%lf) = %lf\n", x, c);
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2012, 23:26     Вычислить сумму n членов ряда Тейлора для косинуса
Посмотрите здесь:

C++ Вычислить сумму членов бесконечного ряда с заданной степенью точности > 0 и заданного значения х
Составить программу для вычисления суммы данного ряда для указанного значения аргумента х, если известно количество N членов ряда. C++
Не используя стандартные функции (за исключением abs), вычислить сумму первых n членов ряда C++
C++ определить число членов ряда, необходимых для расчета с заданной погрешностью суммы членов ряда:
Подсчитать сумму членов ряда с точностью до 0.000001 и сумму первых 10 членов ряда C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nullpointer
 Аватар для nullpointer
45 / 45 / 5
Регистрация: 30.03.2009
Сообщений: 518
10.10.2012, 23:47     Вычислить сумму n членов ряда Тейлора для косинуса #2
Я так думаю нужно что-то вроде этого

C
1
2
3
4
5
6
7
while (fabs(с - sum)>eps){
        
                      for (i = 2; i < n; i+=2) {
                           part *= mx2/((i-1)*i);
                           sum += part;
                      }
}
Dima249
10 / 10 / 0
Регистрация: 02.10.2011
Сообщений: 69
10.10.2012, 23:47     Вычислить сумму n членов ряда Тейлора для косинуса #3
Цитата Сообщение от SKILHUNT Посмотреть сообщение
C++
1
double x,n,c,mx2 = -x*x,part=1,sum=1;
что за -x*x? у меня как я стал запускать вашу программу выдало ошибку с ошибкой обращения к х
могу выложить похожую программу
SKILHUNT
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 14
10.10.2012, 23:50  [ТС]     Вычислить сумму n членов ряда Тейлора для косинуса #4
У меня все запускается, но работает не совсем корректно
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.10.2012, 23:54     Вычислить сумму n членов ряда Тейлора для косинуса #5
Цитата Сообщение от SKILHUNT Посмотреть сообщение
double x,n,c,mx2 = -x*x,part=1,sum=1;
использование переменной х без инициализации
должна быть ошибка компиляции или предупреждение
Dima249
10 / 10 / 0
Регистрация: 02.10.2011
Сообщений: 69
10.10.2012, 23:59     Вычислить сумму n членов ряда Тейлора для косинуса #6
Цитата Сообщение от I.M. Посмотреть сообщение
использование переменной х без инициализации
должна быть ошибка компиляции или предупреждение
при запуски программы выдает ошибку
SKILHUNT
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 14
11.10.2012, 00:00  [ТС]     Вычислить сумму n членов ряда Тейлора для косинуса #7
Однако Dev-c++ никаких предупреждений не делает, а программа запускается
Dima249
10 / 10 / 0
Регистрация: 02.10.2011
Сообщений: 69
11.10.2012, 00:02     Вычислить сумму n членов ряда Тейлора для косинуса #8
Цитата Сообщение от SKILHUNT Посмотреть сообщение
Однако Dev-c++ никаких предупреждений не делает, а программа запускается
Советую использовать Visual Studio 2010/2012 есть экспресс версии бесплатные на сайте microsoft
SKILHUNT
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 14
11.10.2012, 00:03  [ТС]     Вычислить сумму n членов ряда Тейлора для косинуса #9
Цитата Сообщение от Dima249 Посмотреть сообщение
Советую использовать Visual Studio 2010/2012 есть экспресс версии бесплатные на сайте microsoft
Надо будет скачать, но всеже отелось бы довести до ума програмку
Dima249
10 / 10 / 0
Регистрация: 02.10.2011
Сообщений: 69
11.10.2012, 00:25     Вычислить сумму n членов ряда Тейлора для косинуса #10
Цитата Сообщение от SKILHUNT Посмотреть сообщение
Надо будет скачать, но всеже отелось бы довести до ума програмку
напишите формулу вашу пожалуйста
SKILHUNT
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 14
11.10.2012, 00:30  [ТС]     Вычислить сумму n членов ряда Тейлора для косинуса #11
Приложил фото с заданием, там формула есть
Миниатюры
Вычислить сумму n членов ряда Тейлора для косинуса  
Dima249
10 / 10 / 0
Регистрация: 02.10.2011
Сообщений: 69
11.10.2012, 00:52     Вычислить сумму n членов ряда Тейлора для косинуса #12
Цитата Сообщение от SKILHUNT Посмотреть сообщение
Приложил фото с заданием, там формула есть
вы не так указали формулу
там у меня когда я пробовал сделать вашу программу возникла проблема с факториалом, а так вот формула
C++
1
 part *=(pow(-1.0,i))*(pow(x,2*n)/(/*факториал*/));
SKILHUNT
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 14
11.10.2012, 01:07  [ТС]     Вычислить сумму n членов ряда Тейлора для косинуса #13
вообще с факториалом как я понял требуется его реализовать без factorial
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
11.10.2012, 01:19     Вычислить сумму n членов ряда Тейлора для косинуса #14
Цитата Сообщение от SKILHUNT Посмотреть сообщение
Однако Dev-c++ никаких предупреждений не делает, а программа запускается
Это не делает неправильный код правильным.
Использование переменной х должно быть после ее инициализации (после ввода значения с клавиатуры). Переносите вычисление
SKILHUNT
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 14
11.10.2012, 15:26  [ТС]     Вычислить сумму n членов ряда Тейлора для косинуса #15
В общем еще пошаманив вот что я получил:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<stdio.h>
#include<math.h>
int main()
{
    for(;;){
    double x,n,c,part=1,sum=1;
    int i;
    printf("Vvedite x:\n");
    scanf("%lf", &x);
    printf("Vvedite n:\n");
    scanf("%lf",&n);
    double mx2 = -x*x, fac;
    if(n<=0)break;
    for (i = 2; i < n; i+=2) {
        fac=i*(i-1);
        part *= mx2/fac;
        sum += part;
        }
    c=cos(x);
    printf("cos(%lf) = %lf\n", x, sum); 
    printf("cos(%lf) = %lf\n", x, c);
}
}
Ведь в моем случае от n зависит точность как я понял?

Добавлено через 1 час 15 минут
Кто может, покажите как надо, ато я чет вожусь, опыта нету, еще не до конца понимаю.

Добавлено через 11 часов 48 минут
В общем догнал я задание, надо в итоге чтобы выводилась сумма n членов ряда и косинус для сравнения, x и n задаются пользователем, но у меня всегда в итоге сумма выдает 1
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
#include<math.h>
    int main()
{
    double x,n,c,part=1,sum=1;
    int i;
    for(;;){
    printf("Vvedite x:\n");
    scanf("%lf", &x);
    printf("Vvedite n:\n");
    scanf("%d",&n);
    if(n<=0)break;
    for (i = 2; i < n; i+=2) {
        part *= ((pow(-1.0,i))*(pow(x,2*n)))/((2*i-1)*i);
        sum += part;
    }
    printf("S=%lf\ncos(%lf) = %lf\n", sum, x, cos(x));
}
}
nullpointer
 Аватар для nullpointer
45 / 45 / 5
Регистрация: 30.03.2009
Сообщений: 518
11.10.2012, 16:08     Вычислить сумму n членов ряда Тейлора для косинуса #16
Ну вообще я не вижу,что в задании написано n вводить с клавиатуры. Смысл этого задания как раз и состоит в том,чтобы программа автоматически рассчитывала сколько ей нужно членов ряда использовать,чтобы получилсь достаточно точное значение. Я вам уже писал,что нужно сделать. Вводите какую-нибудь эпсилон равную, например, 0.0001, и ставите условие выполнять вычисление до тех пор пока разность табличного косинуса(его значение у вас хранится в переменной с) и вычисленного вами значения больше этого эпсилон. Только тогда вам сначала надо табличный косинус посчитать, а уже после него цикл реализовывать.

Добавлено через 2 минуты
я писал подобную программу, только там через ряд Тейлора считался логарифм
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main ()
{
int n,a,d;
float eps,sl,sp,x;
n=0; a=10;
printf("vvedite argument x\n");
scanf("%f",&x);
sl=log(x);
printf("vvedite to4nost' Eps\n");
scanf("%f",&eps);
 
while (fabs(sl-sp)>eps){
        sp=0.0;
        for (n=0;n<a;n++){
                d=1;
                sp+=pow(x - 1, n + n + 1) / ((n + n + 1) * pow(x+1, n + n + 1));
        }   sp*=2;
        a++;
printf("\t#%d, log %f, summa %f\n",a-10,sl,sp);
}
_getch();
}
SKILHUNT
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 14
11.10.2012, 16:36  [ТС]     Вычислить сумму n членов ряда Тейлора для косинуса #17
с нас просто требуют, чтобы программа была зациклена и при введении n<=0 она выходила, поэтому я и думал, что n должно задаваться пользователем. Тобишь получается, что я должен вывести сколько n членов ряда в сумме=косинусу?
nullpointer
 Аватар для nullpointer
45 / 45 / 5
Регистрация: 30.03.2009
Сообщений: 518
11.10.2012, 16:57     Вычислить сумму n членов ряда Тейлора для косинуса #18
Цитата Сообщение от SKILHUNT Посмотреть сообщение
Тобишь получается, что я должен вывести сколько n членов ряда в сумме=косинусу?
Исходя из того задания,что тут прикреплено программа сама должна посчитать сколько ей нужно членов ряда,чтобы его сумма равнялась косинусу. Другое дело,если вам преподаватель сказал самим вводить число членов ряда,но тогда и точность вычисления будет соответствующая,потому что может просто не хватить этих самых членов,чтобы их сумма равнялась косинусу,если вы введете их мало. А выводить количество этих члено или не выводить это уж ваше дело.
SKILHUNT
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 14
12.10.2012, 14:55  [ТС]     Вычислить сумму n членов ряда Тейлора для косинуса #19
спасиб за информацию, буду дальше ковырять

Добавлено через 3 часа 55 минут
блин, чет я на одном месте завтыкал, как (2*n)! расписать через for?

Добавлено через 17 часов 53 минуты
Никто не может подсказать такую мелочь? =(
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2012, 15:16     Вычислить сумму n членов ряда Тейлора для косинуса
Еще ссылки по теме:

вычислить сумму членов ряда с использованием рекуррентную формулу,дано натуральное и действительное число с вычислением C++
Вычислить сумму N членов ряда C++
C++ Вычислить сумму n членов заданного ряда

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.10.2012, 15:16     Вычислить сумму n членов ряда Тейлора для косинуса #20
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
#include <stdio.h>
#include <locale.h>
#include <math.h>
 
int main(void)
{
    double x, eps, s, sl;
    long z;
    short k;
    char line[100];
    
    if (setlocale(LC_ALL, "C") == NULL)
        fprintf(stderr, "Failed to set locale!\n");
    printf("Программа вычисляет сумму ряда:\n"
           "sin(x) = x - (x ^ 3) / 3! + (x ^ 5) / 5! - (x ^ 7) / 7! + ...\n");
    fflush(stdout);
    do {
        do {
            printf("Введите x ");
            fflush(stdout);
        } while (fgets(line, sizeof line, stdin) == NULL
              || sscanf(line, "%lf", &x) != 1);
        do {
            printf("Введите точность > 0 ");
            fflush(stdout);
        } while (fgets(line, sizeof line, stdin) == NULL
              || sscanf(line, "%lf", &eps) != 1
              || eps <= 0);
        x = fmod(x, 2 * acos(-1));
        s = 0;
        sl = x;
        for (z = 1; fabs(sl) >= eps; z++) {
            s += sl;
            sl = -sl * x * x / (2 * z * (2 * z + 1));
        }
        for (k = 0; eps < 1; eps *= 10, k++)
            ;
        printf("Сумма = %.*f\n", k, s);
        printf("Контрольное значение: %f\n", sin(x));
    } while (getchar() != EOF);
    return 0;
}
Код
[guest@localhost ex2_sin]$ ./sin
Программа вычисляет сумму ряда:
sin(x) = x - (x ^ 3) / 3! + (x ^ 5) / 5! - (x ^ 7) / 7! + ...
Введите x 1.5
Введите точность > 0 0.0001
Сумма = 0.9975
Контрольное значение: 0.997495
[guest@localhost ex2_sin]$
Yandex
Объявления
12.10.2012, 15:16     Вычислить сумму n членов ряда Тейлора для косинуса
Ответ Создать тему

Метки
cos
Опции темы

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