用梯形法编程求函数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……
有空学下 辛普森求积公式,在编写程序就简单了。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-26
这个其实很简单,给你做了一个很简单的通用的积分函数,
已经做过优化,自己一调用就可以了,效率很高。

#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);
}本回答被提问者和网友采纳

用梯形法编程求函数f(x)=x*2+2x+1的定积分 跪求设计的数据类型、算法思...
就设double型的就好了吧。然后积分的范围和要分的梯形数目应该允许用户自己输入(当然为了保证积分的准确性可以默认要分成的梯形个数不少于10或者20之类的)。然后积分区间根据梯形个数直接分开,后面的事就是循环套面积公式了。。然后要注意处理f(x)的对称性,如果-1在积分区间里,划分好后要分两边计算...

用梯形法编程求函数f(x)=x*2+2x+1的定积分 跪求设计的数据类型、算法思...
fx=(x+1)2

C语言实习用梯形法或辛普森法求解定积分的值
\/\/定义被积函数 double func(double x){ return sin(x)*cos(x);} void main(){ double a,b,h,x,sum;int i,n;printf("Input a b and n: ");scanf("%lf%lf%d",&a,&b,&n);h=(b-a)\/n;x=a;sum=(func(a)+func(b))\/2;for(i=1; i<n; i++){ x += h;sum += ...

c语言 求定积分的通用函数
include <stdio.h>#include <stdlib.h>#include<math.h>\/\/功能:返回f(x)在积分区间[a,b]的值\/\/参数:FunCallBack 指向用于计算f(x)的函数\/\/ a 积分区间的起始值\/\/ b 积分区间的结束值\/\/ dx 横坐标的间隔数,越小计算结果越准确double Calculate(double (*FunCallBack)(double...

...程序改为c++语言,程序为用矩形法求fx=1\/(1+x^2)在0到1的定积分近似...
return -1;double h=(b-a)\/n;int i;x1=x2=x3=0;for(i=0;i<n;i++){ x1+=f(a+i*h);x2+=f(a+(i+0.5)*h);x3+=f(a+(i+1)*h);} x1*=h;x2*=h;x3*=h;return 1;} void tang::show(){ calc();double ret=atan(b)-atan(a);cout<<"函数f(x)=1\/(1+x*...

C语言编程:求cosx sinx 2x+1 在(a,b)的定积分 ab的值从键盘输入。(1...
n){ double step=(b-a)\/n;double sum=0;for(double i=a;i<=b-step;i+=step){ sum+=0.5*step*(p(i+step)+p(i));} return sum;} double cosx(double x){ return cos(x);} double sinx(double x){ return sin(x);} double line(double x){ return (double)2*x+1;} ...

C语言求定积分的问题。
根据梯形法求积分的原理,设间隔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...

用c语言如何编写“用梯形法求定积分∫sinxdx的近似值 上限为不b=π下 ...
首先解决怎么算,计算机肯定不会积分,所以我开始想用sinx的泰勒展开式,然后选3-4次作为近似,然后积分。听你说梯形法,是数值计算的内容,刚好这学期在学,就把我调试的程序发一个给你吧这是romberg算法,把a 换为0,b换为pi就好了吧。附上书上的代码。 #include<stdio.h> #include<math.h> #define f(x) (...

怎样编写c语言积分函数
公式积分:部分函数可以直接用公式求得其不定积分函数。C语言中可以直接用积分公式写出其积分函数。数值积分:按照积分的定义,设置积分范围的步长,用梯形面积累加求得其积分。以【f(x)=x*sin(x) 从1到2的积分】为例:include <math.h>#include <stdio.h>double integral(double(*fun)(double x)...

C语言:利用函数指针编写一个用矩形法求定积分的通用函数,包括正弦,余弦...
for(i=0;i<n;i++)这里用i<=n的话会多计算一个区间

相似回答