Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Вычислить значение определенного интеграла по формуле язык С

shigure Ученик (96), открыт 1 неделю назад
прошу помочь на языке С
3 ответа
kgs itq Ученик (212) 1 неделю назад
А зачем Си то изучать, когда есть Си ++
Павел Михаловский Просветленный (32437) 1 неделю назад
 #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;
}
АндрейВысший разум (427028) 1 неделю назад
Твой цикл делает на одну итерацию больше - даже если заменить xi <= right на xi < right.
https://onlinegdb.com/gqg5qoclY
Да это вообще всё какая-то чушня! Пишем такой, например, код:
 #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, что приводит к достаточно заметной ошибке...
Павел МихаловскийПросветленный (32437) 1 неделю назад
 #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;
}

Даже так
Андрей Высший разум (427028) 1 неделю назад
 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));
}
Похожие вопросы