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

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

10.11.2020, 19:13. Показов 1368. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Помогите пожалуйста найти ошибки в данной программе.
У меня она будто не видит cout и скорее всего где-то внутри есть ошибка с расчётами. Сижу уже пару недель, но никак не могу найти.

Вот задание полностью:
Составить программу для вычисления функции c помощью разложения в ряд. Вычислить и вывести на экран в виде таблицы значения функции на интервале от xn до xk с шагом dx с точностью eps.        

Для вычисления последующего члена ряда воспользоваться рекуррентной формулой Cn+1=Cn*T, где T - некоторый множитель.

Предусмотреть максимальное количество итераций = 500.

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
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
 
int main()
{
    setlocale(0, "Russian");
    float x, Xn, Xk, dx, eps, F, mathF, x0, n;
    do
    {
        cout << "Введите начальное и конечное x " << endl;
        cin >> Xn >> Xk;
    } 
    while (Xn >= -1 && Xn <= Xk && Xk < 1);
    cout << "Введите экспоненту "; cin >> eps;
    cout << "Введите шаг "; cin >> dx;
    for (x = Xn; x <= Xk; x += dx)
    {
        mathF = log(1 - x);
        F = 0;
        x0 = 0;
        n = 0;
        F += x0;
        while (fabs(x) > eps || n < 500)
        {
            x0 *= pow(x, n + 1) / (n + 1);
            F += x0;
            n++;
        }
        cout << "|" << setw(12) << x << setw(12) << "|" << setw(12) << F << setw(12) << "|" << setw(12) << n
            << setw(12) << "|" << setw(12) << mathF << setw(12) << "|" << endl;
    }
 
    return 0;
}
Миниатюры
Вычисление значения функции заданной разложением в ряд Тейлора  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.11.2020, 19:13
Ответы с готовыми решениями:

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

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

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

8
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,243
10.11.2020, 19:19
Elsato,
У Вас a1 по формуле равно x, а в программе равно нулю.
Далее an+1=an*x*n/(n+1)
а в программе, почему-то
an+1=an*xn/(n+1)
Что-то с арифметикой Вы не дружите!
См. Вычисление функций разложением в ряд Тейлора
1
0 / 0 / 0
Регистрация: 07.10.2020
Сообщений: 6
11.11.2020, 17:57  [ТС]
Спасибо за помощь, но данная программа не выводит конец (скрин прикреплю). Можете подсказать, в чём причина?
Изображения
 
0
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,257
11.11.2020, 18:05
Не забывайте прикладывать код и пользоваться дебаггером.

Добавлено через 1 минуту
n в программе не дробное, а целое. Вот так напишите
C++
1
2
3
int n;
 
n = 1;
1
0 / 0 / 0
Регистрация: 07.10.2020
Сообщений: 6
11.11.2020, 18:26  [ТС]
Вот код, проблема осталась.
С дебаггером до этого не работал, поэтому не до конца понял, как его использовать

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
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
 
int main()
{
    setlocale(0, "Russian");
    float x, Xn, Xk, dx, eps, F, mathF, x0;
    int n;
    do
    {
        cout << "Введите начальное и конечное x " << endl; cin >> Xn >> Xk;
    } 
    while (Xn >= -1 && Xn <= Xk && Xk < 1);
    cout << "Введите экспоненту "; cin >> eps;
    cout << "Введите шаг "; cin >> dx;
    for (x = Xn; x <= Xk; x += dx)
    {
        mathF = log(1 - x);
        F = x;
        x0 = 0;
        n = 1;
        F += x0;
        while (fabs(x) > eps || n < 500)
        {
            x0 *= x * n / (n + 1);
            F += x0;
            n++;
        }
        cout << "|" << setw(12) << x << setw(12) << "|" << setw(12) << F << setw(12) << "|" << setw(12) << n
            << setw(12) << "|" << setw(12) << mathF << setw(12) << "|" << endl;
    }
 
    return 0;
}
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,243
11.11.2020, 18:29
Цитата Сообщение от Elsato Посмотреть сообщение
while (Xn >= -1 && Xn <= Xk && Xk < 1);
C++
1
while (Xn <-1 || Xn > Xk || Xk > 1);
Цитата Сообщение от Elsato Посмотреть сообщение
while (fabs(x) > eps || n < 500)
C++
1
while (fabs(x0) > eps && n < 500)
Исправленный код
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
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
 
int main()
{
    setlocale(0, "Russian");
    double x, Xn, Xk, dx, eps, F, mathF, x0;
    int n;
    do
    {
        cout << "Введите начальное и конечное x " << endl; 
        cin >> Xn >> Xk;
    } while (Xn < -1 || Xn > Xk || Xk >= 1);
    cout << "Введите Точность "; 
    cin >> eps;
    cout << "Введите шаг "; 
    cin >> dx;
    cin.get();
    for (x = Xn; x <= Xk+eps; x += dx)
    {
        mathF = log(1. - x);
        x0 = x;
        n = 1;
        F = x0;
        while (fabs(x0) > eps && n < 500)
        {
            x0 *= x * n / (n + 1);
            F += x0;
            n++;
        }
        F = -F;
        cout << setw(8) << x << setw(10) << F << setw(10) << mathF<< setw(6) << n << endl;
    }
    cin.get();
    return 0;
}
1
0 / 0 / 0
Регистрация: 07.10.2020
Сообщений: 6
11.11.2020, 18:35  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
А Вы точно задаете интервал x в диапазоне (-1,1)?
Тогда выдаёт вот так.
Миниатюры
Вычисление значения функции заданной разложением в ряд Тейлора  
0
 Аватар для FFPowerMan
2156 / 1236 / 508
Регистрация: 11.10.2018
Сообщений: 6,257
11.11.2020, 18:46
Лучший ответ Сообщение было отмечено Elsato как решение

Решение

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
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
 
int main()
{
    setlocale(0, "Russian");
    int n;
    double x, Xn, Xk, dx, eps, F, mathF, x0, p;
    
    /*
    do
    {
        cout << "Ââåäèòå íà÷àëüíîå è êîíå÷íîå x " << endl;
        cin >> Xn >> Xk;
    } 
    while(Xn >= 1 || Xn >= Xk || Xk >= 1);
    */
    Xn = -1;
    Xk = 0.9;
    
    //cout << "Ââåäèòå ýêñïîíåíòó "; cin >> eps;
    eps = 1e-3;
    
    //cout << "Ââåäèòå øàã "; cin >> dx;
    dx = 0.1;
    
     
    cout << "|   x    |        F       |    n      |     mathF      |\n";
    for(x = Xn; x < (Xk+dx/2); x += dx)
    {
        mathF = log(1 - x);
        F = 0;  //Sum
        x0 = 2;
        n = 1;
        p = x;
        
        while(fabs(x0)>eps && n<500)
        {
            x0 = (double)p/n;
            F += x0;
            p *= x;
            n++;
        }
        F = -F;
        cout << "|  " << setw(5) << x << setw(12)
             << "  |  " << F
             << "  |  " << n
             << "  |  " << mathF
             << "  |  \n";
    }
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 07.10.2020
Сообщений: 6
11.11.2020, 19:01  [ТС]
Цитата Сообщение от FFPowerMan Посмотреть сообщение
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
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
 
int main()
{
    setlocale(0, "Russian");
    int n;
    double x, Xn, Xk, dx, eps, F, mathF, x0, p;
    
    /*
    do
    {
        cout << "Ââåäèòå íà÷àëüíîå è êîíå÷íîå x " << endl;
        cin >> Xn >> Xk;
    } 
    while(Xn >= 1 || Xn >= Xk || Xk >= 1);
    */
    Xn = -1;
    Xk = 0.9;
    
    //cout << "Ââåäèòå ýêñïîíåíòó "; cin >> eps;
    eps = 1e-3;
    
    //cout << "Ââåäèòå øàã "; cin >> dx;
    dx = 0.1;
    
     
    cout << "|   x    |        F       |    n      |     mathF      |\n";
    for(x = Xn; x < (Xk+dx/2); x += dx)
    {
        mathF = log(1 - x);
        F = 0;  //Sum
        x0 = 2;
        n = 1;
        p = x;
        
        while(fabs(x0)>eps && n<500)
        {
            x0 = (double)p/n;
            F += x0;
            p *= x;
            n++;
        }
        F = -F;
        cout << "|  " << setw(5) << x << setw(12)
             << "  |  " << F
             << "  |  " << n
             << "  |  " << mathF
             << "  |  \n";
    }
 
    return 0;
}
Спасибо большое вам.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.11.2020, 19:01
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru