下面程序是用梯形法求定积分,程序没错,能执行的。我不明白的是语句 s=(fun(a)+fun(b))/2;。s的初值为什么要是 (fun(a)+fun(b))/2;?我觉得s的初值应该是0。累加嘛,一开始应该为0才对啊。
我试过,如果s的初值为0,误差比较大。
#include <math.h>
float integral(float(*fun)(float x),float a,float b,int n)
{float s,h,y;
int i;
s=(fun(a)+fun(b))/2;
h=(b-a)/n; /*积分步长*/
for(i=1;i<n;i++)
s=s+fun(a+i*h);
y=s*h;
return y;/*返回积分值*/
}
float f(float x)
{return(x*sin(x)) /*修改此处可以改变被积函数*/
}
main()
{float y;
y=integral(f,1.0,2.0,150);/*修改此处可以改变积分上下限和步长*/
printf("y=%f\n",y);
}
æ ¹æ®æ¢¯å½¢æ³æ±ç§¯åçåçï¼è®¾é´éh= (b-a)/nï¼å积åè¿ä¼¼è®¡ç®å ¬å¼ä¸ºï¼
s = h/2 *[f(a)+f(a+h)] + h/2 *[f(a+h)+f(a+2h)] +...+h/2 *[f(b-h)+f(b)]
= h/2 *[f(a)+f(b)] + h* [ f(a+h) + f(a+2h) + f(a+3h) + ... + f(b -h)]
令积åsåå§å¼ä¸º h/2 *[f(a)+f(b)] ï¼åé¢ä»¤i=1,...,n-1æ¥è¿ä»£s = s+h*f(a+ih)ã