Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
lokteva
0 / 0 / 1
Регистрация: 14.04.2013
Сообщений: 16
#1

Вычисление определенного интеграла си++ - C++

13.05.2013, 18:09. Просмотров 2940. Ответов 1
Метки нет (Все метки)

Составить программу вычисления определенного инте-грала с помощью метода Гаусса и Симпсона

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include<iostream>
#include<math.h>
#include<fstream>
using namespace std;
typedef double D;
long int kol_obr;
D f(D x);//подынтыгральная функция
D perv(D x);//первообразная
D sumpson_4(D a,D b,D f(D), D eps);//метод Симпсона
D gauss_4(D a,D b,D f(D),D eps);//метод Гаусса
void main()
{
setlocale(LC_ALL,"rus_rus.1251");
D a=1.8,b=2.5,prv,prib_sum,eps,prib_gauss,y=0,u=0,fun;
cout<<"Введите точность"<<endl;
cin>>eps;
ofstream outfile("РГЗ.txt");
prib_sum=sumpson_4(a,b,f,eps);//обращение к функции Симпсона
y=kol_obr;
cout<<"Формула Симпсона "<<prib_sum<<endl;
outfile<<"Формула Симпсона "<<prib_sum<<endl;
cout<<"Количество обращений "<<kol_obr<<endl<<endl;
outfile<<"Кол-во обращений "<<kol_obr<<endl<<endl;
kol_obr=0;
prib_gauss=gauss_4(a,b,fun,eps);//обращение к функции Гаусса
u=kol_obr;
cout<<"Метод Гаусса "<<prib_gauss<<endl;
outfile<<"Метод Гаусса "<<prib_gauss<<endl;
cout<<"Кол-во обращений "<<kol_obr<<endl<<endl;
outfile<<"Кол-во обращений "<<kol_obr<<endl<<endl;
prv=perv(b)-perv(a);//обращение к первообразной
cout<<"Первообразная "<<prv<<endl;
outfile<<"Первообразная "<<prv<<endl;
if(u>y)
{
cout<<"Выигрыш метода Симпсона к Гауссу "<<u/y<<endl;
outfile<<"Выигрыш метода Симпсона к Гауссу "<<u/y<<endl;
}
else
{
cout<<"Выигрыш метода Гаусса к Симпсону "<<y/u<<endl;
outfile<<"Выигрыш метода Гаусса к Симпсону"<<y/u<<endl;
}
outfile.close();
}
D f(D x)
{
kol_obr++;
return pow(cosh4(x),4);//вычисляемый интеграл
}
D perv(D x)
{
return (sinh(4x)/32)+(sinh(2x)/4)+(3*x/8);// первообразная функция
}
D sum_4(D a,D b,D f(D),D eps)//описываем основную функцию подсчета интеграла.
{
 double INT1, INT2, h,x,s;//s-конечный результат=сумма
int n=4; 
INT2=10000;
do
{
n*=2;
INT1=INT2;
h=(b-a)/n;//начальное значение шага
s=f(a)+f(b);
for (x=a+h; x<b; x+=h)//x=a+h---->получаем новый x, идя и границы "а" с шагом h
{
s+=f(x)*4;
x+=h;
s+=f(x)*2;
}
INT2=h/3*s;
}
while(fabs(INT1-INT2)>eps);
return INT2;
 
 
D gauss_4(D a,D b,D f(D),D eps)
{
int n=4,k=1;
D INT1, INT2=1, h,s,x;
D X[4]={0.0694318,0.3300095,0.6699905,0.9305682},A[4]={0.1739274,0.3260726,0.3260726,0.1739274};
do
{
INT1=INT2;
k=k*2;
h=(b-a)/k;//шаг интегрирования
s=0;
for(int j=0;j<k;j++)
{
x=a+j*h;
for(int i=0;i<n;i++)
{
x=x+X[i]*h;
s+=f(x)*A;
}
}
INT2=h*s;
}
while(fabs(INT1-INT2)>=eps);
return INT2;
}
В программе ошибки, никак не могу их устранить! как будет правильно???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2013, 18:09
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вычисление определенного интеграла си++ (C++):

Вычисление определенного интеграла
Здравствуйте. Нашел код для вычисления определенного интеграла двумя методами,...

Вычисление определенного интеграла!
Помогите плиз с с++! С заданной погрешностью вычислить интеграл!

Вычисление определенного интеграла
Вычислить определенный интеграл, с точностью 7 знаков после десятичного...

Вычисление определенного интеграла.
Добрый вечер! Не могли бы Вы помочь с моей задачей. Нужно вычислить...

Написать программу: вычисление определенного интеграла
Помогите пожалуйста написать программу на С++. Нарушение правил форума:...

Вычисление определенного интеграла методом трапеций
Как можно найти определенный интеграл по методу Трапеций в си?...

1
vua72
417 / 417 / 166
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
13.05.2013, 20:27 #2
Компилируется gcc.

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include<iostream>
#include<math.h>
#include<fstream>
using namespace std;
typedef double D;
long int kol_obr;
D f(D x); //подынтыгральная функция
D perv(D x); //первообразная
D sum_4(D a, D b, D f(D), D eps); //метод Симпсона
D gauss_4(D a, D b, D f(D), D eps); //метод Гаусса
 
int main() {
    setlocale(LC_ALL, "rus_rus.1251");
    D a = 1.8, b = 2.5, prv, prib_sum, eps, prib_gauss, y = 0, u = 0, fun;
    cout << "Введите точность" << endl;
    cin >> eps;
    ofstream outfile("РГЗ.txt");
    prib_sum = sum_4(a, b, f, eps); //обращение к функции Симпсона
    y = kol_obr;
    cout << "Формула Симпсона " << prib_sum << endl;
    outfile << "Формула Симпсона " << prib_sum << endl;
    cout << "Количество обращений " << kol_obr << endl << endl;
    outfile << "Кол-во обращений " << kol_obr << endl << endl;
    kol_obr = 0;
    prib_gauss = gauss_4(a, b, f, eps); //обращение к функции Гаусса
    u = kol_obr;
    cout << "Метод Гаусса " << prib_gauss << endl;
    outfile << "Метод Гаусса " << prib_gauss << endl;
    cout << "Кол-во обращений " << kol_obr << endl << endl;
    outfile << "Кол-во обращений " << kol_obr << endl << endl;
    prv = perv(b) - perv(a); //обращение к первообразной
    cout << "Первообразная " << prv << endl;
    outfile << "Первообразная " << prv << endl;
    if (u > y) {
        cout << "Выигрыш метода Симпсона к Гауссу " << u / y << endl;
        outfile << "Выигрыш метода Симпсона к Гауссу " << u / y << endl;
    } else {
        cout << "Выигрыш метода Гаусса к Симпсону " << y / u << endl;
        outfile << "Выигрыш метода Гаусса к Симпсону" << y / u << endl;
    }
    outfile.close();
}
D f(D x) {
    kol_obr++;
    return pow(cosh(x), 4); //вычисляемый интеграл
}
D perv(D x) {
    return (sinh(4 * x) / 32) + (sinh(2 * x) / 4) + (3 * x / 8); // первообразная функция
}
 
D sum_4(D a, D b, D f(D), D eps) //описываем основную функцию подсчета интеграла.
        {
    double INT1, INT2, h, x, s; //s-конечный результат=сумма
    int n = 4;
    INT2 = 10000;
    do {
        n *= 2;
        INT1 = INT2;
        h = (b - a) / n; //начальное значение шага
        s = f(a) + f(b);
        for (x = a + h; x < b; x += h) //x=a+h---->получаем новый x, идя и границы "а" с шагом h
                {
            s += f(x) * 4;
            x += h;
            s += f(x) * 2;
        }
        INT2 = h / 3 * s;
    } while (fabs(INT1 - INT2) > eps);
    return INT2;
}
 
D gauss_4(D a, D b, D f(D), D eps) {
    int n = 4, k = 1;
    D INT1, INT2 = 1, h, s, x;
    D X[4] = { 0.0694318, 0.3300095, 0.6699905, 0.9305682 }, A[4] = { 0.1739274,
            0.3260726, 0.3260726, 0.1739274 };
    do {
        INT1 = INT2;
        k = k * 2;
        h = (b - a) / k; //шаг интегрирования
        s = 0;
        for (int j = 0; j < k; j++) {
            x = a + j * h;
            for (int i = 0; i < n; i++) {
                x = x + X[i] * h;
                s += f(x) * A[i];
            }
        }
        INT2 = h * s;
    } while (fabs(INT1 - INT2) >= eps);
    return INT2;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2013, 20:27
Привет! Вот еще темы с решениями:

Вычисление определенного интеграла методом трапеции
Помогите написать код, хоть убейте, но не пойму никак Решить задачу,...

Вычисление определенного интеграла методом Гаусса СИ
хелп

Вычисление определенного интеграла приближенными методами
Вычисление определенного интеграла приближенными методами формулой...

Вычисление определенного интеграла методом средних прямоугольников
Вот написал прогу для вычисления определенного интеграла. ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru