Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.72/170: Рейтинг темы: голосов - 170, средняя оценка - 4.72
1 / 1 / 1
Регистрация: 04.10.2010
Сообщений: 17
1

Расчет синуса и косинуса по ряду Тейлора

10.11.2010, 16:28. Показов 32400. Ответов 14
Метки нет (Все метки)

помогите посчитать синус и косинус с помощью ряда Тейлора
Как я понимаю синус и косинус это тип double? т.е там должно быть 13 знаков после зяпятой??
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.11.2010, 16:28
Ответы с готовыми решениями:

Разложение синуса и косинуса в ряд Тейлора
Есть следующая функция с разложением косинуса и синуса в ряд: void sincos (double a) { ...

Поясните алгоритм вычисления синуса по ряду Тейлора
void sinus1(int x1) { float a, s1; a = x1; s1 = x1; for (int i = 1; i <= 15; i++) ...

Расчёт синуса, косинуса, тангенса
Средствами Builder C++ создать проект, содержащий форму с меню для выполнения различных расчётов....

Написать формулу для синуса по ряду Тейлора не подключая библиотеку math
Нужно написать функцию для синуса используя его разложение в ряд Тейлора

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
14
2011 / 1283 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
10.11.2010, 16:53 2
как объявишь такой тип и будет. А на счет точности это зависит от количества членов разложения. Можно задать фиксированное, можно вычислять до некоторой заданной точности.
0
Эксперт С++
5042 / 3103 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
10.11.2010, 17:18 3
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

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
#include <iostream>
#include <iomanip>
#include <cmath>
 
double sinx(double x);
double cosx(double x);
 
int main()
{
    double x;
 
    std::cout << "Enter x: ";
    std::cin >> x;
 
    std::cout << std::setprecision(15) << "sinx = " << sinx(x) << "\tlibSin = " << sin(x) << std::endl;
    std::cout << std::setprecision(15) << "sinx = " << cosx(x) << "\tlibSin = " << cos(x) << std::endl;
 
    std::cin.get();
    return 0;
}
 
double sinx(double x)
{
    double n = x;
    double sum = 0.0;
    int i = 1;
 
    do
    {
        sum += n;
        n *= -1.0 * x * x / ((2 * i) * (2 * i + 1));
        i++;
    }
    while (fabs(n) > 0.000000001);
 
    return sum;
}
 
double cosx(double x)
{
    double n = 1.0;
    double sum = 0.0;
    int i = 1;
 
    do
    {
        sum += n;
        n *= -1.0 * x * x / ((2 * i - 1) * (2 * i));
        i++;
    }
    while (fabs(n) > 0.000000001);
 
    return sum;
}
Прав был ув. KuKu, надо это вынести в фак...
1
1 / 1 / 1
Регистрация: 04.10.2010
Сообщений: 17
10.11.2010, 17:22  [ТС] 4
Огромное спасибо!
0
1 / 1 / 1
Регистрация: 04.10.2010
Сообщений: 17
10.11.2010, 19:25  [ТС] 5
а нельзя получить так чтобы совпадало до еще больше знаков после запятой
так просто для синуса совпадает 10 после запятой???
0
Эксперт С++
5042 / 3103 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
10.11.2010, 19:46 6
Точность такую поставьте
0.00000000001

Добавлено через 2 минуты
Но тут от числа зависит. Где-то точность выше, где-то ниже.
0
1 / 1 / 1
Регистрация: 04.10.2010
Сообщений: 17
10.11.2010, 19:52  [ТС] 7
понял, спасибо
0
137 / 71 / 23
Регистрация: 17.10.2010
Сообщений: 919
10.11.2010, 22:07 8
C++
1
2
std::cout << std::setprecision(15) << "sinx = " << sinx(x) << "\tlibSin = " << sin(x) << std::endl;
    std::cout << std::setprecision(15) << "sinx= " << cosx(x) << "\tlibSin = " << cos(x) << std::endl;
может все таки
C++
1
2
std::cout << std::setprecision(15) << "sinx = " << sinx(x) << "\tlibSin = " << sin(x) << std::endl;
    std::cout << std::setprecision(15) << "cosx = " << cosx(x) << "\tlibCos = " << cos(x) << std::endl;
0
Эксперт С++
5042 / 3103 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
10.11.2010, 22:16 9
Да, так вернее, но суть-то от этого не меняется))) А Ctrl+C рулит.
0
137 / 71 / 23
Регистрация: 17.10.2010
Сообщений: 919
10.11.2010, 22:46 10
Канещно рулэт!!!
0
9 / 9 / 2
Регистрация: 02.11.2012
Сообщений: 153
17.09.2013, 05:00 11
silent_1991, а вы не учитывали того, что ваша функция подсчета косинуса не работает уже при значении x более 35? Вы действительно правильно используете ряд Тейлора, но там ведь у вас постоянно идёт умножение на x^2, поэтому даже при достаточно маленьких значениях x переменная double переполняется. Поэтому нужно учитывать переодичность косинуса и уже от этого плясать.
0
Эксперт С++
5042 / 3103 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
17.09.2013, 17:36 12
kebal, ух ты ж вы темку-то откопали... Три года прошло, как никак.
Вообще нет, не учитывал. Ибо мне было (и до сих пор есть) как-то не до подобных нюансов. В качестве учебной реализации сойдёт, в качестве промышленной - сойдёт math::cos, вот и все дела.
0
9 / 9 / 2
Регистрация: 02.11.2012
Сообщений: 153
17.09.2013, 20:18 13
В качестве учебной реализации это как раз никак не пойдет. У вас по сути программа работает в 50 случаях из бесконечнсти, а это очень плохо. Вы сразу же учите человека плохому программированию. Я понимаю, если бы вы хотя бы отметили это когда писали код. А иначе это можно просто назвать тяп ляп. Нужно решение? Ловите маленький кусочек.
0
Эксперт С++
5042 / 3103 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
18.09.2013, 10:46 14
Цитата Сообщение от kebal Посмотреть сообщение
У вас по сути программа работает в 50 случаях из бесконечнсти, а это очень плохо.
Реализация, учитывающая бесконечность случаев из бесконечности на учебную уже далеко как не тянет.
Цитата Сообщение от kebal Посмотреть сообщение
Вы сразу же учите человека плохому программированию.
Я не преподаватель, я учить не нанимался. Если приходишь на форум и просишь готовое решение - будь готов получить полуфабрикат.
Цитата Сообщение от kebal Посмотреть сообщение
Я понимаю, если бы вы хотя бы отметили это когда писали код.
Повторяюсь, я об этих нюансах не задумывался. Когда пишешь не промышленный код, да ещё и не для себя, не сильно задумываешься о полном покрытии тестами.
Цитата Сообщение от kebal Посмотреть сообщение
Нужно решение? Ловите маленький кусочек.
Предпочитаю придерживаться именно такого принципа. За себя я уже отучился, учиться второй раз за кого-то не намерен. Строго говоря, на программировании написание вычисления функции f(x) при помощи ряда Тейлора дают где-то на второй-третей лабораторной, и цель этого задания - научиться работать с циклами. Правда, тут это сошло на нет, поскольку цикл я написал за ТСа.

Повторяю, это подойдёт в качестве учебного решения. Если в эту сторону копать, то для некоторых входных значений (для некоторых икс) ширины дабла не хватит. Пишем длинные действительные числа, чтобы этот случай учесть? Если нужен безукоризненный результат во всех случаях - добро пожаловать в мир стандартной библиотеки. Что-то не нравится - пишите собственную реализацию и выкладывайте. Претензий я ваших не заказывал.
0
0 / 0 / 1
Регистрация: 25.05.2016
Сообщений: 1
09.10.2013, 01:22 15
Чтобы функции считали хорошо при любых значениях аргументов, вставьте в них одной из первых строк:
C
1
x = fmod(x, 2 * M_PI);
Это позволяет найти соответствующий угол в пределах -2π <= x <= 2π
А иначе да - при значениях больше 35 уже начинаются "чудеса". Как-то так...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2013, 01:22

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Функция синуса от косинуса
Задание такого - построить график функции y=sin(cos(x)) точками, выбрав расположение коорд. осей на...

График синуса (косинуса)
Доброго времени суток. Может у кого есть готовые решения построения графика синуса(косинуса)?

Графики синуса и косинуса
Помогите, пожалуйста, написать программу,чтобы строить графики синуса и косинуса

Вычисление синуса и косинуса интегрально
Помогите пожалуйста. Несколько дней не могу разобраться, запутался. Есть программа, считающая...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.