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

Интеграл Гаусса в ряд

14.10.2011, 14:40. Показов 8639. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите запрограммировать интеграл Гаусса за разложением его в ряд.
Интеграл Гаусса в ряд

Наброски сделал, но не знаю правильно ли.

C++
1
2
3
4
5
6
7
8
9
10
double gauss(double x) 
{   double t=x,k=1,s=t,f=1,i=1,eps=0.000000001;
do {
    f=f*i;
    k=k+2; t=-t*x*x/k*f;
    s=s+t;
    i++;
}while(t>eps);
return s;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2011, 14:40
Ответы с готовыми решениями:

Определённый интеграл методом Гаусса
Составить программу вычисления определенного интеграла с автоматическим выбором шага...

Вычислить двойной интеграл методом Гаусса
Неправильный результат выдаёт. Помогите найти в чём ошибка. (Visual C++ 2008) #include...

Интеграл Гаусса
Здравствуйте форумчане, препод задал написать программу на паскале "Вычислить интеграл функции...

Определенный интеграл методом Гаусса
Подскажите пожалуйста алгоритм вычисления определенного интеграла методом Гаусса,а то мне надо...

5
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
14.10.2011, 15:00 2
Лучший ответ Сообщение было отмечено как решение

Решение

вот тут
C++
1
t=-t*x*x/k*f;
вместо деления на факториал f умножаешь на него
и строка s=s+t; должна быть первой в цикле, иначе ты не прибавляешь первое слагаемое никогда

твое слагаемое t меняет знак и если ты сравниваешь с точностью именно его, а не модуль, то цикл закончится на первом же проходе (любое отрицательное число < eps)

вот так можно вычислить с использованием общего рекуррентного множителя данную формулу, если использовать запись ряда вида https://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{i=0}^{\propto} \frac{{(-1)}^{i}{x}^{2i+1} }{(2i+1) i!}

C++
1
2
3
4
5
6
7
8
9
10
double gauss(double x) 
{       
    double t=x,i=0,eps=0.000000001, s=0;
    do {
        s+=t;
        t*=-x*x*(2*i+1)/(2*i+3)/(i+1);     
        i++;
}while(fabs(t)>eps);
return s;
}
0
Заблокирован
Автор FAQ
14.10.2011, 15:36 3
aeshes,
Цитата Сообщение от aeshes Посмотреть сообщение
double t=x,i=0,eps=0.000000001, s=0;
* * do {
* * * * s+=t;
* * * * t*=-x*x*(2*i+1)/(2*i+3)/(i+1); * *
* * * * i++;
- ну и где же здесь (-1)^i ???
да и это некорректно
Цитата Сообщение от aeshes Посмотреть сообщение
*(2*i+1)
по вашему x^(2*i+1) = x^2*(2*i + 1) может всё-таки pow(x,2*i + 1) надо, м???!

Добавлено через 9 минут
Цитата Сообщение от aeshes Посмотреть сообщение
while(fabs(t)>eps)
- такое условие окончания не означает
Цитата Сообщение от aeshes Посмотреть сообщение
с точностью именно его
нужно брать разность | X[i + 1] - X[i] | < eps
Точность - это разность между соседними членами!
0
Заблокирован
Автор FAQ
14.10.2011, 16:27 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
29
30
31
32
33
34
35
#include <stdio.h>
#include <math.h>
 
double gauss(double x, double eps)
{
    long i = 1;
    double xi   = x;
    double xi_1 = (-1)*x*x*(xi/1.0*i)*(2*(i - 1) + 1.0)/(2*i + 1.0);
    double sum = xi;
    double buf = fabs(xi_1 - xi);
    while((i++) && eps < fabs(xi_1 - xi))
    {
        sum  += xi_1;
        xi   =  xi_1;
        xi_1 *= (-1)*(x*x)*(xi/1.0*i)*(2*(i - 1) + 1.0)/(2*i + 1.0);
        printf("%d: %lf\n",i, (buf = fabs(xi_1 - xi)));
    }
    return sum;
}
 
int main()
{
    double x = 0, eps = 0;
    int iMENU = 1;
    do
    {
        printf("Enter x : ");scanf("%lf",&x);
        printf("Enter e : ");scanf("%lf",&eps);
        printf("ANSWER  : %lf\n",gauss(x, eps));
        printf("Enter 1 for new input : ");
        scanf("%d",&iMENU);
    }
    while(iMENU == 1);
    return 0;
}
Миниатюры
Интеграл Гаусса в ряд  
0
Заблокирован
Автор FAQ
14.10.2011, 16:30 5
aeshes, прошу прощения за своё это выссказывание
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- ну и где же здесь (-1)^i ???
да и это некорректно
Сообщение от aeshes
*(2*i+1)
по вашему x^(2*i+1) = x^2*(2*i + 1) может всё-таки pow(x,2*i + 1) надо, м???!
- я понял что вы каждый раз домножение элемента использовали, однако на счёт стоп условия

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(fabs(t)>eps)
- такое условие окончания не означает
Сообщение от aeshes
с точностью именно его
нужно брать разность | X[i + 1] - X[i] | < eps
Точность - это разность между соседними членами!
- всё в силе
0
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
14.10.2011, 16:54 6
-=ЮрА=-, я использую следующее окончание вычислительного процесса для рядов: если текущее слагаемое по модулю меньше эпсилон, то можно вычисления заканчивать. Это типичное условие при вычислении сходящихся рядов, у которых каждое следующее слагаемое меньше предыдущего по модулю. А этот ряд сходится. t - собственно слагаемое. А точность - это разность между соседними значениями суммы

Разность между двумя членами имеет смысл проверять, если нет уверенности в сходимости ряда, но тогда собственно нужно еще ограничение на максимальное число итераций, потому что в расходящемся ряде ни мое, ни ваше условие может не выполниться. Например, ряд https://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{i=0}^{\propto } {x}^{i} при х=1, при вашем условии закончит вычисления на второй итерации (первое слагаемое =1, второе слагаемое равно 1, разность равна 0, точность достигнута). При моем условии вообще не остановится, потому что при х=1 расходится, слагаемые к нулю не стремятся. Поэтому, по-хорошему, нужно сочетать одно из условий окончания вычисления с проверкой на максимально допустимое число итераций

Это не претензия, просто делюсь тем, чему нас учили в универе
0
14.10.2011, 16:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2011, 16:54
Помогаю со студенческими работами здесь

Определенный интеграл методом гаусса
помогите пожалуйста,мне надо реализовать программу вычисления определенного интеграла по формулам...

Методом Гаусса решить интеграл
{6x1+0.6x2+0.5x3=41.0 0.6x1+5x2+0.4x3=30.2 0.5x1+0.4x2+4x3=21.0}

Несобственный интеграл методом гаусса
Проблема в реализации в среде matlab программы по расчету несобственного интеграла методом Гаусса....

Исследовать ряд(Признак Раабе, Гаусса).
\sum \frac{(sqrt2+1)\cdot ...\cdot (sqrt2+n)}{(sqrt3+1)\cdot ...\cdot (sqrt3+n)} помогите решить...

Найти интеграл от плотности распределения Гаусса
интеграл от -бесконечность до + бесконечность 1/b*sqrt(2*pi)*e^(-(x-X)^2/b^2) b,X - числа. Я не...

Определённый интеграл посчитать методом Гаусса
Дано задание вычислить интеграл методом Гаусса по 2 точкам и сравнить с ответом. ...


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

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