Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/274: Рейтинг темы: голосов - 274, средняя оценка - 4.73
 Аватар для ~DWORD~
5 / 5 / 0
Регистрация: 13.10.2009
Сообщений: 10

Нахождение интеграла методом Симпсона

13.10.2009, 00:12. Показов 53507. Ответов 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
double Simpson(double (*Fx)(double))
{
        double I;
        double h;
        double x;
        double a,b;
        int m;
        
 
        cout << "\n Input integral atributes:\n" << endl;
        cout << "\t-> Enter a = ";
        cin >> a;
 
        cout << "\t-> Enter b = ";
        cin >> b;
 
        cout << "\t-> Enter m = ";
        cin >> m;
 
        h=(b-a)/(m-1);
        x = a;
 
        I = Fx(a) + Fx(b);
        int n=0;
 
        while (n < m-2)
        {
                x = x+h;
                if (n%2==0) I=I+4*Fx(x);
                        else  I = I+2*Fx(x);
                n++;
        }
 
        return I*h/3;
}
синус
C++
1
2
3
4
5
double sinus(double x)
{
       /* формула от какой найти интеграл */
       return x;
}
как правильно записать формулу что бы найти правильное разбиение ? пожалуйста больно не бейте я по алгоритмам больше и по СУБД
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.10.2009, 00:12
Ответы с готовыми решениями:

Нахождение интеграла методом Симпсона
Что не так? #include&lt;iostream&gt; #include&lt;cmath&gt; #include&lt;conio.h&gt; #include&lt;stdio.h&gt; using namespace std; double f(double...

Программа для вычисления интеграла с заданной точностью методом Симпсона и методом Монте-Карло
Здравствуйте, подскажите как решить эту задачу, пожалуйста: Разработать программу для вычисления интеграла с заданной точностью методом...

Решение интеграла методом симпсона
Здравствуйте, помогите исправить программу. Она работает для заданного интеграла с нижней границей -1 и верхней 1. Если задавать другие...

14
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
13.10.2009, 00:35
Цитата Сообщение от ~DWORD~ Посмотреть сообщение
имеется функция
я даже знаю автора этой функции

Цитата Сообщение от ~DWORD~ Посмотреть сообщение
как правильно записать формулу что бы найти правильное разбиение ?
что ты имеешь ввиду? Как записать форумул от которой интеграл взять? Или кол-во разбиений на интервалы? Дело в том, что здесь кол-во разбиений вводит пользователь, так как это фактически является точностью - чем больше интервалом, тем точнее результат.
1
 Аватар для ~DWORD~
5 / 5 / 0
Регистрация: 13.10.2009
Сообщений: 10
13.10.2009, 01:06  [ТС]
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
что ты имеешь ввиду? Как записать форумул от которой интеграл взять?
да я на картинке пример написал только не понимаю как ее сюда добавить
C++
1
2
3
4
5
double sinus(double x)
{
       /* формула от какой найти интеграл */
       return x;
}
заранее спасибо за любую помощь
0
Эксперт по математике/физике
 Аватар для Том Ардер
4218 / 3418 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
13.10.2009, 04:50
Цитата Сообщение от ~DWORD~ Посмотреть сообщение
h=(b-a)/(m-1);
Почему m-1?

[CPP][h=(b-a)/m;/CPP]
m д.б. чётным

Подынтегральная функция
C++
1
2
3
4
5
6
double f(double x)
{
    double r = sin(x);
    r = 1. - r*r/4.;
    return r;
}
Интеграл:
C++
1
2
3
4
5
6
7
8
double I2 = 0, I4 = 0;
for(int k = 2; k<m;k+=2)
{
    I2 += Fx(a+k*h);
    I4 += Fx(a+(k-1)*h);
}
I = Fx(a)+Fx(b)+4*I4+2*I2;
I *= h/3;
1
Эксперт по математике/физике
 Аватар для Том Ардер
4218 / 3418 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
13.10.2009, 11:00
Поправка:
C++
1
2
3
4
5
6
I4 = Fx(a+h);
for(int k = 2; k < m; k += 2 )
{
    I4 += Fx(a+(k+1)*h);
    I2 += Fx(a+k*h);
}
1
Эксперт по математике/физике
 Аватар для Том Ардер
4218 / 3418 / 396
Регистрация: 15.06.2009
Сообщений: 5,818
13.10.2009, 15:38
Ещё 5 копеек:

лучше разделить ввод/вывод и вычисления, примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
double func(double x )
{
    // function code
}
double simpson( double (*Fx)(double), double a, double b, int m);
 
int main()
{
    // ввод параметров
    // ....................
 
    // вычисление интеграла
 
    I = simpson( &func, a, b, m );
 
    // вывод результата
    // ................
}
 
double simpson( double (*Fx)(double), double a, double b, int m)
{
    // здесь код только вычислений
}
1
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
13.10.2009, 17:06
Цитата Сообщение от ~DWORD~ Посмотреть сообщение
да я на картинке пример написал только не понимаю как ее сюда добавить
жмешь "Расширенный режим", далее в тулбаре нажимаешь значек "Скрепки", а дальше думаю разберешься.


Смотри, например тебе нужно взять определнный интеграл от x^2 + 3*x. Тогда пишется функция такая:

C++
1
2
3
4
double somefunc(double x)
{
    return x*x + 3*x;
}
1
 Аватар для ~DWORD~
5 / 5 / 0
Регистрация: 13.10.2009
Сообщений: 10
13.10.2009, 17:47  [ТС]
спасибо всем =)
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <math.h>
#include <iostream.h>
#include <conio.h>
#pragma hdrstop
 
using namespace std;
 
//Ïîäûíòåãðàëüíàÿ ôóíêöèÿ
double func(double x)
{
    double r = sin(x);
    r = 1. - r*r/4.;
    return r;
}
double simpson( double (*Fx)(double), double a, double b, int m);
 
#pragma argsused
int main(int argc, char* argv[])
{
   double I;
   double a,b;
   int m;
 
   cout << "\n Input integral atributes:\n" << endl;
   cout << "\t-> Enter a = ";
   cin >> a;
 
   cout << "\t-> Enter b = ";
   cin >> b;
 
   cout << "\t-> Enter m = ";
   cin >> m;
 
   // âû÷èñëåíèå èíòåãðàëà
 
   I = simpson( &func, a, b, m );
 
   // âûâîä ðåçóëüòàòà
   cout << endl << "      I = " << I;
   getch();
}
 
//---------------------------------------------------------------------------
// Ìåòîä ñèìïñîíà
double simpson( double (*Fx)(double), double a, double b, int m)
{
 
   double h;
   h=(b-a)/m;
 
   double I, I2 = 0, I4 = 0;
   I4 = Fx(a+h);
   for(int k = 2; k < m; 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;
}
//---------------------------------------------------------------------------
3
0 / 0 / 0
Регистрация: 25.10.2009
Сообщений: 5
26.11.2010, 11:50
что такое getch(); ? компилятор выдает на нем следующую ошибку
In function `int main(int, char**)':
`getch' undeclared (first use this function)
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
26.11.2010, 16:56
кирилл0, getch(); - ожидание ввода символа. часто применяется для того, чтоб окно консоли на закрывалось после своего выполнения. находится в conio.h (насколько я помню) и функция не входит в стандарт языка, на сколько я зщнаю.

Лучше используй вместо нее:
либо
C++
1
std::cin.get();
либо
C++
1
system("pause");
0
0 / 0 / 0
Регистрация: 25.10.2009
Сообщений: 5
26.11.2010, 21:53
Monte-Cristo

Спасибо,
0
0 / 0 / 0
Регистрация: 10.02.2010
Сообщений: 37
13.02.2011, 18:34
подскажите где взять <vcl.h> ???
выдает ошибку.
0
0 / 0 / 0
Регистрация: 19.05.2014
Сообщений: 8
21.05.2014, 00:17
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
double Fx(double x)                 //  функція
{ double s; 
s=sin(x);
return s;                                //   повертає значення "х"
}
void __fastcall TForm1::ToolButton1Click(TObject *Sender)
{
double a,b,h,n,s=0,s1=0,s2=0,x; // змінні
int i;
a=StrToFloat(Edit1->Text);        //  нижня межа інтеграла
b=StrToFloat(Edit2->Text);        //  верхня межа інтеграла
n=StrToInt(CSpinEdit1->Text);   //  кількість розбиттів
h=(b-a)/n;                              //  величина кроку
if(a==b)
ShowMessage("Невірні значення a i b");
{for(i=0;i<=n-1;i++)
{x=a+i*h;
if (i%2==0)
s2=s2+Fx(x);
else s1=s1+Fx(x);}
s=h/3*(Fx(a)+Fx(b)+4*s1+2*s2);
Form1->Memo1->Lines->Text="Інтеграл від функції X на проміжку["+FloatToStr(a)+";"+FloatToStr(b)+"] дорівнює "+FloatToStr(s);
}
}
я вот так делал
0
0 / 0 / 0
Регистрация: 12.09.2021
Сообщений: 6
13.09.2021, 23:08
https://www.cyberforum.ru/atta... 1631563623
Миниатюры
Нахождение интеграла методом Симпсона  
0
0 / 0 / 0
Регистрация: 12.09.2021
Сообщений: 6
13.09.2021, 23:09
https://www.cyberforum.ru/atta... 1631563623
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.09.2021, 23:09
Помогаю со студенческими работами здесь

Составить программу для вычисления определенного интеграла методом Симпсона
ПОМОГИТЕ ПОЖАЛУЙСТА Составить программу для вычисления определенного интеграла методом Симпсона. Вид подынтегральной функции F(x)...

Нахождение определенного интеграла методом прямоугольников и методом трапеций
Написать программу, которая находит определенный интеграл \int_{a}^{b}f(x)dx методом прямоугольников и методом трапеций. Исходные данные...

Нахождение определенного интеграла методом Гаусса
Помогите мне пожалуйста... Очень надо, горю...........

Нахождение интеграла методом Ньютона-Котеса
Добрый вечер,Ребят, помогите пожалуйста написать код на С++ Нахождение интеграла методом Ньютона-Котеса Для функции...

Вычисление значения трех определенных интегралов методом трапеций или методом Симпсона
Всем привет, нужна конкретная помощь по написанию проги по такому условию. Написать программу, вычисляющую значение трех определенных...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru