Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304

Проверьте пожалуйста правильный ли следующий код: вычисление exp(x) и exp(-x)

24.07.2012, 16:33. Показов 2642. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго время суток! Проверьте пожалуйста правильный ли следующий код
exp(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
#include <cmath>
#include <iostream>
#include <cstdlib>
using namespace std;
 
double my_abs(double val)
{
    double ret = val;
    if(val < 0)
        ret *= -1;
    return ret;
}
 
double Taylor(double x, double e, long &n)
{
    double sum = 0;
    double an = 1;
    n = 1;
    do
    {
        sum += an;
        n   += 1;
        an *= x/(1.0*n);
    }
    while(e <= my_abs(an));
    return sum;
    
}
 
int main()
{
    long n;
    double xn, xk, dx, e;
    cout<<"xn = ";cin>>xn;
    cout<<"xk = ";cin>>xk;
    cout<<"dx = ";cin>>dx;
    cout<<" e = ";cin>>e;
    cout<<"|  x  |  Sum  |   N   |\n";
    while(xn <= xk)
    {
        cout<<xn<<" | "<<Taylor(xn, e, n)<<" |  ";
        cout<<n<<endl;
        xn = xn + dx;
    }
    system("pause");
    return 0;
}
и exp(-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
#include <cmath>
#include <iostream>
#include <cstdlib>
using namespace std;
 
double my_abs(double val)
{
    double ret = val;
    if(val < 0)
        ret *= -1;
    return ret;
}
 
double Taylor(double x, double e, long &n)
{
    double sum = 0;
    double an = 1;
    n = 1;
    do
    {
        sum += an;
        n   += 1;
       an *= (-1)*x/(1.0*n);
    }
    while(e <= my_abs(an));
    return sum;
    
}
 
int main()
{
    long n;
    double xn, xk, dx, e;
    cout<<"xn = ";cin>>xn;
    cout<<"xk = ";cin>>xk;
    cout<<"dx = ";cin>>dx;
    cout<<" e = ";cin>>e;
    cout<<"|  x  |  Sum  |   N   |\n";
    while(xn <= xk)
    {
        cout<<xn<<" | "<<Taylor(xn, e, n)<<" |  ";
        cout<<n<<endl;
        xn = xn + dx;
    }
    system("pause");
    return 0;
}
Заранее огромное спасибо!!!

Добавлено через 45 минут
Никто не может подсказать????
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.07.2012, 16:33
Ответы с готовыми решениями:

Ввести exp(2), exp(3) , exp(1). pi^2 c консоли
Требуется ввести экспоненту и число пи в степенях с клавиатуры.

Java. Рекурсивный метод вычисления 10*x + exp(x) + exp(-x)
Целью задания было написать 3 метода для вычисления 10*x + exp(x) + exp(-x) (1 встроеным методом, 2 при помощи ряда тейлора циклом и...

Доказать |exp (z)|=e^(Re z), a Arg(exp(z)=Im(z)+2*pi*k, k є Z
|exp (z)|=e^(Re z), a Arg(exp(z))=Im(z)+2*pi*k, k є Z

12
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
24.07.2012, 17:27
А что проверить то надо - чего надо добиться от программы?
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304
24.07.2012, 22:21  [ТС]
Проверить нужно правильно ли программы вычисляют exp(x) и exp(-x)?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
25.07.2012, 21:01
isaak, у тебя есть код для экспонеты exp(x), для exp(-x) не надо ничего придумывать, просто надо воспользоваться свойством показателя степени - а именно отриц степень это тоже число в положительной степени но в знаменателе, т.е exp(-x) = 1/exp(x) и всё
1
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.07.2012, 21:14
isaak, оба варианта не верны. Во первых, считает неверно, не такое начальное условие. Надо так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double Taylor(double x, double e, long &n)
{
    double sum = 0;
    double an = 1;
    n = 0;
    do
    {
        sum += an;
        n   += 1;
        an *= x/(1.0*n);
    }
    while(e <= my_abs(an));
    return sum;
}
Во вторых, намешали точность и количество членов ряда. Ваш алгоритм идет до тех пор, пока очередной член ряда не станет меньше e, но это не оценка остатка. Я бы по-другому алгоритм написал. А про exp(-x) вам правильно подсказывают, но опять же, exp(-x) можно уже с наперед заданной точностью считать, так как ряд станет рядом Лейбница.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
25.07.2012, 21:25
Чем просить "проверить" - вычисли стандартную экспоненту и сравни со своей...
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
25.07.2012, 21:30
Расчёт рекуррентного сомножителя(итератора)
https://www.cyberforum.ru/cgi-bin/latex.cgi?{e}^{x} = 1 + x + \frac{{x}^{2}}{2!} + \frac{{x}^{3}}{3!} + ...
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n} = \frac{{x}^{n}}{n!}
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n + 1} = \frac{{x}^{n + 1}}{(n + 1)!}
https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n + 1}}{{a}_{n}} = \frac{ \frac{{x}^{n + 1}}{(n + 1)!}}{\frac{{x}^{n}}{n!}} = x*\frac{n!}{(n+1)!} = \frac{x}{n + 1}
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
25.07.2012, 21:31
Вот сам код и отработка
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
#include <cmath>
#include <iostream>
using namespace std;
 
double my_abs(double val)
{
    double ret = val;
    if(val < 0)
        ret *= -1;
    return ret;
}
 
double Taylor(double x, double e, long &n)
{
    double sum = 1 + x;
    double an  = x;
    for(n = 1;e <= my_abs(an);n++)
    {
        an *= x/(1.0*(n + 1));
        sum += an;
    }
    return sum;
    
}
 
int main()
{
    long n = 0;
    double x, xn, xk, dx, e;
    cout<<"xn = ";cin>>xn;
    cout<<"xk = ";cin>>xk;
    cout<<"dx = ";cin>>dx;
    cout<<" e = ";cin>>e;
    cout<<"exp(x) : ["<<xn<<";"<<xk<<"]\n";
    cout<<"----------------------------------\n";
    cout<<"|  x \t|   Sum   | cmath   |  N  |\n";
    cout<<"----------------------------------\n";
    for(x = xn;x <= xk; x = x + dx)
    {
        cout<<x<<"\t| "<<Taylor(x, e, n)<<" | ";
        cout<<exp(x)<<" | "<<(n = n + 1)<<"\t| "<<endl;
    }
    cout<<"exp(-x) : ["<<xn<<";"<<xk<<"]\n";
    cout<<"----------------------------------\n";
    cout<<"|  x \t|   Sum   | cmath   |  N  |\n";
    cout<<"----------------------------------\n";
    for(x = xn;x <= xk; x = x + dx)
    {
        cout<<-x<<"\t| "<<1/Taylor(x, e, n)<<" | ";
        cout<<exp(-x)<<" | "<<(n = n + 1)<<"\t| "<<endl;
    }
    system("pause");
    return 0;
}
Миниатюры
Проверьте пожалуйста правильный ли следующий код: вычисление exp(x) и exp(-x)  
1
25.07.2012, 21:32

Не по теме:

Thinker, не узнал тебя по аве:)
Давно не пересекались на форуме, как поживаешь?

0
25.07.2012, 21:37

Не по теме:

нормально, -=ЮрА=-, спасибо:)

0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304
25.07.2012, 22:27  [ТС]
-=ЮрА=- спасибо огромное за ответ
https://www.cyberforum.ru/cgi-bin/latex.cgi?{e}^{x} = 1 + x + \frac{{x}^{2}}{2!} + \frac{{x}^{3}}{3!} + ... - это понятно
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n} = \frac{{x}^{n}}{n!} - это понятно
Объясни пожалуйста, почему ты взял следующее слагаемое
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n + 1} = \frac{{x}^{n + 1}}{(n + 1)!} ??????
а не предыдущее
https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n + 1}}{{a}_{n}} = \frac{ \frac{{x}^{n + 1}}{(n + 1)!}}{\frac{{x}^{n}}{n!}} = x*\frac{n!}{(n+1)!} = \frac{x}{n + 1}?????
И почему у тебя:
C++
1
2
double sum = 1 + x;
    double an  = x;
???? Заранее огромное спасибо!!!!
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
26.07.2012, 09:26
Смотри 1-ца это x^0/0!, затем идёт x^1/1, т.е a[n] = x^1/1 = x при этом само n = 1 вот и начало цикла
C++
1
2
3
4
5
for(n = 1;e <= my_abs(an);n++)
{
        an *= x/(1.0*(n + 1));
        sum += an;
}
При этом если начинать с нуля n=0: a[n] = x^0/0! = 1 то мое сравнение my_abs(an) всегда отработает и мы попадём в цикл и делаем в нём по крайней мере 1-ну итерацию(т.е всё равно попадаем на a[1]). Получается суть такая - мы всегда при точности на порядок ниже единицы просчитаем два первых слагаемых {x^0/0! = 1} + {x^1/1! = x} поэтому я сразу сумму такой и сделал
C++
1
double sum = 1 + x;
Добавлено через 9 минут
На счёт следующего или предыдущего слагаемого да не вопрос смотри
Введём обозначение m = n + 1 тогда
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{m} = \frac{{x}^{m}}{m!}
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{m - 1} = \frac{{x}^{m - 1}}{(m - 1)!}
https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{m}}{{a}_{m - 1}} = \frac{\frac{{x}^{m}}{m!}}{\frac{{x}^{m - 1}}{(m - 1)!}}
https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{m}}{{a}_{m - 1}} = x*\frac{(m - 1)!}{m!} = \frac{x}{m}
Подставляя в последнюю формулу m = n + 1 в итоге получим
https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n + 1}}{{a}_{n}} =  \frac{x}{n + 1}
Данную формулу мы получили вверху.
От себя добавлю для однозначности лучше всегда рассматривать n и n + 1 члены
1
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,304
26.07.2012, 14:28  [ТС]
-=ЮрА=- спасибо огромное за ответ, но все равно не понятно почему для
https://www.cyberforum.ru/cgi-bin/latex.cgi?cos(x)=\sum \frac{{(-1)}^{n}*{x}^{2*n}}{(2n)!}
Сразу же берем отношение
данного слагаемого-https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n}=\frac{{(-1)}^{n}*{x}^{2n}}{(2n)!}=\frac{{(-1)}^{n}*{x}^{(2n)}}{(2n)*(2n-1)*(2n-2)!}


к предыдущему слагаемого - https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n-1}=\frac{{(-1)}^{(n-1)}*{x}^{2*(n-1)}}{(2(n-1))!}= \frac{{(-1)}^{(n-1)}*{x}^{(2n-2)}}{(2n-2)!}


Результат:

https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n}}{{a}_{n-1}}=\frac{\frac{{(-1)}^{n}*{x}^{(2n)}}{(2n)*(2n-1)*(2n-2)!}}{\frac{{(-1)}^{(n-1)}*{x}^{(2n-2)}}{(2n-2)!}}=\frac{{(-1)}^{n}*{x}^{(2n)}}{(2n)*(2n-1)}

И для https://www.cyberforum.ru/cgi-bin/latex.cgi?sin(x)=\sum \frac{{(-1)}^{n}*{x}^{(2n+1)}}{(2n+1)!}
тоже самое:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n}}{{a}_{n-1}}=\frac{\frac{{(-1)}^{n}*{x}^{(2n)}}{(2n)*(2n-1)*(2n-2)!}}{\frac{{(-1)}^{(n-1)}*{x}^{(2n-2)}}{(2n-2)!}}=\frac{{(-1)}^{n}*{x}^{(2n)}}{(2n)*(2n-1)}
Почему же для вычисления: https://www.cyberforum.ru/cgi-bin/latex.cgi?exp(x) = \sum \frac{{(-1)}^{n}*{x}^{(2n)}}{(2n)!}

нужно добавлять 1: m = n+1 получается, что нужно брать отношение следующего слагаемого к данному????? Я не могу понять алгоритм вычисления рекуррентной формулы????? Объясни пожалуйста заранее огромное спасибо!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.07.2012, 14:28
Помогаю со студенческими работами здесь

Построение графика y=(exp(ln(X) * 3) + exp(ln(X) * 2)-15)/2;
Помогите пожалуйста доделать программу. При запуске программы пишет &quot;Program1.pas(62) : Ошибка времени выполнения: Значение было...

Вычислите:1/Exp(1 * ln(3))*1/Exp(2 * ln(3))+...+1/Exp(50 * ln(3))
помогите решить,очень надо!!!

вычисление exp
Дано вещественное число X и целое число N&gt;0.Вывести 1+Х+Х2/2!+..+XN/N! (N!=1*2*..*N).Полученное число является приближенным значением...

Вычисление exp(-x)
Всем привет. Я уже долго бьюсь над одной задачей. Вычисление функции exp(-x) с помощью разложения в ряд. Пытался находить через факториал,...

Вычисление exp в ряд Тейлора
Здравствуйте! кто - нибудь подскажите пожалуйста формулу разложения e^(x) для вычисления функции в ряд тейлора


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru