Я пытаюсь интегрировать функцию 1/((1+x^2)x^0.5)
между 0 и бесконечностью, используя правило трапеции.Интеграция через правило трапеции в C
Мне нужно найти значение N, которое дает максимальную точность при использовании двойного поплавка, которое я сделал, запустив программу с возрастающими значениями N до тех пор, пока не будет разницы между итогами, заданными последовательными значениями N. Однако я застрял в бесконечном цикле.
Благодаря
Бет
#include<stdio.h>
#include<math.h>
#include<float.h>
double inter(double x, double h, double y, double N, double total)
{
h=(y-x)/(N-1);
total= total +0.5*(1/((1+pow(x,2))*sqrt(x)));
x=x+h;
while (x<y)
{
total=total+(1/((1+pow(x,2))*sqrt(x)));
x=x+h;
//printf("t - %lf \n", total);
//printf("x - %lf \n", x);
}
total= total +0.5*(1/((1+pow(x,2))*sqrt(x)));
total=total*h;
return total;
}
main()
{
double x,y,total,h,c,d,f,N, finish;
x=DBL_EPSILON;
y=331;
total=0;
N=0.5;
c=inter(x,h,y,N,total);
d=0;
finish=0;
while(finish==0)
{
d=inter(x,h,y,N,total);
if(d==c)
{
finish=1;
}
else
{
c=d;
d=0;
h++;
printf("%lf/n", h);
}
}
printf("%lf\n", d);
}
Возможно ли, что 'h = (y-x)/(N-1)' в конечном итоге устанавливает «h» в ноль, а условие цикла «x
Codor
@ Codor h также может стать настолько маленьким, что x = x + h не изменяет x из-за неточностей с плавающей запятой – samgak