Форум программистов, компьютерный форум CyberForum.ru

Вычисление интеграла методом Рунге(двойной пересчёт) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 5.00
IgoriZ
0 / 0 / 1
Регистрация: 16.09.2012
Сообщений: 23
26.11.2012, 14:04     Вычисление интеграла методом Рунге(двойной пересчёт) #1
Доброго времени суток! Задача следующая вычислить интеграл при заданной погрешности eps = 10^-3.
методом Рунге. Вот интеграл Вычисление интеграла методом Рунге(двойной пересчёт)

вот что пробовал сделать. Дальше как-то не понимаю что нужно делать. Пмогите доделать плиз.
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
#include <iostream>
#include <math.h>
#define e  2.72
 
using namespace std;
 
 
float f(float x){
    x = pow(e,x)/sqrt(1+pow(e,x));
    return x;
}
 
 
int main(){
    float a=0,b=1,n=2,x;
    float i,h,integral=0,eps= pow(10,-4);
    float In=0;
    float I2= 0;
    
    h = (b-a)/n;
    x = a+h/2;
    cout << h << endl;
    
    for ( i = 1; i<=n;i++){
        
        In += f(x);
         
        x = x+h;
        
    }
     
    
return 0;    
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
26.11.2012, 14:38     Вычисление интеграла методом Рунге(двойной пересчёт) #2
зачем задавать вообще n
тем более равным 2!!!
тебе же дан эпсилон, от него и пляши.
IgoriZ
0 / 0 / 1
Регистрация: 16.09.2012
Сообщений: 23
26.11.2012, 15:17  [ТС]     Вычисление интеграла методом Рунге(двойной пересчёт) #3
Kuzia domovenok, по моему разобрался
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 <iostream>
#include <math.h>
#define e  2.718281
 
using namespace std;
 
 
float f(float x){
    x = pow(e,x)/sqrt(1+pow(e,x));
    return x;
}
 
float integral(float a,float b,float n)
{
    float i;
    float h=0.0,sint=0.0;
    
    
    cout<<"a="<<a<<"  b="<<b<<"  n="<<n<<endl;
    
    h=(b-a)/n;
    i=a+h/2;
    
    cout<<"h="<<h<<"  i="<<i<<endl;
    
    while (i <= b)
    {
        sint+=f(i)*h;
        i+=h;
        
    }
    
    return sint;
    
    
    
 
    return 0;
}
 
 
int main(){
 
    cout<<"Integral raven: "<<integral(0,1,2);
     
return 0;    
}
вот что вышло)
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
26.11.2012, 15:30     Вычисление интеграла методом Рунге(двойной пересчёт) #4
может интеграл он и считает, но ещё раз повторяю вопрос, если тебе сказано вычислить с погрешностью эпсилон, то почему ты этого нигде не используешь?
Хотя поторопился, интеграл он у тебя считает хреновато, у тебя же всего две итерации идут!
IgoriZ
0 / 0 / 1
Регистрация: 16.09.2012
Сообщений: 23
27.11.2012, 00:33  [ТС]     Вычисление интеграла методом Рунге(двойной пересчёт) #5
Kuzia domovenok, ну разве точность вычисления независит от кол-ва разбиений n? чем больше разбиений тем выше точно вычисления и итераций следовательно больше.

Добавлено через 1 минуту
Kuzia domovenok, я интегралы особо не програмировал. Поэтому если где-то ошибка буду рад если направите на правильный путь.

Добавлено через 5 минут
Эпсилон не используют т.к. плохо понимаю как правильно его использовать( в этой проге.
Dre1mon
268 / 25 / 1
Регистрация: 25.11.2012
Сообщений: 93
27.11.2012, 00:49     Вычисление интеграла методом Рунге(двойной пересчёт) #6
IgoriZ, Вы находите приближенное значение интеграла, его нужно посчитать аналитически, и результат должен быть таков: |I*-I|< 10^(-3), где I* - приближенное значение интеграла, а I - аналитически посчитанное.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
27.11.2012, 00:53     Вычисление интеграла методом Рунге(двойной пересчёт) #7
Цитата Сообщение от Dre1mon Посмотреть сообщение
IgoriZ, Вы находите приближенное значение интеграла, его нужно посчитать аналитически
Кто это вообще тебе такое сказал? Что значит "нужно"?
IgoriZ
0 / 0 / 1
Регистрация: 16.09.2012
Сообщений: 23
27.11.2012, 00:55  [ТС]     Вычисление интеграла методом Рунге(двойной пересчёт) #8
Dre1mon, я очень плохо разбираюсь в интегралах. еслибы вы показали пример проги. Я думал поне лбы о чём вы говарите.
Dre1mon
268 / 25 / 1
Регистрация: 25.11.2012
Сообщений: 93
27.11.2012, 00:56     Вычисление интеграла методом Рунге(двойной пересчёт) #9
Kuzia domovenok, 2 варианта - точность ему дали для итераций, либо для невязки.
IgoriZ
0 / 0 / 1
Регистрация: 16.09.2012
Сообщений: 23
27.11.2012, 01:05  [ТС]     Вычисление интеграла методом Рунге(двойной пересчёт) #10
Так можете помочь? ) я просто не пойму где ошибся.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
27.11.2012, 01:09     Вычисление интеграла методом Рунге(двойной пересчёт) #11
Цитата Сообщение от Dre1mon Посмотреть сообщение
Kuzia domovenok, 2 варианта - точность ему дали для итераций
так вот и вопрос. Как, зная требуемую точность, определить шаг интегрирования или количество итераций?
не повторять же цикл интегрирования с нескольких попыток!
Dre1mon
268 / 25 / 1
Регистрация: 25.11.2012
Сообщений: 93
27.11.2012, 01:10     Вычисление интеграла методом Рунге(двойной пересчёт) #12
IgoriZ
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
у тебя же всего две итерации идут!
C++
1
cout<<"Integral raven: "<<integral(0,1,2);
P.S
Да, цикл с нескольких попыток - это не хорошо)
etsetere
 Аватар для etsetere
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 6
27.11.2012, 01:17     Вычисление интеграла методом Рунге(двойной пересчёт) #13
Выили после подсчетов оценивайте интеграл по Рунге, или используйте вашу точность для поиска верхней оценки шага для вашего метода. Как я понимаю, вы считаете методом прямоугольников. а зачем в начале увеличивать х на пол-шага? Определитесь с точностью.
Dre1mon
268 / 25 / 1
Регистрация: 25.11.2012
Сообщений: 93
27.11.2012, 01:20     Вычисление интеграла методом Рунге(двойной пересчёт) #14
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
#include <iostream>
#include <math.h>
#define e  2.718281
#define E 0.001 
#define Integral 1.02814
using namespace std;
 
 
float f(float x){
    x = pow(e,x)/sqrt(1+pow(e,x));
    return x;
}
 
float integral(float a,float b)
{
    float i;
    float h=0.0,sint=0.0;
    
    
    cout<<"a="<<a<<"  b="<<b;
    
    h=(b-a)/10000;
    i=a+h/2;
    
    cout<<"h="<<h<<"  i="<<i<<endl;
 
    while (i <= b)
    {
        sint+=f(i)*h;
        i+=h;
        if(fabs(sint-Integral)<E)
            break;
    }
    
    return sint;
    
    
    
 
    return 0;
}
 
 
int main(){
 
    cout<<"Integral raven: "<<integral(0,1);
     system("PAUSE");
return 0;    
}
Ну либо так..
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
27.11.2012, 01:26     Вычисление интеграла методом Рунге(двойной пересчёт) #15
Цитата Сообщение от etsetere Посмотреть сообщение
а зачем в начале увеличивать х на пол-шага?
для того, чтобы измерять высоту прямоугольников в их середине
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2012, 14:32     Вычисление интеграла методом Рунге(двойной пересчёт)
Еще ссылки по теме:

C++ Вычисление определенного интеграла методом трапеции
C++ Вычисление интеграла методом трапеций
C++ Вычисление интеграла методом прямоугольников

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

Или воспользуйтесь поиском по форуму:
etsetere
 Аватар для etsetere
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 6
27.11.2012, 14:32     Вычисление интеграла методом Рунге(двойной пересчёт) #16
зачем вы берете количество итераций равным 10000? Вы получите слишком высокую точность. Попробуйте число итераций взять равным 1. Проверьте в цикле выполняется ли ваше условие (по рунге для прямоугольников вам нужно (sint-Integral)/3). если не выполняется, увеличите число итераций. и заданной точности вы достигнете раньше, чем за 10000 шагов.
Yandex
Объявления
27.11.2012, 14:32     Вычисление интеграла методом Рунге(двойной пересчёт)
Ответ Создать тему
Опции темы

Текущее время: 00:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru