誠心求助,一点小疑问,关于梯形法与辛普森法积分的

qq_41095172 2017-11-18 04:29:40
自己写了梯形法与辛普森法积分的程序,但是对函数y=x*(x-1)*(x-2)*(x-3)*(x-4)+7在区间[-1,5]上积分;划分成n个区间求积分,当n=8/16/32...这两种方法求得的数值是一样的,而且都是等于准确值42,反而当n的值很大时才会出现误差,想问一下是怎麽回事?(试过其他函数求积分,并没有出现什么问题)
程序如下:
#include <stdio.h>
#include <math.h>
int n;
double a[6]={1.0,-10.0,35.0,-50.0,24.0,7.0};
double func(double x)
{
int i;
double sum=a[0];
for(i=1;i<6;i++)
sum=sum*x+a[i];
return sum;
}
void Trapezoid(double a,double b,int n)
{
double h, s=0.0;
int i;
h=fabs((b-a)/n);
b=a+h;
for(i=0;i<n;i++)
{
s=s+(func(a+i*h)+func(b+i*h))*h/2.0;
}
printf("%.16lf\n",s);
}
void Simpson(double a,double b,int n)
{
double h, s=0.0;
int i;
h=fabs((b-a)/n);
s=func(a)+func(b);
for(i=1;i<n;i++)
{
if(i%2==0) s=s+2*func(a+h*i);
else s=s+4*func(a+h*i);
}
s=s*h/3;
printf("%.16lf\n",s);
}
int main()
{
double a, b;
printf("Please enter a, b, n:");
scanf("%lf%lf%d",&a,&b,&n);
Trapezoid(a,b,n);
Simpson(a,b,n);
return 0;
}
...全文
121 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-11-21
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧