Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 11.04.2021
Сообщений: 28
1

Вывести таблицу значений функции заданной разложением в ряд Тейлора

13.04.2021, 12:13. Показов 435. Ответов 5
Метки с++ (Все метки)

Author24 — интернет-сервис помощи студентам
Вывести таблицу значений функции заданной разложением в ряд Тейлора


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
#include <iomanip>
 
using namespace std;
 
double foo (int, int, int)
 
int main () {
    int dx, X1, X2, eps;
    cout << "Enter values for X1, X2, dx and eps" << endl;
    cin >> X1; X2; dx; eps;
    cout << setprecision(eps);
    cout << "Table of results" << endl;
    cout << "X1" << "\t" << "Result" << endl;
    foo(X1, X2, dx);
}
 
double foo(int X1, int X2, int dx) {
    
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2021, 12:13
Ответы с готовыми решениями:

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

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

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

Вывести таблицу значений функции заданной разложением в ряд Тейлора
Здравствуйте. Переведите из Pascal в С++, пожалуйста. var     x0, xk, dx, e, x, a, s: real;...

5
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,715
13.04.2021, 14:22 2
Формула неправильная
Нужно
https://www.cyberforum.ru/cgi-bin/latex.cgi?arcsin(x)=\sum_{n=0}^{\infty}\frac{(2n-1)!!{x}{2n+1}}{(2n)!!(2n+1)}
См. Вычисление функций разложением в ряд Тейлора
У Вас
A0=x;
https://www.cyberforum.ru/cgi-bin/latex.cgi?{A}_{n}={A}_{n-1}\frac{{x}^{2}(2n-3)(2n-1)}{2n(2n+1)}
0
0 / 0 / 0
Регистрация: 11.04.2021
Сообщений: 28
13.04.2021, 19:21  [ТС] 3
Да формула вроде как правильная, мне нужно ее в код прописать, не совсем понимаю как. Я уже начала писать, и вот дошла до момента, что нужно прописать и не знаю как..

Добавлено через 4 часа 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
#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
#include <iomanip>
 
using namespace std;
 
double foo(int, int, int);
 
int main () {
    int dx, X1, X2, eps;
    cout << "Enter values for X1, X2, dx and eps" << endl;
    cin >> X1; X2; dx; eps;
    cout << setprecision(eps);
    cout << "Table of results" << endl;
    cout << "X1" << "\t" << "Result" << endl;
    foo(X1, X2, dx);
}
 
double foo(int X1, int X2, int dx) {
    double x = 1, f1 = 1;
    for (X1; X1 <= X2; X1 += dx) {
        f1 += (2 * static_cast<_int64>(X1) - 1) * pow(x, (2 * X1 + 1)) /  ;  // тут вообще не знаю что делать
        x = f1;
        cout << X1 << "\t" << f1 << endl;
    }
    return f1;
}
0
440 / 283 / 183
Регистрация: 23.06.2018
Сообщений: 651
13.04.2021, 23:39 4
Цитата Сообщение от Wooker Посмотреть сообщение
cin >> X1; X2; dx; eps;
cin >> X1 >> X2 >> dx >> eps;
А также очень важный вопрос... Что у вас за жуткая смесь вычисления arcsin(x) и таблицы значений arcsin от X1 до X2 с шагом dx???
0
0 / 0 / 0
Регистрация: 11.04.2021
Сообщений: 28
13.04.2021, 23:45  [ТС] 5
Я очень плохо пока разбираюсь в коде, поэтому и прошу помощи

Добавлено через 2 минуты
Особенно там где факториал (
0
440 / 283 / 183
Регистрация: 23.06.2018
Сообщений: 651
14.04.2021, 01:34 6
Мда... Кто бы мог подумать что я так глупо попадусь на незнании мат. анализа. К сожалению, проблемы есть не только у вашего кода, но и у вашего задания.
С английской википедии:
https://www.cyberforum.ru/cgi-bin/latex.cgi?arcsin(x)=\sum_{0}^{\infty}\frac{\left(2n-1\right)!!}{\left(2n\right)!!}\frac{{x}^{2n+1}}{2n+1}
Похоже, не правда ли? Только скобок не хватает и факториал двойной. А ваша формула уходит в бесконечность примерно на x=0.3.
Это о задании. О вашем коде:
1. Вы могли заметить что n идёт до бесконечности. А значит при вычислении вам нужно не функции степени и факториала вызывать, а постепенно вычислять это вручную, до достижения необходимой точности.
2. Раз нужно достичь какой-то точности, то нужен реальный эпсилон, а не кол-во знаков. eps=pow(0.1, precision)
3. Так как у вас условие |x| < 1, то в целых числах у вас для этого подходит только 0. Следовательно, для X вам нужен тип float или double.
4. setprecision влияет на точность после запятой только если у вас форматирование вещественных чисел = fixed.
5. Наконец, раз уж вы подключили манипуляторы, то используйте setw вместо табуляции, так как последняя сломает шапку таблицы при высокой точности.
Итого как-то так:
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
#include <iostream>
#include <iomanip>
#include <cmath>
 
using namespace std;
 
void foo(double, double, double, int);
double bar(double, double);
 
int main()
{
    double dx, X1, X2;
    int prec, space;
    cout << "Enter values for X1, X2, dx and precision" << endl;
    cin >> X1 >> X2 >> dx >> prec;
    space = prec + 4;
    cout << left << fixed << setprecision(prec);
    cout << "Table of results" << endl;
    cout << setw(space) << "X1" << setw(space) << "Result" << setw(space) << "Real result" << endl;
    foo(X1, X2, dx, prec);
}
 
void foo(double X1, double X2, double dx, int prec)
{
    double eps = pow(0.1, prec); // можно повысить prec для повышения точности
    int space = prec + 4;
    for (X1; X1 <= X2; X1 += dx)
        cout << setw(space) << X1 << setw(space) << bar(X1, eps) << setw(space) << asin(X1) << endl;
}
 
double bar(double x, double eps)
{
    const size_t maxn = 1e7; // спасаемся от бесконечного цикла при слишком большой точности
    double f = x, add = x, padd = -1;
    x = x * x;
    for (size_t n = 2; abs(add - padd) >= eps && n < maxn; n += 2) // на самом деле тут хранится 2n, а не n
    {
        padd = add;
        add *= x * (n - 1) / n;
        f += add / (n + 1);
    }
    return f;
}
0
14.04.2021, 01:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2021, 01:34
Помогаю со студенческими работами здесь

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

Вывести таблицу значений функции заданной разложением в ряд Тейлора
Помню делал подобное через do while, но совсем понятно уже за что отвечает функция y = sin x Если...

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

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

Вывести таблицу значений функции заданной разложением в ряд Тейлора
Дословно задание звучит так: &quot;Вычислить и вывести на экран в виде таблицы значения функции,...

Вывести таблицу значений функции заданной разложением в ряд Тейлора
Вычислить и вывести на экран значение функции F(x) на отрезке с шагом h=0.1 и точностью s. ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru