Посмотрите Практикум по программированию на языке С, обратите внимание на стр. 45 - 53
1 лайк
посмотрел и примерно прикинул
Надеюсь покажите что в итоге вышло?
1 лайк
хорошо
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <iomanip>
using namespace std;
void IRect(double A, double B, double E, double &I, int &N)
//численное интегрирование функций методом средних прямоугольников
//A,B - интервал интегрирования
//E - заданная точность
//Y - значение интеграла
//N - число отрезков разбиения
{
double Res, //значение интеграла
ts, //погрешность
h, //шаг
z, //значение интеграла на предыдущем шаге
s, //интегральная сумма
x; //значение аргумента
int j; //параметр цикла
A = 0; //начальный промежуток
B = M_PI; //конечный промежуток
N = 2; //начальное число отрезков разбиения
Res = 1E10; //начальное значение интеграла
E = 0.001; //точность измерения
do //цикл вычисления интеграла с заданной точностью
{
N = N * 2; //удваиваем число отрезков разбиения
z = Res; //запомнили предыдущее значение интеграла
h = (B - A) / N; //шаг
s = 0; //значение интегральной суммы
for (j = 1; j <= N; j++) //вычисление интеграла по формуле средних
{ //прямоугольников для заданного числа отрезков
x = A + j * h; //вычислили значение аргумента
s = s + (5 * x * sin(x)); //добавили в интегральную сумму
}
Res = s * h; //текущее значение интеграла
ts = fabs(Res - z)/3.0; //вычислили погрешность. 3 берётся по првилу Рунге, где погрешность вычисляется * на 1/3
}
while (ts >= E); //пока погрешность не станет меньше точности
I = Res - ts;
}
int main(int argc, char** argv)
{
double a, b;//пределы интегрирования
double eps;//точность интегрирования
double I;//значение интеграла
int N;//число отрезков разбиения
setlocale(LC_ALL,"Russian");
IRect(a, b, eps, I, N);
cout << "Значение интеграла: " << fixed << setprecision(5)<< I << endl;//вывод интеграла
cout << "Число отрезков разбиения: " << N << endl;//вывод интеграла
system("pause");//задержка экрана до нажатия любой клавиши
return 0;
}
можете пожалуйста помочь с кодом?, а то не понимаю
У меня в ответе выходит интеграл равен 17,706, при числе разбиения 128.
Если я решаю в ручную, то при таком числе разбиения у меня выходит 17,708, хотя преподователь говорит в ручном правильно Что у меня неправильно, число разбиения ?
код я делал с помощью метода средних прямоугольников, а погрешность по правилу Рунге
А как вручную?
с помощью Excel
там в файле для 29 числа разбиения
поможете ?
Если в Экселе повторяется тот же алгоритм, что в коде, то можно в коде добавить вывод промежуточных значений на каждом шаге, чтобы понять что отличается.