Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Zyf21
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 170
1

Вычисление sin и cos с использованием рядов Тейлора

04.04.2015, 19:38. Просмотров 2187. Ответов 9
Метки нет (Все метки)

Нужно создать калькулятор для подсчета sin и cos с помощью рядов Тейлора.Вводить нужно значения в градусах.Точность нужна до 4 знака после запятой.Написал программу, но точность её вычислений мала.Например, ввожу значение в 90 градусов и ответ правильный, а когда ввожу значение 180 градусов, то ответ получается приблизительный.Нужна точность после 4 знака после запятой.Помогите пожалуйста как-то улучшить программу чтобы она считала точнее.Или предложите другой алгоритм нахождения sin и cos.Заранее благодарю.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
static int Factorial (int numb)
        {
            int res = 1;
            for (int i = numb; i > 1; i--)
                res *= i;
            return res;
 
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Введите угол в градусах ");
            double k = double.Parse(Console.ReadLine());
            double x=k*Math.PI/180;
 
            double sin = x - Math.Pow(x, 3) / Factorial(3) + Math.Pow(x, 5) / Factorial(5) - Math.Pow(x, 7) / Factorial(7) + Math.Pow(x, 9) / Factorial(9) - Math.Pow(x, 11) / Factorial(11) + Math.Pow(x, 13) / Factorial(13);
            double cos = 1 - Math.Pow(x, 2) / Factorial(2) + Math.Pow(x, 4) / Factorial(4) - Math.Pow(x, 6) / Factorial(6) + Math.Pow(x, 8) / Factorial(8) - Math.Pow(x, 10) / Factorial(10) + Math.Pow(x, 12) / Factorial(12);
            sin = Math.Round(sin, 4);
            cos = Math.Round(cos, 4);
 
            Console.WriteLine("Синус {0}", sin);
            Console.WriteLine("Косинус {0}",cos);
            
            Console.ReadLine();
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2015, 19:38
Ответы с готовыми решениями:

Нахождение sin и cos с использованием рядов Тейлора
Нужно создать калькулятор для подсчета sin и cos с помощью рядов Тейлора.Вводить нужно значения в...

Вычисление функции sin(х), cos(x), tan(x) для аргумента
Ребят всем привет. Очень нужна помощь в написании этой программы на C#. Кто может помочь?) 1....

Алгоритм sin cos
Пожалуйста помогите кто сможет....На форуме есть редактор форул.

Cos/Sin неправильно вычисляется
В общем проблема какая-то глупая и совсем неожиданная... Решил поизучать c#. Так как есть...

Калькулятор тригонометрических функций на основе рядов Тейлора
Как сделать так что бы перевод из градусов в радианы был в другом модуле ? public uint per...

9
tarasalk
1452 / 907 / 347
Регистрация: 13.06.2013
Сообщений: 3,140
04.04.2015, 20:51 2
Zyf21, чем это не устраивает?
0
Zyf21
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 170
04.04.2015, 21:02  [ТС] 3
tarasalk, когда запустил его решение, то оно тоже не точно считает при больших значениях.А при значении 90 градусов, оно вообще выдает неправильный результат.
0
Storm23
Эксперт .NETАвтор FAQ
9200 / 4449 / 1616
Регистрация: 11.01.2015
Сообщений: 5,683
Записей в блоге: 34
04.04.2015, 21:27 4
Лучший ответ Сообщение было отмечено Zyf21 как решение

Решение

Zyf21,
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
using System;
 
namespace ConsoleApplication175
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Console.WriteLine("Введите угол в градусах ");
            double k = double.Parse(Console.ReadLine());
            double x = k * Math.PI / 180;
 
            double sin = Sin(x);
            double cos = Cos(x);
            sin = Math.Round(sin, 4);
            cos = Math.Round(cos, 4);
 
            Console.WriteLine("Синус {0}", sin);
            Console.WriteLine("Косинус {0}", cos);
 
            Console.ReadLine();
            Console.ReadLine();
        }
 
        static double Sin(double x)
        {
            const int iterations = 30;
            var res = 0d;
            var pow = x;
            var sign = 1;
            
            for(int i=1;i<iterations;i++)
            {
                if (i % 2 == 1)
                {
                    res += pow * sign;
                    sign *= -1;
                }
                pow *= x / (i + 1);
            }
 
            return res;
        }
 
        static double Cos(double x)
        {
            const int iterations = 30;
            var res = 0d;
            var pow = 1d;
            var sign = 1;
 
            for (int i = 0; i < iterations; i++)
            {
                if (i % 2 == 0)
                {
                    res += pow * sign;
                    sign *= -1;
                }
                pow *= x / (i + 1);
            }
 
            return res;
        }
    }
}
3
04.04.2015, 21:27
Zyf21
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 170
04.04.2015, 21:54  [ТС] 5
Storm23, то что нужно.Огромное вам спасибо.Скажите пожалуйста, можно вам будет задавать вопросы по этой программе если я не разберусь как она работает?
0
Storm23
Эксперт .NETАвтор FAQ
9200 / 4449 / 1616
Регистрация: 11.01.2015
Сообщений: 5,683
Записей в блоге: 34
04.04.2015, 22:03 6
Цитата Сообщение от Zyf21 Посмотреть сообщение
можно вам будет задавать вопросы по этой программе если я не разберусь как она работает?
Можно, хотя она простейшая.
0
Zyf21
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 170
04.04.2015, 22:06  [ТС] 7
Storm23, ну, я новичок просто)
0
Zyf21
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 170
08.04.2015, 18:02  [ТС] 8
Storm23, скажите пожалуйста, а почему в этих строчках используется var а не например double.И почему после значений стоит буква d.
Цитата Сообщение от Storm23 Посмотреть сообщение
var res = 0d;
* * * * * * var pow = x;
* * * * * * var sign = 1;
0
Storm23
Эксперт .NETАвтор FAQ
9200 / 4449 / 1616
Регистрация: 11.01.2015
Сообщений: 5,683
Записей в блоге: 34
08.04.2015, 18:10 9
Цитата Сообщение от Zyf21 Посмотреть сообщение
Storm23, скажите пожалуйста, а почему в этих строчках используется var а не например double.
А вы читали что такое var?
Запись
C#
1
var res = 0d;
эквивалентна записи
C#
1
double res = 0d;
но первый вариант короче и легче может быть изменен. Например, если я захочу сделать не double, а float, я всего лишь поменяю в конце букву d на букву f. А слово var не изменится.
Кроме того, код становится более равномерным и читабельным.
Сравните:
C#
1
2
3
var res = 0d;
var pow = x;
var sign = 0M;
и
C#
1
2
3
double res = 0d;
int pow = x;
decimal sign = 0M;
Какой вариант красивее?
Цитата Сообщение от Zyf21 Посмотреть сообщение
И почему после значений стоит буква d.
Потому что постфикс d обозначает что константа типа double.
1
Zyf21
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 170
08.04.2015, 21:25  [ТС] 10
Storm23, большое спасибо.

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

0
08.04.2015, 21:25
StackOverflow
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2015, 21:25

Нужно запустить квадратики по линиям Sin , Cos
Только начал изучение си шарпа, не понимаю как запустить квадратики что бы двигались.

Написать ряд Тейлора для y=cos x
Нужно написать ряд Тейлора для y=cos x. Найдите сумму ряда с точность до epsilon

Вычисления Cos/Sin. Пример из книги дает другой результат
В общем проблема какая-то глупая и совсем неожиданная... Решил поизучать c#. Так как есть...


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

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

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