Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/22: Рейтинг темы: голосов - 22, средняя оценка - 4.59
 Аватар для Studentka_MRTF
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 15

Вычислить и вывести на экран в виде таблицы значения функции arcsin(x), заданной с помощью ряда Тейлора

15.01.2013, 17:04. Показов 4729. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, лаба горит, пожалуйста, помогите, мой код неверный, может вы что придумаете

"Вычислить и вывести на экран в виде таблицы значения функции, заданной с по*
мощью ряда Тейлора, на интервале от дг га ч до #кон с шагом dx с точностью е. Таб*
лицу снабдить заголовком и шапкой. Каждая строка таблицы должна содержать
значение аргумента, значение функции и количество просуммированных чле*
нов ряда."

https://www.cyberforum.ru/cgi-bin/latex.cgi?\arcsin\left(x \right)=x+\sum_{n=1}^{\infty}\frac{1\cdot 3\cdot\dots\cdot\left(2n-1 \right)\cdot x^{2n+1}}{2\cdot 4\cdot\dots\cdot 2n\cdot\left(2n+1 \right)}=\\=x+\frac{x^3}{2\cdot 3}+\frac{1\cdot 3\cdot x^5}{2\cdot 4\cdot 5}+\frac{1\cdot 3\cdot 5\cdot x^7}{2\cdot 4\cdot 6\cdot 7}+\frac{1\cdot 3\cdot 5\cdot 7\cdot x^9}{2\cdot 4\cdot 6\cdot 8\cdot 9}+\dots\;,\;\left|x \right|\lt 1
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.01.2013, 17:04
Ответы с готовыми решениями:

Вычислить и вывести на экран в виде таблицы значения функции arcsin(x), заданной с помощью ряда Тейлора
Здраствуйте, помогите решить такую задачку на C#. Написать программу, которая вычисляет и выводит...

Вычислить и вывести на экран в виде таблицы значение функции arcsin(x), заданной с помощью ряда Тейлора
Решаю лабу, столкнулся с проблемой. Не могу допилить программу до конца, а точнее составить цикл. ...

Вычислить и вывести на экран в виде таблицы значения функции arcsin(x), заданной рядом Тейлора, на интервале
Вычислить и вывести на экран в виде таблицы значения функции, заданной с использованием ряда...

14
 Аватар для ITL
284 / 255 / 73
Регистрация: 17.07.2012
Сообщений: 618
15.01.2013, 17:31
Поиск существует для поиска...невероятно , да )
Буквально пару дней назад точно такую же задачу решали, пользуйтесь:
Вычислить и вывести на экран значения функции в виде таблицы, заданной с помощью ряда Тейлора
1
 Аватар для Studentka_MRTF
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 15
15.01.2013, 19:45  [ТС]
Это не мой вариант и решается он не так. Прежде чем обратится за помощью, я обыскала весь форум, пыталась написать сама, но не получается, поэтому и обратилась за помощью. Как программу написать я знаю, не могу описать саму функцию.
0
 Аватар для ITL
284 / 255 / 73
Регистрация: 17.07.2012
Сообщений: 618
15.01.2013, 20:06
Описан только сама функция вычисления, там уже разберетесь, как и куда её пристроить.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static void Main(string[] args)
        {
            int x = 1;
            int n = 5;
            double sum = 0;
            for (int i = 0; i < n; i++)
                sum += rec(2 * i) / (Math.Pow(4, i) * Math.Pow(rec(i), 2) * (2 * i + 1)) * Math.Pow(x, (2 * i + 1));
        }
        static int rec(int n)//вычисление факториала
        {
            if (n == 1 || n == 0)
                return 1;
            else
                return n * rec(n - 1);
        }
1
 Аватар для ITL
284 / 255 / 73
Регистрация: 17.07.2012
Сообщений: 618
15.01.2013, 20:13
P.S Вам преподаватель дал странную формулировку формулы. Весьма интересно он трактует факториал числа.
В общем вот вам нормальная формула.
Миниатюры
Вычислить и вывести на экран в виде таблицы значения функции arcsin(x), заданной с помощью ряда Тейлора  
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.01.2013, 20:14
ITL, уже пятый член содержит 10!, мне интересно, как вы будете считать, например, 30 слагаемых (это минимум сходимости), если учесть, что 60! не влезает даже в long, не то, что в int
0
 Аватар для ITL
284 / 255 / 73
Регистрация: 17.07.2012
Сообщений: 618
15.01.2013, 20:40
Psilon, я понимаю Вашу озабоченность такими делами.
Почитал википедию , каюсь, нужна функция в заданной точке. из +sum надо убрать плюсик, все правильно?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.01.2013, 20:43
ITL, еще раз: создаете рекуррентную формулу: и никаких страшных чисел не получится. Я думаю скоро представлю типовое проектное решение для решения подобных задач, сделаю класс, куда передается множитель прогрессии и проверочная функция, а он соответственно все это дело считает и выдает результат
0
 Аватар для ITL
284 / 255 / 73
Регистрация: 17.07.2012
Сообщений: 618
15.01.2013, 20:52
Psilon, я думаю тут корень проблем кроется в самом понимании ряда Тейлора и его применении, что для меня пока не ясно, вообще , как говориться : "пока не сядешь за руль , не поймешь, что такое водить машину"
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.01.2013, 20:57
ITL, посмотрите на решение той темы, на которую сами дали ссылку. Где там факториалы и возведение в степень? Да нигде. А за счет этого резко повышается количество значимых цифр, а значит, повышается точность результата, кроме того, возрастает скорость (факториал, особенно рекурсивный, вычисляется очень долго, например 71! на моем компе рекурсивный считался 1 минуту, а 72! - больше 15, 74! - 2 часа ждал, не дождался (core i7-3615qm)). В общем, мат. аппарат стоит применять во всех случаях, когда это возможно, потому что решение "в лоб" обычно самое глупое.
0
 Аватар для Studentka_MRTF
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 15
18.01.2013, 20:39  [ТС]
Ребят, вот попробовала сама реализовать. Считает неверно, может вы сможете увидеть ошибку.

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
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        { Console.Write("Введите начальное значение аргумента: ");
            double Xn = double.Parse(Console.ReadLine());
            Console.Write("Введите конечное значение аргумента: ");
            double Xk = double.Parse(Console.ReadLine());
            Console.Write("Введите шаг dx: ");
            double dx = double.Parse(Console.ReadLine());
            Console.Write("Введите точность: ");
            double eps = double.Parse(Console.ReadLine());
            int n, ch, zn;
            double result;
            double x = Xn;
            Console.WriteLine("Аргумент\tФункция\t\tКоличество слагаемых");
            Console.WriteLine();
            while (x <= Xk + dx)
                {
                n = 1;
                result =0;
                for (int i = 1; i < n; i++) ;
                ch = 2 * n - 1;
                zn = 2 * n;
 
                while (ch*(Math.Pow(x,2*n+1))/zn*(2*n+1)  > eps)
                {
                   result += (ch*(Math.Pow(x,2*n+1))/zn*(2*n+1));
                    n++;
                }
                Console.WriteLine("{0:f8}\t{1:f8}\t{2}", x, result, n);
                x += dx;
                }
            Console.ReadKey();
 
        }
    }
}

Код к первой картинке, которую я изначально просила помочь сделать.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.01.2013, 21:24
В принципе у меня есть готовый класс, написал специально для таких задач. Собственно, все, что нужно сделать, это передать 4 параметра функции, она сама все сделает:
параметр №1) параметры функции: её название, с какого и по какой x мы хотим иметь табличку, точность
параметр №2) a0, - первое число в последовательности. В вашем случае, как и в моем примере, это X
параметр №3) это зависимость вида https://www.cyberforum.ru/cgi-bin/latex.cgi?q = \frac{{a}_{n+1}}{{a}_{n}}, так называемый множитель прогрессии, отношение N+1-го члена к N-му.
параметр №4) точное значение функции в точке.

Вот пример использования
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
using System;
 
namespace TaylorTemplate
{
    internal class Program
    {
        private static void Main()
        {
            var func = new Taylor(new FunctionData(0, 0.9, 0.1, 0.00001, "Arth"), StartsWith, Multipler, Arth);
            foreach (string s in func.CalculateFunction())
                Console.WriteLine(s);
            Console.WriteLine("\n\nПрограмма завершена. Для выхода нажмите любую клавишу");
            Console.ReadKey();
        }
 
 
        private static double Multipler(double x, int n)
        {
            return x * x * (2 * n + 1) / (2 * n + 3);
        }
 
 
        private static double Arth(double x)
        {
            return Math.Log((1 + x) / (1 - x)) / 2;
        }
 
 
        private static double StartsWith(double x)
        {
            return x;
        }
    }
}
А ниже собственно код вспомогательного класса
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
66
67
68
69
70
71
72
73
74
75
76
77
78
using System;
using System.Collections.Generic;
 
namespace TaylorTemplate
{
    public struct FunctionData
    {
        public readonly double Epsilon;
        public readonly double Dx;
        public readonly double Start;
        public readonly double End;
        public readonly string Name;
 
 
        public FunctionData(double start, double end, double delta, double epsilon, string name)
        {
            if (start >= end)
                throw new ArgumentOutOfRangeException("end");
            if (delta >= (end - start))
                throw new ArgumentOutOfRangeException("delta");
            Start = start;
            End = end;
            Dx = delta;
            Epsilon = epsilon;
            Name = name;
        }
    }
 
 
    public class Taylor
    {
        private readonly FunctionData functionData;
        private readonly Func<double, int, double> multipler;
        private readonly Func<double, double> etalon;
        private readonly Func<double, double> startsWith;
 
 
        public Taylor(FunctionData functionData, Func<double, double> startsWith, Func<double, int, double> multipler,
                      Func<double, double> etalon)
        {
            this.functionData = functionData;
            this.startsWith = startsWith;
            this.multipler = multipler;
            this.etalon = etalon;
        }
 
 
        public IEnumerable<string> CalculateFunction()
        {
            int iters;
            yield return string.Format("Рассчет функции: {0}\nС точностью {1} и шагом {2}\nВ диапазоне [{3},{4}]\n\n",
                                       functionData.Name,
                                       functionData.Epsilon,
                                       functionData.Dx,
                                       functionData.Start,
                                       functionData.End);
            yield return string.Format("Приближенное значение\t\tТочное значение\t\t\tСлагаемых");
            for (double x = functionData.Start; x < functionData.End; x += functionData.Dx)
                yield return
                    string.Format("{0,-25}\t{1,-25}\t{2}", F(x, functionData.Epsilon, out iters), etalon(x), iters);
        }
 
 
        private double F(double x, double eps, out int i)
        {
            if (Math.Abs(x) >= 1) throw new ArgumentOutOfRangeException("x");
            i = 0;
            double result = 0, lastresult = double.MinValue, summand = startsWith(x);
            for (; Math.Abs(result - lastresult) >= eps; i++)
            {
                lastresult = result;
                result += summand;
                summand *= multipler(x, i);
            }
            return result;
        }
    }
}
1
 Аватар для Studentka_MRTF
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 15
18.01.2013, 22:29  [ТС]
Да мне бы со своим кодом разобраться. Дело в том, что это лабораторная работа и у всей группы однотипные задания, только уравнения разные, и необходимо реализовать это примерно в таком виде, как я показала. Мне просто бы найти ошибку и исправить её, если кого не затруднит, помогите, пожалуйста.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.01.2013, 02:36
Studentka_MRTF, я знаю, что задания однотипные, потому кстати и написал эту абстракцию, чтобы вместо переписывания большой кучи кода нужно было изменить 4 строки: методы startsWith, Multipler и Arth (в вашем случае последний метод - arcsin(x)) ну и по желанию - другие параметры, вроде желаемой точности и прочего.

Добавлено через 24 минуты
Ну вот, серия небольших вычислений (начиная с такого монстра, как вот такой:
(2(n+1)! * x^(2(n+1)+1)/((4^(n+1))*(((n+1)!)^2)*(2(n+1)+1)))/(2n! * x^(2n+1)/((4^n)*((n!)^2)*(2n+1)))
выявила вот такую зависимость: http://wolfr.am/VxNPbL
q = ((1+2 n) x^2)/(4 (1+n) (3+2 n))
Ну а дальше это в код пихаем и немного переписываем вызывающую часть:
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
using System;
 
namespace TaylorTemplate
{
    internal class Program
    {
        private static void Main()
        {
            var func = new Taylor(new FunctionData(0, 0.9, 0.1, 0.00001, "Asin"), StartsWith, Multipler, Arth);
            foreach (string s in func.CalculateFunction())
                Console.WriteLine(s);
            Console.WriteLine("\n\nПрограмма завершена. Для выхода нажмите любую клавишу");
            Console.ReadKey();
        }
 
 
        private static double Multipler(double x, int n)
        {
            return ((1 + 2 * n) * x * x) / (4 * (1 + n) * (3 + 2 * n));
        }
 
 
        private static double Arth(double x)
        {
            return Math.Asin(x);
        }
 
 
        private static double StartsWith(double x)
        {
            return x;
        }
    }
}
Правда погрешность какая-то слишком большая. Не могу найти этому причины

Добавлено через 14 минут
В общем коэф. подобран неправильно, надо думать, в чем там ошибка

Добавлено через 17 минут
Нашел множитель (не без помощи тетрадки, ручки и головы, хехе)
http://wolfr.am/Wc1VNA
q = (4-2/(n+1))*(x^2)*(2n+1)/(4*(2n+3))
то есть
an+1=an*q;
ну а дальше остается записать это в программу

Добавлено через 1 минуту
C#
1
2
3
4
        private static double Multipler(double x, int n)
        {
            return (4 - 2.0 / (n + 1)) * (x * x) * (2.0 * n + 1) / (4 * (2 * n + 3));
        }
Теперь погрешность в пределах нормы

Добавлено через 3 минуты
Надеюсь вам помогло, и ход решения ясен
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.01.2013, 04:13
Вот проект с итоговым решением, если интересно
Вложения
Тип файла: rar TaylorTemplate.rar (29.3 Кб, 27 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.01.2013, 04:13
Помогаю со студенческими работами здесь

Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора
Помогите пожалуйста, уже мучаюсь 3-ю неделю, расхождение получается большое. Задание: Вычислить...

Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора
Я студентка первого курса и (если честно) слабо понимаю то, что изучаю,но всё же =) помогите если...

Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора
Задание: Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда...

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru