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

Ряды Тейлора

01.12.2009, 00:18. Показов 2695. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Еще раз всем здравствуйте.
Помогите пожалуйста решить такую задачу:
"Составить программу вычисления функции с использованием разложения в ряд. Суммирование прекращать, когда очередное слагаемое станет по модулю меньше заданной точности."
[IMG]http://i007.***********/0911/95/afb5af6380bf.jpg[/IMG] |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
#include <stdio.h>
#include <math.h>
#include <clocale>
#define pi 3.14;
#define _CRT_SECURE_NO_DEPRECATE 0
#define _CRT_SECURE_NO_WARNINGS 0
 
int n;
double x,e,S,y,sl;
 
int main() 
{
    setlocale(LC_ALL,"Russian");
    printf("Введите погрешность:");
    scanf ("%lf",&e);
    printf("Введите x:");
    scanf ("%lf",&x);
  for(n=1;abs(sl)>=e;n++)
        {
            sl=sl*(pow(2,n/2)*sin(pi*n/4))*pow(x,n)/n!;//не знаю как писать факториал=(
            S=S+sl;
        }
    y=pow(e,x)*sin(x);
    printf("%lf %d %lf %lf", x, n, S, y);
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.12.2009, 00:18
Ответы с готовыми решениями:

Ряды тейлора
Доброго времени суток. Подскажите пожалуйста, я не понимаю что от меня требуется в задаче, вот совсем. Понятно что будет цикл с...

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

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

10
paladin
 Аватар для Yurii_74
286 / 187 / 7
Регистрация: 25.02.2009
Сообщений: 589
01.12.2009, 09:01
Если проблема только в факториале, то напиши функцию.
C
1
2
3
4
5
int fact (int n)
{
  if (n==1) return (1);
  return (n*fact(n-1));
}
1
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 14
01.12.2009, 11:07  [ТС]
нет, проблема не только в факториале, S постоянно выводится равным нулю
0
377 / 228 / 79
Регистрация: 24.11.2009
Сообщений: 695
01.12.2009, 11:15
Цитата Сообщение от 3y6_DyIIJloBu4 Посмотреть сообщение
нет, проблема не только в факториале, S постоянно выводится равным нулю

определите переменные до начала цикла.
1
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 14
01.12.2009, 14:36  [ТС]
Я как раз и не знаю чему приравнять S до цикла). Не до конца я понимаю эти ряды...
Прошу помощи.
0
Эксперт по математике/физике
 Аватар для Том Ардер
4218 / 3418 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
01.12.2009, 15:10
Буквальный перевод математического выражения в программный код не есть хорошо. А здесь нужно ещё и упростить формулу, отдельно для чётных и нечётных n, (n = 2m, n = 2m+1). Потом ещё и для чётных и нечётных m. (Т.е. n = 4k+1, 4k+2, 4k+3. n = 4k вклада не дают). Слагаемые ряда вычислять рекуррентно. Факториал, степени вычислять не надо!
На форуме я уже не раз об этом отвечал. Пора, наверное, в FAQ выносить. Хотя, судя по вопросам, туда не часто смотрят.

А все переменные должны быть определены до того...

Добавлено через 7 минут
C
1
2
3
4
5
6
7
8
9
10
S = 0;
n = 1;
s1 = x; // текущее слагаемое
while( fabs(s1) > eps )
{
  // например, так. Для конкретного случая поправить
  S += s1;
  n++;
  s1 = s1 *x / (double)n;
}
1
377 / 228 / 79
Регистрация: 24.11.2009
Сообщений: 695
01.12.2009, 15:41
Том Ардер, перед тем как упрощать, нужно понимать что делаешь и как делаешь. А так же, что измениться при упрощении. Имхо: код должен сначала начать работать, а потом отимизироваться..
3y6_DyIIJloBu4, вот готовое решение, разберитесь в нём:
развернуть код.
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
#include <iostream>
#include <math.h>
double a(double x, int n);//вычисляет член ряда (то что справа от знака суммы)
int f(int n);//возвращает факториал от n
int main()
{
    double epsilon;
    printf("\nepsilon is:");
    scanf ("%lf",&epsilon);
    double x;
    printf("\nx is:");
    scanf ("%lf",&x);
 
    
    int n = 1;
    double summ = 0;
    while(a(x,n)>=epsilon)
    {
        summ += a(x,n);
        n++; 
    }
    printf("\nresult is:%lf %\n",summ);
    system("pause");
    return 0;
}
 
 
 
double a(double x, int n)
{
    return (pow(2,n/2)*sin(M_PI*n/4)*pow(x,n))/f(n);
}
 
 
 
int f(int n)
{
    return (n>1)?n*f(n-1):1;
}
1
Эксперт по математике/физике
 Аватар для Том Ардер
4218 / 3418 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
01.12.2009, 18:17
Цитата Сообщение от Vladimir. Посмотреть сообщение
Том Ардер, перед тем как упрощать, нужно понимать что делаешь и как делаешь. А так же, что измениться при упрощении. Имхо: код должен сначала начать работать, а потом отимизироваться..
3y6_DyIIJloBu4, вот готовое решение, разберитесь в нём:[SPOILER="развернуть код."][C]
Код, просто работающий, и код, дающий правильный результат - две большие разницы. Уверен, что предложенный код не проверялся на правильность, потому что в нём есть ошибки.

Об упрощении исходного выражения.
sin(pi*n/4) принимает лишь три значения (с точностью до знака): 0, 1, 1/корень(2). Нужно ли его вычислять? Рационально ли вычислять _целые_ степени функцией pow? А факториал легко приводит к переполнению целого.

Вот правильный код:

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 <math.h>
#include <iostream>
using namespace std;
 
int main()
{
    double  x, eps;
 
    cout << "x = ? ";
    cin >> x;
    cout << "eps = ? ";
    cin >> eps;
 
    double  x4 = 4*x*x*x*x;
    int     k2 = 1;     // 2k+1
    int     k4 = 1;     // 4k+1
    double  a = 1;      // главная часть текущего слагаемого
    double  t = 1. + x/double(k2)*(1. + x/double(k4+2));
    double  sum = 0;
 
    while( fabs(a*t) > eps )
    {
        t = 1. + x/double(k2)*(1. + x/double(k4+2));
 
        sum += a * t;
 
        k2 += 2;
        k4 += 4;
        a = -a * x4 / double((k4-3)*(k4-2)*(k4-1)*k4);
    }
    sum *= x;
 
    cout << sum << endl;
    cout << exp(x)*sin(x);
 
        system("pause");
        return 0;
}
2
Эксперт по математике/физике
 Аватар для Том Ардер
4218 / 3418 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
01.12.2009, 18:20
Приложение: то преобразование, о котором я начинал говорить

О факториалах:
https://www.cyberforum.ru/cpp-... 66018.html
Миниатюры
Ряды Тейлора  
1
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 14
03.12.2009, 20:25  [ТС]
Ув. Том Ардер, не могли бы вы объяснить строки с 14 по 31?
Спасибо.
0
Эксперт по математике/физике
 Аватар для Том Ардер
4218 / 3418 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
03.12.2009, 21:28
См. приложение
Вложения
Тип файла: zip zub.zip (76.6 Кб, 20 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.12.2009, 21:28
Помогаю со студенческими работами здесь

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

с++ ряды тейлора
Помогите решить. Вроде что-то набросал, но что-то не идет #include&lt;iostream&gt; #include&lt;math.h&gt; #include &lt;iomanip&gt; ...

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

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

Почему не работает программа? Ряды Тейлора
Подскажите, пожалуйста! Почему не считает в последнем значении (0.15) при промежутке от -0.95 до 0.15 с шагом 0.05 при любой...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru