Консультация № 199961
22.12.2020, 11:24
0.00 руб.
0 5 1
Здравствуйте! У меня возникли сложности с таким вопросом: как вычислить несобственный интеграл на с++?

Обсуждение

давно
Студент
402651
154
22.12.2020, 15:45
общий
это ответ
Здравствуйте, tanya.hryanina!



Приложение:
#include <iostream.h> // добавляем функции для ввода и вывода на экран
#include <math.h> // добавляем математические функции

// функция, интеграл
double f(double x)
{
return sin(x);
}

int main()
{
int i; // счётчик
double Integral; // здесь будет интеграл
double a = 0.0, b = 1.0; // задаём отрезок интегрирования
double h = 0.1;// задаём шаг интегрирования

double n; // задаём число разбиений n

n = (b - a) / h;
// вычисляем интеграл по формуле центральных прямугольников
Integral = 0.0;
for(i = 1; i <= n; i++)
Integral = Integral + h * f(a + h * (i - 0.5));
cout << "I1 = " << Integral << "\n";

// вычисляем интеграл по формуле трапеций
Integral = h * (f(a) + f(b)) / 2.0;
for(i = 1; i <= n-1; i++)
Integral = Integral + h * f(a + h * i);
cout << "I2 = " << Integral << "\n";

// вычисляем интеграл по формуле Симпсона
Integral = h * (f(a) + f(b)) / 6.0;
for(i = 1; i <= n; i++)
Integral = Integral + 4.0 / 6.0 * h * f(a + h * (i - 0.5));
for(i = 1; i <= n-1; i++)
Integral = Integral + 2.0 / 6.0 * h * f(a + h * i);
cout << "I3 = " << Integral << "\n";

system("pause");
}
давно
Посетитель
402845
5
22.12.2020, 17:33
общий
Адресаты:
В том то и дело, что интеграл несобственный и там интегрирование идет от - бесконечности до + бесконечности...
давно
Студент
402651
154
23.12.2020, 00:35
общий
Адресаты:
int i; // счётчик
double Integral; // здесь будет интеграл
double a = 0.0, b = 1.0; // задаём отрезок интегрирования
double h = 0.1;// задаём шаг интегрирования
давно
Студент
402651
154
23.12.2020, 00:40
общий
Адресаты:
как вычислить несобственный интеграл ....
А, что такое несобственный ИНТЕГРАЛ - Вы в курсе...
давно
Студент
402651
154
23.12.2020, 00:42
общий
Адресаты:
#include <stdio.h>
#include <conio.h>
#include <math.h>
// функция для вычисления интеграла
float Integ(float z)
{
return pow(log(z),2)/z;//возвращаемое значение
}

//формула Симпсона
float S2n(int n,float a,float b)
{
int i=1;
float sum=0,h;
h=(b-a)/(2*n);
for(i=1;i<=(2*n-1);i++)
sum+=(3+pow(-1,i+1))*Integ(a+i*h);
return h/3*(Integ(a)+Integ(b)+sum);
}

// главная функция
void main()
{
float a, b, e=0.001;// объявление переменных
int n=20;
a=3.14/2;
b=3.14;
while (fabs(S2n(4*n,a,b)-S2n(2*n,a,b))>=e) // цикл
{
n*=2;
}
printf("S4n=%f",S2n(4*n,a,b)); // вывод результатов
getch();
}
Форма ответа