用梯形法编程求函数f(x)=x2+2x+1的定积分 求大神帮我把这个题有c语言或c++编出来,急用,谢谢了
展开全部
#include<stdio.h>
#include<math.h>
double simp(double a,double b,double eps, double (*f)())
{
int n,k;
double h,t1,t2,s1,s2,ep,p,x;
n = 1;
h = b - a;
t1 = h *( (*f)(a) + (*f)(b) ) / 2.0; //计算T1=(b-a)/2*[f(a)+f(b)]
s1 = t1; //用 t1 代替s1
ep = eps + 1.0;
while(ep >= eps)
{
p = 0.0;
for( k = 0; k <= n - 1; k++)
{
x = a + ( k + 0.5) * h;
p = p + (*f)(x);
}
t2 = (t1 + h * p) / 2.0;
s2 = (4.0 * t2 - t1) / 3.0;
ep = fabs( s2 - s1 ); //计算精度
t1 = t2;
s1 = s2;
n = n + n;
printf("n=%d\n",n);
h = h / 2.0;
}
return(s2);
}
double simpf(double x)
{
double y;
y = (pow( x , 2) + 1 + 2 * x);
return(y);
}
main()
{
double a,b,eps,t,simpf();
a = 0.0; //积分下限
b = 1.0; //积分上限
eps = 0.0001;//积分精度
t = simp(a,b,eps,simpf);
printf("\n");
printf("t=%f\n",t);
printf("\n");
getch();
}
---------------
输出:
n=2
n=4
t=2.333333
----------------
函数f(x)=x2+2x+1的定积分的原函数式((x+1)^3)/3+c,在0到1之间结果是7/3=2.3333……
有空学下 辛普森求积公式,在编写程序就简单了。
#include<math.h>
double simp(double a,double b,double eps, double (*f)())
{
int n,k;
double h,t1,t2,s1,s2,ep,p,x;
n = 1;
h = b - a;
t1 = h *( (*f)(a) + (*f)(b) ) / 2.0; //计算T1=(b-a)/2*[f(a)+f(b)]
s1 = t1; //用 t1 代替s1
ep = eps + 1.0;
while(ep >= eps)
{
p = 0.0;
for( k = 0; k <= n - 1; k++)
{
x = a + ( k + 0.5) * h;
p = p + (*f)(x);
}
t2 = (t1 + h * p) / 2.0;
s2 = (4.0 * t2 - t1) / 3.0;
ep = fabs( s2 - s1 ); //计算精度
t1 = t2;
s1 = s2;
n = n + n;
printf("n=%d\n",n);
h = h / 2.0;
}
return(s2);
}
double simpf(double x)
{
double y;
y = (pow( x , 2) + 1 + 2 * x);
return(y);
}
main()
{
double a,b,eps,t,simpf();
a = 0.0; //积分下限
b = 1.0; //积分上限
eps = 0.0001;//积分精度
t = simp(a,b,eps,simpf);
printf("\n");
printf("t=%f\n",t);
printf("\n");
getch();
}
---------------
输出:
n=2
n=4
t=2.333333
----------------
函数f(x)=x2+2x+1的定积分的原函数式((x+1)^3)/3+c,在0到1之间结果是7/3=2.3333……
有空学下 辛普森求积公式,在编写程序就简单了。
展开全部
这个其实很简单,给你做了一个很简单的通用的积分函数,
已经做过优化,自己一调用就可以了,效率很高。
#include <stdio.h>
double f(double x) //返回函数的值
{ double y;
y=x*x+x*2+1.0;
return y;
}
double Integrate(double (*f)(double),double a,double b,int n) //计算函数的定积分
{ double dx,y,sy,x;
if(n<=1)return 0.0;
dx=(b-a)/n;
x=a;
sy=0.0;
for(int i=0;i<=n;i++,x+=dx)
sy+=f(x);
sy-=f(a)/2.0;
sy-=f(b)/2.0;
return sy*dx;
}
void main()
{ double s;
s=Integrate(f, 1, 3, 100000);
printf("s=%lf\n",s);
}
已经做过优化,自己一调用就可以了,效率很高。
#include <stdio.h>
double f(double x) //返回函数的值
{ double y;
y=x*x+x*2+1.0;
return y;
}
double Integrate(double (*f)(double),double a,double b,int n) //计算函数的定积分
{ double dx,y,sy,x;
if(n<=1)return 0.0;
dx=(b-a)/n;
x=a;
sy=0.0;
for(int i=0;i<=n;i++,x+=dx)
sy+=f(x);
sy-=f(a)/2.0;
sy-=f(b)/2.0;
return sy*dx;
}
void main()
{ double s;
s=Integrate(f, 1, 3, 100000);
printf("s=%lf\n",s);
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询