Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
0 / 0 / 1
Регистрация: 05.10.2014
Сообщений: 62
1

Вычисление суммы ряда (разложение arctg) с заданной точностью

23.01.2015, 16:56. Показов 6250. Ответов 10
Метки нет (Все метки)

В приложении вычисляется математическая функция от заданного аргумента
с заданной точностью Ɛ с помощью бесконечного ряда Тейлора по формуле.
Вычисление самой функции реализуйте с помощью процедуры
В чём ошибка?
C#
1
2
3
4
5
6
7
8
9
10
11
12
    private void arctg(double x, double e, out double ress)
        {
            double summ = x; double sum = x;
            for (int n = 0; Math.Abs(summ) > e; n++)
            {
                summ = summ * (x * x / (2 * n * (2 * n + 1)));
                summ = -1 * summ;
                sum +=summ;
            }
            ress = sum;
 
        }
0
Миниатюры
Вычисление суммы ряда (разложение arctg) с заданной точностью  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2015, 16:56
Ответы с готовыми решениями:

Вычисление суммы сходящегося ряда с заданной точностью X^n/n
Люди подскажите как решить

Вычесление суммы ряда с заданной точностью е:
Известен алгоритм вычесление суммы ряда с заданной точностью е: СПравка:Требуется многократно...

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

Вычислить значение суммы членов бесконечного ряда с заданной точностью Е
1. Вычислить значение суммы членов бесконечного ряда с заданной точностью Е с использованием...

__________________

Записывайтесь на профессиональные курсы С#-разработчиков‌
10
Эксперт .NETАвтор FAQ
9852 / 4807 / 1730
Регистрация: 11.01.2015
Сообщений: 5,988
Записей в блоге: 34
23.01.2015, 17:10 2
C#
1
summ = summ * (x * x / (2 * n  + 3));
0
1724 / 1049 / 387
Регистрация: 13.06.2013
Сообщений: 3,571
23.01.2015, 17:18 3
Это одна большая ошибка, не имеющая ничего общего с примером.
Подсказки:
1)условия выхода из цикла
|sum-realSum|<e
где sum - это то что вы сложили за все итерации, т.е. сумма ряда
realSum - это реальное значение arctg(x)
e-это погрешность

2)формула подсчета суммы у вас неверная.
Storm23, у вас тоже странная, там другая написана.

3)out double ress
в данном случае гораздо логичней просто вернуть переменную ress.
C#
1
2
3
4
5
6
  private double arctg(double x, double e)
{
   //...считаем...
   
   return ress;
}
0
Эксперт .NETАвтор FAQ
9852 / 4807 / 1730
Регистрация: 11.01.2015
Сообщений: 5,988
Записей в блоге: 34
23.01.2015, 17:24 4
Цитата Сообщение от tarasalk Посмотреть сообщение
Это одна большая ошибка
Не, вы не правы, присмотритесь внимательнее. Там хоть и витеевато, но правильно написано.
0
1724 / 1049 / 387
Регистрация: 13.06.2013
Сообщений: 3,571
23.01.2015, 17:28 5
Storm23, смотрю внимательно.
В числителе формулы есть x^(2n+1). Смотри ваши формулы, не вижу этого. Что я не вижу не пойму?
А откуда 2n+3 взялось это вообще...вы формулы преобразуете в другой вид чтоли?
0
Эксперт .NETАвтор FAQ
9852 / 4807 / 1730
Регистрация: 11.01.2015
Сообщений: 5,988
Записей в блоге: 34
23.01.2015, 17:30 6
Цитата Сообщение от tarasalk Посмотреть сообщение
Что я не вижу не пойму?
А откуда 2n+3 взялось это вообще...вы формулы преобразуете в другой вид чтоли?
Вы невнимательно смотрите, автор считает не от первого члена а от второго. Отсюда и моя формула.
0
1724 / 1049 / 387
Регистрация: 13.06.2013
Сообщений: 3,571
23.01.2015, 18:04 7
Storm23, где от второго? в цикле n=0

Добавлено через 32 минуты
В общем не знаю по каким формулам вы считаете. Мой результат совпадает с реальным:
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
        static void Main(string[] args)
        {
            double x = 0.5;
            double e = 0.000000000000001;
 
            Console.WriteLine("вариант Storm23 {0}", arctg(x, e));
            Console.WriteLine("реальный {0}", Math.Atan(x));
            Console.WriteLine("вариант tarasalk {0}", myArctg(x, e));
 
            Console.Read();
        }
 
        public static double myArctg(double x, double e)
        {
            double sum = 0;
            double temp = 0;
            int n = 0;
            do
            {
                temp = (Math.Pow(-1, n) * Math.Pow(x, 2 * n + 1)) / (2 * n + 1);
                sum += temp;
                n++;
            }
            while (Math.Abs(temp) > e);
            return sum;
        }
 
        private static double arctg(double x, double e)
        {
            double summ = x;
            double sum = x;
            for (int n = 0; Math.Abs(summ) > e; n++)
            {
                summ = summ * (x * x / (2 * n + 3));
                summ = -1 * summ;
                sum += summ;
            }
            return sum;
        }
вариант Storm23 0,460344282619485
реальный 0,463647609000806
вариант tarasalk 0,463647609000806
0
Эксперт .NETАвтор FAQ
9852 / 4807 / 1730
Регистрация: 11.01.2015
Сообщений: 5,988
Записей в блоге: 34
23.01.2015, 18:20 8
Цитата Сообщение от tarasalk Посмотреть сообщение
вариант Storm23
Ну вообще то это не мой вариант, а автора А во-вторых, окончательно это должно выглядеть вот так:
C#
1
2
3
4
5
6
7
8
9
10
11
        private static double arctg(double x, double e)
        {
            double summ = x;
            double sum = x;
            for (int n = 0; Math.Abs(summ) > e; n++)
            {
                summ *= -1 * x * x;
                sum += summ / (2 * n + 3);
            }
            return sum;
        }
И этот метод считает быстрее вашего, поскольку не использует Pow.

Добавлено через 2 минуты
И кстати он еще и точнее...
0
1724 / 1049 / 387
Регистрация: 13.06.2013
Сообщений: 3,571
23.01.2015, 18:26 9
Storm23, во втором посте у вас другое было.
И кстати...вопрос оптимизации и переделки исходной формулы не стоял.
0
Эксперт .NETАвтор FAQ
9852 / 4807 / 1730
Регистрация: 11.01.2015
Сообщений: 5,988
Записей в блоге: 34
23.01.2015, 18:33 10
Цитата Сообщение от tarasalk Посмотреть сообщение
во втором посте у вас другое было.
Да немного другое. Потому что у автора еще одна ошибка была, которую я позже заметил
А вопрос оптимизации стоит всегда.
0
0 / 0 / 1
Регистрация: 05.10.2014
Сообщений: 62
24.01.2015, 16:05  [ТС] 11
Правильно было так
C#
1
2
3
4
5
6
7
8
9
10
11
  private void arctg(double x, double e, out double ress)
        {
            double summ = x; double sum = x;
            for (int n = 0; Math.Abs(summ) > e; n++)
            {   
 
                summ = summ * (x * x *(2*(n-1)+3)/ (2 * n + 3));
                summ = -1 * summ;
                sum +=summ;
            }
            ress = sum;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2015, 16:05

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

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

Составить алгоритм и программу нахождения суммы ряда с заданной точностью Е
Составить алгоритм и программу нахождения суммы ряда с заданной точностью Е. Использовать...

Вычисление ряда для приближенного значения arctg(X)
Дано вещественное число X (|X| &lt; 1) и натуральное число N . Найти значение выражения... ...

Вычислить с заданной точностью значение числа e, используя разложение в ряд
Вычислить с заданной точностью значение числа e, используя следующее разложение в ряд:  ...


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

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

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