Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 107, средняя оценка - 4.78
$$RaMpAgE
1 / 1 / 0
Регистрация: 04.10.2010
Сообщений: 17
#1

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

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

помогите посчитать синус и косинус с помощью ряда Тейлора
Как я понимаю синус и косинус это тип double? т.е там должно быть 13 знаков после зяпятой??
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2010, 16:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Расчет синуса и косинуса по ряду Тейлора (C++):

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

Ппрограммы: бесконечный цикл синуса косинуса,и тд. - C++
1)Написать программу в бесконечном цикле , которая будет выдавать значения синуса и косинуса 2)программа которая проверяет четное ли...

ошибка,не правильно работают функции косинуса и синуса! - C++
#include <iostream> #include <conio.h> #include <math.h> #include <fstream> #include <iomanip> using namespace std; double...

Не распознаются функции синуса, косинуса <Math.h> под gcc - C++
Не распознаются функции синуса, косинуса &lt;Math.h&gt; под gcc Почему? Что делать?

Консолька для расчета 200 точек синуса и косинуса - C++
Будет выводится два столбца (один \&amp;quot;sin\&amp;quot;, а другой \&amp;quot;cos\&amp;quot;) с количеством точек =200 Минимумы и максимумы...

Задача по ряду Тейлора - C++
я все время работал в Basic и понятия не имею как пользоваться командами C++. прошу вас, помогите! Формат входных данных. Ввод:...

14
vital792
1992 / 1264 / 56
Регистрация: 05.06.2010
Сообщений: 2,213
10.11.2010, 16:53 #2
как объявишь такой тип и будет. А на счет точности это зависит от количества членов разложения. Можно задать фиксированное, можно вычислять до некоторой заданной точности.
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
10.11.2010, 17:18 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
$$RaMpAgE
1 / 1 / 0
Регистрация: 04.10.2010
Сообщений: 17
10.11.2010, 17:22  [ТС] #4
Огромное спасибо!
0
$$RaMpAgE
1 / 1 / 0
Регистрация: 04.10.2010
Сообщений: 17
10.11.2010, 19:25  [ТС] #5
а нельзя получить так чтобы совпадало до еще больше знаков после запятой
так просто для синуса совпадает 10 после запятой???
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
10.11.2010, 19:46 #6
Точность такую поставьте
0.00000000001

Добавлено через 2 минуты
Но тут от числа зависит. Где-то точность выше, где-то ниже.
0
$$RaMpAgE
1 / 1 / 0
Регистрация: 04.10.2010
Сообщений: 17
10.11.2010, 19:52  [ТС] #7
понял, спасибо
0
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
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
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
10.11.2010, 22:16 #9
Да, так вернее, но суть-то от этого не меняется))) А Ctrl+C рулит.
0
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
10.11.2010, 22:46 #10
Канещно рулэт!!!
0
kebal
9 / 9 / 0
Регистрация: 02.11.2012
Сообщений: 153
17.09.2013, 05:00 #11
silent_1991, а вы не учитывали того, что ваша функция подсчета косинуса не работает уже при значении x более 35? Вы действительно правильно используете ряд Тейлора, но там ведь у вас постоянно идёт умножение на x^2, поэтому даже при достаточно маленьких значениях x переменная double переполняется. Поэтому нужно учитывать переодичность косинуса и уже от этого плясать.
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
17.09.2013, 17:36 #12
kebal, ух ты ж вы темку-то откопали... Три года прошло, как никак.
Вообще нет, не учитывал. Ибо мне было (и до сих пор есть) как-то не до подобных нюансов. В качестве учебной реализации сойдёт, в качестве промышленной - сойдёт math::cos, вот и все дела.
0
kebal
9 / 9 / 0
Регистрация: 02.11.2012
Сообщений: 153
17.09.2013, 20:18 #13
В качестве учебной реализации это как раз никак не пойдет. У вас по сути программа работает в 50 случаях из бесконечнсти, а это очень плохо. Вы сразу же учите человека плохому программированию. Я понимаю, если бы вы хотя бы отметили это когда писали код. А иначе это можно просто назвать тяп ляп. Нужно решение? Ловите маленький кусочек.
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
18.09.2013, 10:46 #14
Цитата Сообщение от kebal Посмотреть сообщение
У вас по сути программа работает в 50 случаях из бесконечнсти, а это очень плохо.
Реализация, учитывающая бесконечность случаев из бесконечности на учебную уже далеко как не тянет.
Цитата Сообщение от kebal Посмотреть сообщение
Вы сразу же учите человека плохому программированию.
Я не преподаватель, я учить не нанимался. Если приходишь на форум и просишь готовое решение - будь готов получить полуфабрикат.
Цитата Сообщение от kebal Посмотреть сообщение
Я понимаю, если бы вы хотя бы отметили это когда писали код.
Повторяюсь, я об этих нюансах не задумывался. Когда пишешь не промышленный код, да ещё и не для себя, не сильно задумываешься о полном покрытии тестами.
Цитата Сообщение от kebal Посмотреть сообщение
Нужно решение? Ловите маленький кусочек.
Предпочитаю придерживаться именно такого принципа. За себя я уже отучился, учиться второй раз за кого-то не намерен. Строго говоря, на программировании написание вычисления функции f(x) при помощи ряда Тейлора дают где-то на второй-третей лабораторной, и цель этого задания - научиться работать с циклами. Правда, тут это сошло на нет, поскольку цикл я написал за ТСа.

Повторяю, это подойдёт в качестве учебного решения. Если в эту сторону копать, то для некоторых входных значений (для некоторых икс) ширины дабла не хватит. Пишем длинные действительные числа, чтобы этот случай учесть? Если нужен безукоризненный результат во всех случаях - добро пожаловать в мир стандартной библиотеки. Что-то не нравится - пишите собственную реализацию и выкладывайте. Претензий я ваших не заказывал.
0
daemian
09.10.2013, 01:22 #15
Чтобы функции считали хорошо при любых значениях аргументов, вставьте в них одной из первых строк:
C
1
x = fmod(x, 2 * M_PI);
Это позволяет найти соответствующий угол в пределах -2π <= x <= 2π
А иначе да - при значениях больше 35 уже начинаются "чудеса". Как-то так...
09.10.2013, 01:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2013, 01:22
Привет! Вот еще темы с ответами:

Разложение косинуса в ряд Тейлора - C++
подскажите как написать програму для разложения косинуса в ряд Тейлора

Разложение косинуса в ряд тейлора - C++
Сам в шоке, но у меня не получается сделать это полноценно(хромает мат часть си у меня :confusion:). Пробовал по разному:то получается...

Разложение косинуса в ряд тейлора - C++
Результат вычисления cos(x) сравнить со значением, вычисленным для заданных x с помощью стандартных соответствующих функций. Для устранения...

Разложение косинуса в ряд Тейлора - C++
Помогите найти ошибку. Написал код, но работает только с 1, где ошибка? class MyClass { public: int x = 3; double s; ...


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

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

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