Напишите код c, чтобы оценить интеграл между 0 и y в (x^2)(e^-x^2)dx, используя правило Симпсона (используйте фиксированное число шагов в 20000)
Вторая часть Q: Затем решите интеграл между 0 и y (x^2)(e^(-x^2))dx=0.1 для y, используя скобки и деление пополам.
Вот что я сделал до сих пор:
#include <stdio.h>
#include <math.h>
double f(double x, double y);
int main(void) {
int i, steps;
double a, b, y, h, m, lower, upper, x, simp, val;
/*
* Integrate (x^2)(e^(-x^2)) from 0 to y
*/
steps = 20000;
a = 0;
b = y;
h= (b-a)/steps;
/*
* now apply Simpson's rule. Note that the steps should be even.
*/
simp = -f(a, y);
x = a;
for (i =0; i < steps; i += 2) {
simp += 2.0*f(x,y)+4.0*f(x+h, y);
x += 2*h;
}
simp += f(b, y);
simp *= h/3.0;
/*
* print out the answer
*/
printf("The integral from 0 to y with respect to x by Simpson's Rule is %f\n", simp);
/*
* Now we need to bracket and bisect to find y
*/
lower = 0;
/*
* Lower bound is from turning point
*/
upper = 100;
/*
*Upper value given.
*/
while (upper - lower > 10E-10){
m = (lower + upper)/2;
val = f(m, y);
if (val >=0)
upper = m;
if (val <=0)
lower = m;
}
m = (lower + upper)/2;
printf("The value for y is: %lf\n", m);
return 0;
}
double f(double x, double y) {
return pow(x,2)*exp(pow(-x,2))-0.1;
}
Output: The integral from 0 to y with respect to x by Simpson's Rule is -0.000000
The value for y is: 0.302120
Он работает, но не делает именно то, что мне нужно. Мне нужно иметь возможность продолжать работать с интегралом, когда я использовал 0 и y в качестве пределов. Я не могу этого сделать. Затем продолжайте и решите для y. Это дает мне значение для y, но это не то же самое, что я получаю, если я решу с помощью онлайн-калькуляторов. Кроме того, выход дал ноль для интеграла, даже когда я изменил уравнение, которое будет интегрировано, на x^2. Может ли кто-нибудь помочь объяснить в максимально простых терминах?