#include
double func(double x) {
return x * x * x + 2 * x * x - 1;
}
double integral(int n, double left, double right) {
double h = (right-left)/n;
double sum = 0;
for (double xi = left; xi <= right; xi = xi + h) {
sum += func(xi);
}
return h * sum;
}
int main()
{
double res10 = integral(10,1,4);
printf("%lf\n",res10);
double res100 = integral(100,1,4);
printf("%lf\n",res100);
return 0;
}
#include
double f(double x) { return x*x*(3.*x+2.)-1.; }
void left_rectangles(double a, double b, int n)
{
double h = (b - a) / n, S = 0.;
for (int i = 0; i < n; ++i) S += f(a+i*h);
printf("S(%d) = %f\n", S * h);
}
int main()
{
left_rectangles(1., 4., 10);
left_rectangles(1., 4., 100);
}
Вот что выведет:А интеграл равен 230,25. В общем, метод левых прямоугольников сам по себе неточный, а тут ещё их количество 10 или 100, что приводит к достаточно заметной ошибке...
#include
double func(double x) {
return x * x * x + 2 * x * x - 1;
}
double integral(int n, double left, double right) {
double h = (right-left)/(n-1);
double sum = 0;
for (double xi = left; xi <= right; xi = xi + h) {
printf("%lf\n",xi);
sum += func(xi);
}
return h * sum;
}
int main()
{
double res10 = integral(10,1,4.0);
printf("%lf\n",res10);
double res100 = integral(100,1,4);
printf("%lf\n",res100);
return 0;
}
double func(double x) {
return x * x * (x + 2) - 1;
}
double integral(double f(double), double a, double b, int n) {
double sum = 0.0;
for (int i = 0; i < n; ++i) {
sum += f((a * (n - i) + b * i) / n);
}
return sum * (b - a) / n;
}
int main() {
printf(" 10: %lg\n", integral(func, 1.0, 4.0, 10));
printf("100: %lg\n", integral(func, 1.0, 4.0, 100));
}