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

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

21.11.2020, 14:42. Показов 1073. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вычисление функции разложения в ряд. Вычислить и напечатать значения функции y = f (x) в точках x1, x2,…, xn, представляя функцию в виде ряда (без обращения к стандартным подпрограммам). Значения n и x1, x2,…, xn вводятся.
f(x)=e^(-x*x+1)
x1=-2.7
x2=0.1
x3=2.9
x4=-17
x5=117
n=5
eps=0.25;
В программе необходимо предусмотреть:

- ввод числа n; точность вычисления e задается в программе непосредственно;

- во внешнем цикле организуется ввод xi, образование аргумента для вычисления суммы, передача его во внутренний цикл, затем прием значения суммы, вычисление и печать значения функции f(xi);
- во внутреннем цикле значение суммы вычисляется приближенно: суммируются только такие члены, что |Si(x)| > eps.

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
#include<iostream>;
#include<cmath>;
using namespace std;
int main()
{
    setlocale(LC_ALL, "RUS");
    int n = 5;
    double eps=0.0001, t, x;
    for (int e = 1; e <= n; e++)
    {
        double sum = 0;
        cout << "введите x" << e << ' ';
        cin >> x;
        t = 1;
        int i = 0;
        while (abs(t) > eps)
        {
            sum = sum + t;
    
            i++;
            t = t * (-x*x+1) / i;
        }
        cout << "f(x" << e << ")= " << sum << endl;
    }
    return 0;
}
Мой код, но его проблема в том что он вычисляет правильно значения функции только для малых значений X(до 6)

Добавлено через 1 минуту
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
#include<iostream>;
#include<cmath>;
using namespace std;
int main()
{
setlocale(LC_ALL, "RUS");
int n = 5;
double eps=0.0001, t, x;
for (int e = 1; e <= n; e++)
{
double sum = 0;
cout << "введите x" << e << ' ';
cin >> x;
t = 1;
int i = 0;
while (abs(t) > eps)
{
sum = sum + t;
 
i++;
t = t * (-x*x+1) / i;
}
cout << "f(x" << e << ")= " << sum << endl;
}
return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.11.2020, 14:42
Ответы с готовыми решениями:

Вычисление значения функции заданной разложением в ряд Тейлора
Очень много времени ломаю голову, пока кое-как получилось вот такое: double i,j,n, x, ...

Вычисление значения функции заданной разложением в ряд Тейлора
Написать программу для вывода результата числовой последовательности S=1-(x^(2))/2 + (x^(4))/4 - …...

Вычисление значения функции заданной разложением в ряд Тейлора
Приветствую! Имеется задача-https://i m g u r . c o m /a/YyFxa9h (На E не обращайте внимание)...

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

7
_stanislav
21.11.2020, 14:44
  #2

Не по теме:

чем проще название темы, тем сложнее ее описание (в такие темы лучше вообще не заходить)

0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
21.11.2020, 14:49 3
Цитата Сообщение от YAR0k Посмотреть сообщение
для малых значений X(до 6)
Область сходимости ряда 0<x<2
С чего бы это получился правильный результат для 2<x<6 ?
Насколько я понимаю, это разложение логарифма в ряд Тейлора в точке x0=1.
Если нужно вычислить для x>2, то сначала нужно привести x к интервалу(0,2):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
double my_ln (double x)
{
    const double eps=1e-6;
    const double lnln=M_LN2; //ln2
    int k=0;
    while(x>2.0)
    { 
        x/=2.0;
        k++;
    }
    x-=1.;
    double s=0;
    int n=1;
    double an=x;
    while (fabs(an)>eps)
    {
        s+=an;
        ++n;
        an*=-x*(n-1)/n;
    }
    s+=k*lnln;
    return s;
}
См. Вычисление функций разложением в ряд Тейлора
0
1 / 2 / 0
Регистрация: 17.11.2020
Сообщений: 16
21.11.2020, 14:57  [ТС] 4
zss, Там в задаче разложение экспоненты в степени -x^2+1
1
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
21.11.2020, 16:22 5
Пардон, не разглядел факториала в знаменателе.
Возьмите меньшее значение eps, например 1e-10
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
21.11.2020, 17:26 6
YAR0k, такая же проблема (не работает с большими числами) встречалась при вычислении cos, пробовал разобраться, даже создавал тему на форуме, но ответа по существу не получил. решала вопрос строка x=x-int(x/2/M_PI)*2*M_PI; ( cos - функция периодическая, для exp скорее всего нужен другой подход )

чуть подправил Ваш код, чтобы выполнялись требования условия задачи:
Цитата Сообщение от YAR0k Посмотреть сообщение
В программе необходимо предусмотреть:
- ввод числа n;
Цитата Сообщение от YAR0k Посмотреть сообщение
во внешнем цикле организуется ввод xi, образование аргумента для вычисления суммы,
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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    int n, i;
    double eps=0.0001, x, t, ai, S;
    cout << "n="; cin >> n;
 
    for (int j = 1; j <= n; j++)
    {        
        cout << "x" << j << "="; cin >> x;
        S=0.;
        ai=1.;
        t=-x*x+1.;        
        i=0;
        while (fabs(ai) > eps)
        {
            S+=ai; 
            i++;
            ai*=t/i;
        }
        
        cout << "f(" << x << ")= " << S << "\n";
        // cout << "y(" << x << ")= " << exp(t) << "\n"; // для проверки
    }
    
system("pause");
return 0;
}
1
1 / 1 / 0
Регистрация: 27.10.2020
Сообщений: 100
14.02.2021, 19:37 7
А как это задание сделать через функцию?
То есть задать функцию, просто не могу понять
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,640
Записей в блоге: 13
14.02.2021, 20:35 8
Странная дискуссия тут развернулась... Откуда взяться логарифму? TC задал функцию https://www.cyberforum.ru/cgi-bin/latex.cgi?f(x)={e}^{(1-{x}^{2})}. Ее нужно разложить в ряд Тэйлора. Прежде чем программировать, нужно продифференцировать ее n раз, получить формулу производной n-го порядка.
0
14.02.2021, 20:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.02.2021, 20:35
Помогаю со студенческими работами здесь

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

Вычисление значения функции заданной разложением в ряд Тейлора
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int sum(double x, int n); int main()...

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

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

Вычисление значения функции заданной разложением в ряд Тейлора
есть сумма ln(3+x)=x-(x^2/2)+(x^3/3)-(x^4/4)+... x= как через while найти эту сумму? очень...

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


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

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