当前位置:首页 » 编程语言 » c语言定积分的数值计算梯形
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言定积分的数值计算梯形

发布时间: 2022-07-31 06:45:47

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初始值为h/2 *[f(a)+f(b)] ,后面令i=1,...,n-1来迭代s = s+h*f(a+ih)。

❷ C语言利用梯形法求定积分,小梯形数量200

你不会微积分的话俺写了也白写
=================================================================
/* ∫(0.8-0)cosxdx=sin(0.8)-sin(0)=sin(0.8)
当切割的梯形个数趋于无穷时,答案会等于sin(0.8)
不过计算机位数有限,能切的分数也很有限*/

main()
{
double t=(0.8-0)/200;//每次增量为0.8至0的1/200,这是一小段的长
double x=0.0,s=0.0;//x为坐标图上的x值,用来求高
short i;
for(i=0;i<200;i++)
{
s+=t*cos(x);//用一小段的长*一小段的高 =一小段面积,一小段面积累加出定积分的值
x+=t;//下一个x值
}
printf("%lf\n",s);
}

❸ C语言:用数值积分的矩形法和梯形法计算(sin x)/x在区间[1,2]上的定积分

#include <stdio.h>
#include <math.h>

double integrate(double (*f)(double),double a,double b)
{
double i=1.0/1000000;
double sum=0,x;
for(x=a;x<=b;)
{
sum+=f(x)*i;
x+=i;
}
return sum;
}

double f(double x)
{
return sin(x)/x;
}

int main()
{
int a=1,b=2;
printf("%lf\n",integrate(f, a, b));
return 0;
}

❹ c语言用梯形法求积分

a区间起点,b积分区间中点, n是这个区间划分数。每一个划分的长度为h=(b-a)/n。每一个划分利用梯形算法来求积分,即:上底+下底乘以高再除以2。第一个小梯形面积为 (f(a) + f(a+h))*h/2,第二个为 (f(a+h)+f(a+2h))*h/2,依次类推。将这些加和加起来有:
h*(f(a)/2 + f(a+h) + ... +f(a+(n-1)h) + f(b))/2)。预先将f(a)/2 和f(b)/2加起来,其它数据即f(a+h) + ... f(a+(n-1)n)用循环处理,然后将所有结果乘以h即可。

❺ C语言,用梯形法编程求定积分x^3+x/2+1的值

这个其实很简单,给你做了一个很简单的通用的积分函数,
已经做过优化,自己一调用就可以了,效率很高。

#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);
}

❻ 有关c语言用梯形法求定积分的一个程序,请帮忙修改

#include<stdio.h>
#include<math.h>
doublef(doublex)
{
returnsqrt(4-x*x);
}
main()
{
doublea,b,s1,s2,s,h,m=1E-6;
intn,i;
printf("请输入积分下限a和积分上限b ");
scanf("%lf%lf",&a,&b);
s2=0;
n=10000;
// do
{
s1=s2;
n=2*n;
h=(b-a)/n;
i=1;
s2=0;
do
{
s=(f(a+i*h)+f(a+(i-1)*h))*h/2;
s2=s2+s;
i=i+1;
}
while(i<=n);
}
// while((fabs(s1-s2))>(m*(fabs(s2)-fabs(s1))));
printf("f(x)在[a,b]上的定积分为%.10lf",s2);
return0;
}

❼ c语言课设用累计梯形求定积分

#include
<stdio.h>
#include<math.h>
void
main()
{int
i,n;
float
t,v1,v2,s=0,d,s=0;
printf("请输入分段个数");
scanf("%d",&n);
printf("请输入右端点的值");
scanf("%f",&t);
v1=cos(0);
v2=cos(t);
d=t/n;
for(i=1;i<n;i++)
s+=cos(i*d)
s=s*d+(v1+v2)/2;
printf("cosx从0到%f的定积分的近似值(梯形法)是:%f",t,s);
}

❽ C语言实习用梯形法或辛普森法求解定积分的值

//梯形法求定积分
#include<stdio.h>
#include<math.h>
//定义被积函数
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 += func(x);
}
sum *= h;
printf("sum=%.4lf\n",sum);
}

❾ 用C语言求定积分

实际问题描述:

求定积分近似值

程序代码如下:
#include
#include
void main()
{
int i,n=1000;
float a,b,h,t1,t2,s1,s2,x;
printf("请输入积分限a,b:");
scanf("%f,%f",&a,&b);
h=(b-a)/n;
for(s1=0,s2=0,i=1;i<=n;i++)
{
x=a+(i-1)*h;
t1=(float)exp(-x*x/2);t2(float)=exp(-(x+h)*(x+h)/2);
s1=s1+t1*h; /*矩形面积累加*/
s2=s2+(t1+t2)*h/2; /*梯形面积累加*/
}
printf("矩形法算得积分值:%f. ",s1);
printf("梯形法算得积分值:%f. ",s2);
}
程序运行结果如下:
矩形法算得积分值:0.855821
梯形法算得积分值:0.855624
由上面的比较可知,梯形法的精度要高于矩形法。