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

Метод Симпсона - C++

Восстановить пароль Регистрация
 
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
15.03.2014, 23:21     Метод Симпсона #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
#include<iostream>
#include<math.h>
using namespace std;
void metodSympsona(double a,double b)
{
        double x[41],y[41],iks[41],igrik[41],m,h,integral,s,sum=0;int i,j,k;
    cout<<"vvedite kolvo x m";
    cin>>k;
        switch(k)
    {
    case 1:
        m=10;
        break;
    case 2:
        m=20;
        break;
    case 3:
        m=40;
        break;
    default:
        cout<<"Vibrano nedopustimoe zna4enie";
        }
        h=(b-a)/m;
        for(i=1;i<m;i++)
        {
            x[i]=a+(i-1)*h;
            y[i]=0.1*pow(x[i],3)+pow(x[i],2)-10*sin(x[i]);
            iks[i]=(x[i]+x[i+1])/2;
            igrik[i]=0.1*pow(iks[i],3)+pow(iks[i],2)-10*sin(iks[i]);
        }
        for(i=1;i<m;i++)
        {
            s=y[i]+4*igrik[i]+y[i+1];
                sum=sum+s;
        }
        integral=h/6*s;
        cout<<integral;
}
int main (void)
{
    double a=-4,b=2;
    metodSympsona(a,b);
    system("pause");
    return(0);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2014, 23:21     Метод Симпсона
Посмотрите здесь:

Вычислить методом Симпсона C++
Интегрирование по методу Симпсона C++
Интеграл методом Симпсона C++
Метод Симпсона C++
C++ Метод симпсона
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nullpointer
 Аватар для nullpointer
45 / 45 / 5
Регистрация: 30.03.2009
Сообщений: 518
16.03.2014, 00:05     Метод Симпсона #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
float function(float x){
    return sin(x);
}
 
float simpson(float left_gr, float right_gr, int n){
    float ksi = 0.0;
    float delta_x = 0.0;
    float simpson_integral = 0.0;
    int m = 2 * n;
 
    delta_x = (right_gr - left_gr) / m;
    simpson_integral = function(left_gr) + function(right_gr);
    ksi = left_gr;
 
    for (int i = 1; i < m; ++i){
        ksi += delta_x;
        if ((i % 2) == 0){
            simpson_integral += 2 * function(ksi);
        }
        else{
            simpson_integral += 4 * function(ksi);
        }
    }
 
    return simpson_integral * delta_x / 3;
}
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
16.03.2014, 00:10  [ТС]     Метод Симпсона #3
Ресурс можете скинуть откуда писался код.
Я нашёл отличный алгоритм в вики.Но там как-то слишком грубо всё делается(погрешность большая).Там сразу весь график приравнивается к пораболе.У меня в методе происходит разбиение на малые отрезки и потом их суммирование.Но почему-то выдаёт ошибку.
nullpointer
 Аватар для nullpointer
45 / 45 / 5
Регистрация: 30.03.2009
Сообщений: 518
16.03.2014, 00:14     Метод Симпсона #4
slevin_45, никакого ресурса нет, писал несколько лет назад лабораторку по численным методам, все по лекциям сделано.
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
16.03.2014, 00:23  [ТС]     Метод Симпсона #5
Беда..
nullpointer
 Аватар для nullpointer
45 / 45 / 5
Регистрация: 30.03.2009
Сообщений: 518
16.03.2014, 00:30     Метод Симпсона #6
slevin_45, на википедии же есть составная квадратурная формула (где используются только известные значения функции) по ней и написана программа
Yandex
Объявления
16.03.2014, 00:30     Метод Симпсона
Ответ Создать тему
Опции темы

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