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

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

Восстановить пароль Регистрация
 
avatar1870
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 401
16.03.2014, 16:45     Вычисление определенного интеграла #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
// lab_15.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
 
#include <iostream>
#include <math.h>
#include <locale.h>
using namespace std;
const float p = 3.141592653;
 
float ingdv(float a, float b, float e, float (*f)(float,float,int));
float f1(float a, float b, int n);
float f2(float a, float b, int n);
 
int main()
{
    setlocale(LC_CTYPE,"Russian");
    float a,b,rez,e;
    printf("Введите A, B и точность вычисления\n");
    scanf_s("%f%f%f", &a,&b,&e);
    printf("\nРешение интеграла 2-мя методами:\n\n");
    rez = ingdv(a,p/b,e,f1);
    printf("Метод Трацеция %f\n",rez);
    rez = ingdv(a,p/b,e,f2);
    printf("Метод Прямоугольник %f\n",rez);
    system("pause");
    return 0;
}
/*-----------------Метод трапеции-------------------*/
float f1(float a, float b, int n)
{
    float h,sum,x;
    int i;
    sum = 0;
    h=(b-a)/n;
    sum += sqrt(tan(a));
    for(i = 1; i < n; i++)
    {
        x = a + i*h;
        sum += 2*sqrt(tan(x));
    }
    x = a + n*h;
    sum += sqrt(tan(x));
    return(0.5*h*sum);
}
/*---------------Метод прямоугольника------------------*/
float f2(float a, float b, int n)
{
    float h,sum,x;
    int i;
    sum = 0;
    h=(b-a)/n;
    for(i = 1; i <= n; i++)
    {
        x = a + (i-0.5)*h;
        sum += sqrt(tan(x));
    }
    return h*sum;
}
 
/*-----------Общая функция-----------*/
float ingdv(float a, float b, float e, float (*f)(float,float,int))
{
    int n = 10;
    float p,k;
    k = f(a,b,n);
    do{
        p = k;
        k = f(a,b,2*n);
        n = n*2;
 
    }while(abs(p-k)<e);
    return k;
}

Интеграл:
Миниатюры
Вычисление определенного интеграла  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2014, 16:45     Вычисление определенного интеграла
Посмотрите здесь:

Вычисление определенного интеграла! C++
Вычисление определенного интеграла. C++
C++ Вычисление определенного интеграла приближенными методами
Вычисление определенного интеграла си++ C++
C++ Вычисление определенного интеграла методом Гаусса СИ
C++ Вычисление определенного интеграла методом центральных прямоугольников
C++ Вычисление определенного интеграла методом трапеции
Написать программу: вычисление определенного интеграла C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
avatar1870
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 401
17.03.2014, 17:35  [ТС]     Вычисление определенного интеграла #2
Написал другую программу, но в задании сказано использовать передачу функций в качестве параметра функции. Как это сделать не знаю(

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
#include <iostream>
#include <math.h>
#include <locale.h>
using namespace std;
const float p = 3.141592653;
#include<stdio.h>
#include<stdlib.h>
 
/*----pidintegralna functsia---*/
double INTEGR0(double x)
{
    return x*atan(x);
}
 
double INTEGR1(double x)
{
    return pow(2,x)/(1-pow(4,x));
}
 
double INTEGR2(double x)
{
    return 1/(1+sqrt(2*x));
}
 
/*----integruvannia metodom trapezii---*/
double trapez0(double left, double right, double h)
{
    double sum = 0;
    double runner;
     /* formula trapezii*/
    for(runner = left + h; runner < right; runner += h)
        sum += INTEGR0(runner);
    sum = (sum + 0.5*(INTEGR0(left) + INTEGR0(right))) * h;
    return sum;
}
 
 double trapez1(double left, double right, double h)
 {  
      double sum = 0;
    double runner;
     for(runner = left + h; runner < right; runner += h)
        sum += INTEGR1(runner);
    sum = (sum + 0.5*(INTEGR1(left) + INTEGR1(right))) * h;
    return sum;
 }
 
 double trapez2(double left, double right, double h)
 {
      double sum = 0;
    double runner;
     for(runner = left + h; runner < right; runner += h)
        sum += INTEGR2(runner);
    sum = (sum + 0.5*(INTEGR2(left) + INTEGR2(right))) * h; 
    return sum;
 }
 
int main(int argc, char ** argv)
{
    char c;
    double a=0;
        double b=1.6;
        double s=-2;
        double d=1.3;
        double e=0;
        double f=1;
        double h;
    printf("Enter integration step : ");
    scanf_s("%lf",&h);
     double trap = trapez0(a, b, h)+trapez0(s, d, h)+trapez0(e, f, h);
     printf("vidpovid za metodom trapezii  %10.10f.\n", trap);
    scanf_s("%c",&c);scanf_s("%c",&c);
    return 0;
}
Добавлено через 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// lab_15.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
 
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include <cmath>
#include <stdio.h> 
#include <conio.h>
#include <iostream>
#include <iomanip>
using namespace std;
 
 
/*----pidintegralna functsia---*/
double INTEGR0(double x)
{
    return x*atan(x);
}
 
double INTEGR1(double x)
{
    return pow(2,x)/(1-pow(4,x));
}
 
double INTEGR2(double x)
{
    return 1/(1+sqrt(2*x));
}
 
/*----integruvannia metodom trapezii---*/
double trapez0 (double h, double (*INTEGR0)(double),double (*INTEGR1)(double),double (*INTEGR2)(double))
{
        double a=0;
        double b=1.6;
        double s=-2;
        double d=1.3;
        double e=0;
        double f=1;
          double sum0 = 0;
          double sum1 = 0;
          double sum2 = 0;
    double runner=0;
      for(runner = a + h; runner < b; runner += h)
        sum0 += INTEGR0(runner);
    sum0 = (sum0 + 0.5*(INTEGR0(a) + INTEGR0(b))) * h;
        
     for(runner = s + h; runner < d; runner += h)
        sum1 += INTEGR1(runner);
    sum1 = (sum1 + 0.5*(INTEGR1(s) + INTEGR1(d))) * h;
     
     for(runner = e + h; runner < f; runner += h)
        sum2 += INTEGR2(runner);
    sum2 = (sum2 + 0.5*(INTEGR2(e) + INTEGR2(f))) * h; 
    return sum0+sum1+sum2;
 }
 
int main()
{
    double h;
    char c;
    printf("Enter integration step : ");
    scanf_s("%lf",&h);
     double trap = trapez0 (h,(*INTEGR0)(double),(*INTEGR1)(double),double (*INTEGR2)(double);
     printf("vidpovid za metodom trapezii  %10.10f.\n", trap);
    scanf_s("%c",&c);scanf_s("%c",&c);
    return 0;
}
Добавлено через 2 часа 12 минут
Что-то неправильно в вызове функции

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
// lab_15.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
 
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include <cmath>
#include <stdio.h> 
#include <conio.h>
#include <iostream>
#include <iomanip>
using namespace std;
 
/*Прототипы*/
double INTEGR0(double x);
double INTEGR1(double x);
double INTEGR2(double x);
double trapez0 (double h, double (*INTEGR0)(double),double (*INTEGR1)(double),double (*INTEGR2)(double));
 
/*----pidintegralna functsia---*/
double INTEGR0(double x)
{
    return x*atan(x);
}
 
double INTEGR1(double x)
{
    return pow(2,x)/(1-pow(4,x));
}
 
double INTEGR2(double x)
{
    return 1/(1+sqrt(2*x));
}
 
/*----integruvannia metodom trapezii---*/
double trapez0 (double h, double (*INTEGR0)(double),double (*INTEGR1)(double),double (*INTEGR2)(double))
{
        double a=0;
        double b=1.6;
        double s=-2;
        double d=1.3;
        double e=0;
        double f=1;
          double sum0 = 0;
          double sum1 = 0;
          double sum2 = 0;
    double runner=0;
      for(runner = a + h; runner < b; runner += h)
        sum0 += INTEGR0(runner);
    sum0 = (sum0 + 0.5*(INTEGR0(a) + INTEGR0(b))) * h;
        
     for(runner = s + h; runner < d; runner += h)
        sum1 += INTEGR1(runner);
    sum1 = (sum1 + 0.5*(INTEGR1(s) + INTEGR1(d))) * h;
     
     for(runner = e + h; runner < f; runner += h)
        sum2 += INTEGR2(runner);
    sum2 = (sum2 + 0.5*(INTEGR2(e) + INTEGR2(f))) * h; 
    return sum0+sum1+sum2;
 }
 
int main()
{
    double h;
    char c;
    printf("Enter integration step : ");
    scanf_s("%lf",&h);
     double trap = trapez0(h);
     printf("vidpovid za metodom trapezii  %10.10f.\n", trap);
    scanf_s("%c",&c);scanf_s("%c",&c);
    return 0;
}
vlad3996
6 / 6 / 3
Регистрация: 27.10.2013
Сообщений: 14
17.03.2014, 19:24     Вычисление определенного интеграла #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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//Вычисление интеграла по методу        трапеции
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
double fun(double);     //прототип ф-ции, которая передаёт имя функции в качестве пар-ра
double f1(double x)
{return atan(x)*x;}
double f2(double x)
{return pow(2,x)/(1-pow(4,x));}
double f3(double x)
{return 1/(1+sqrt(2.0*x));}
double trap (double (*fun)(double),double a,double b,double eps)
{
    bool invert=false;
    double c,f1,f2,d;
    if(a==b)
        return 0.0;
    else if(a>b)
        {
            invert=true;
            c=a;
            a=b;
            b=c;
        }
    long n=1;
    f2=0,5*(fun(a)+fun(b))*(b-a);       //площадь первой трапеции
    do
    {
        f1=f2;
        n=2*n;
        d=(b-a)/n;  
        c=a;
        f2=0;
        for(int i=0;i<n;i++)
        {
            f2=f2+fun(c)*d;
            c=c+d;
        }
    f2=f2+(fun(a)+fun(b))*0,5*d;
    }
    while(fabs(f1-f2)>eps);
    if (invert)
        return -f2;
    else return f2;
}
int main ()
{
    setlocale(0,"");
    cout<<trap(f1,0.0,1.6,0.00001)+trap(f2,-2.0,-1.3,0.00001)+trap(f3,0.0,1.0,0.00001);
    system("pause");
    return 0;
}
Yandex
Объявления
17.03.2014, 19:24     Вычисление определенного интеграла
Ответ Создать тему
Опции темы

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