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

Найти ошибку в программе. Интеграл по формуле Симпсона, - C++

Восстановить пароль Регистрация
 
Rovecrew
1 / 1 / 0
Регистрация: 06.03.2014
Сообщений: 25
11.05.2014, 20:59     Найти ошибку в программе. Интеграл по формуле Симпсона, #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
// Lab14Y.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include "math.h"
#include "conio.h"
#pragma warning(disable : 4996)
#define M_PI 3.1415926535897932384626433832795
 
using namespace std;
 
 
 
double f(double x)
{
    return sqrt(pow(x, 2) + 0.16) / x;
}
 
 
 
 
double c(double(*func)(double), double a = 1, double b = 2)
{
    double s = 0;
    for (double i = a; i<b; i += 0.01)
    {
 
        s += ((*func)(i)+(*func)(i + 0.01))*0.5*0.01;
    }
 
    return s;
}
 
 
 
double Simps(int n) // formula Simpsona
{
    double m;
    double x, x1, x2, h, sum = 0;
    m = n >> 1;
    h = (double)1 / n;
    for (int i = 1; i <= m; i++)
    {
        x = 2 * i*h;
        x1 = (2 * i + 1)*h;
        x2 = (2 * i + 2)*h;
        sum += (f(x) + 4 * f(x1) + f(x2));
    }
    return h*sum / 3;
}
 
 
 
void main()
{
    
    double a = 0;
    double b = M_PI/3;
    int g = 2.2;
    cout << c(f, a, b) << endl;
    cout << c(f, a) << endl;
    cout << c(f) << endl;
    cout << Simps(g) << endl;
 
    
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2014, 20:59     Найти ошибку в программе. Интеграл по формуле Симпсона,
Посмотрите здесь:

посчитать интеграл...найти ошибку в программе C++
Вычисление функции по формуле Симпсона и Треугольника C++
Интеграл методом Симпсона C++
интеграл методом Симпсона C++
Интегралы по формуле Симпсона и прямоугольников (С++) C++
Не могу найти ошибку в коде (Численное интегрирование методом Симпсона) C++
Найти интеграл методами правых прямоугольников и Симпсона C++
Вычислить интеграл методом Симпсона C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rovecrew
1 / 1 / 0
Регистрация: 06.03.2014
Сообщений: 25
13.05.2014, 17:29  [ТС]     Найти ошибку в программе. Интеграл по формуле Симпсона, #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
74
75
76
77
78
79
80
81
// Lab14Y.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <cmath>
#include <iostream>
#include <conio.h>
#pragma hdrstop
#define pi 3.1415926535897932384626433832795
 
using namespace std;
 
//Підінтегральна функція
double func(double x)
{
    double r = sin(x);
    
    return r;
}
 
 
double simpson(double(*Fx)(double), double a, double b, int n);
double newton(double(*Fx)(double), double a, double b);
 
int main(int argc, char* argv[])
{
    double I;
    double S;
    double a, b;
    int n;
 
    cout << "\n Input integral atributes:\n" << endl;
    a = 0;
    b = pi / 3;
 
    cout << "\t-> Enter n for Method Simpson = ";
    cin >> n;
 
    // вичислення інтеграла
 
    I = simpson(&func, a, b, n);
    S = newton(&func, a, b);
    // Вивід результату
    cout << endl << "Method Newton \n\n I= " << S;
    cout << endl << "\nMethod Simpson \n\n I= " << I;
    cin.get();
}
 
 
// Метод Сімпсона
double simpson(double(*Fx)(double), double a, double b, int n)
{
 
    double h;
    h = (b - a) / n;
 
    double I, I2 = 0, I4 = 0;
    I4 = Fx(a + h);
    for (int k = 2; k < n; k += 2)
    {
        I4 += Fx(a + (k + 1)*h);
        I2 += Fx(a + k*h);
    }
    I = Fx(a) + Fx(b) + 4 * I4 + 2 * I2;
    I *= h / 3;
 
    return I;
}
 
// Метод Ньютона Лейбніца
double newton(double(*Fx)(double), double a, double b)
{
    double s = 0;
    for (double i = a; i<b; i += 0.000001)
    {
 
        s += ((*Fx)(i)+(*Fx)(i + 0.000001))*0.5*0.000001;
    }
 
    return s;
}
Yandex
Объявления
13.05.2014, 17:29     Найти ошибку в программе. Интеграл по формуле Симпсона,
Ответ Создать тему
Опции темы

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