用c语言如何编写“用梯形法求定积分∫sinxdx的近似值 上限为不b=π下限为a=0”这一问题,求代码
首先解决怎么算,计算机肯定不会积分,所以我开始想用sinx的泰勒展开式,然后选3-4次作为近似,然后积分。听你说梯形法,是数值计算的内容,刚好这学期在学,就把我调试的程序发一个给你吧这是romberg算法,把a 换为0,b换为pi就好了吧。附上书上的代码。
#include<stdio.h>
#include<math.h>
#define f(x) (sin(x))
#define N_H 20
#define MAXREPT 10
#define a 1.0
#define b 2.0
#define epsilon 0.00001
double computeT(double aa,double bb,long int n)
{
int i;double sum=0.0;double h=(bb-aa)/n;
for(i=1;i<n;i++)
{
sum+=f(aa+i*h);
}
sum+=(f(aa)+f(bb))/2;
return (h*sum);
}
void main()
{
int i;
long int n=N_H,m=0;
double T[MAXREPT+1][2];
T[0][1]=computeT(a,b,n);
n*=2;
for (m=1;m<MAXREPT;m++)
{
for (i=0;i<m;i++)
{
T[i][0]=T[i][1];
}
T[0][1]=computeT(a,b,n);
n*=2;
for (i=1;i<=m;i++)
{
T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1);
if((T[m-1][1]<T[m][1]+epsilon)&&(T[m-1][1]>T[m][1]-epsilon))
{
printf("the integrate is %lf\n",T[m][1]);
return;
}
}
}
printf("return no solved...\n");
}
有没有简单点的 我是大一的初学者,做个简单的作业而已,这些东西还没学过,交上去有点不适合吧
那这样吧,如果只求这个sinx的积分,你可以这样,根据积分的定义就是做适当的分割,每个小区间内,用曲面的内接梯形来近似整个曲面的面积(也就是精确积分)。
基于这个你把0到π均分为30份,设置一个long float变量f,每个小区间做一次循环,循环一次,将这个小区间的梯形面积加到f里去,循环30次,最后的f就是近似值。不过我觉得这样算没什么意义。我稍微写几行试试。
int i=0;
float a=0;
long float f;
for(i=0;i<30;i++)
{
f=f+sin(a+pi/60)*(pi/30);
a=a+pi/30;
}/*当然,你可以把30换为其他数字,那60又是什么?当然是30*2,注意包含头文件math.h;pi的问题,有的编译器应该是默认的数学的π,如果不是请把它换为3.14下面附上手绘图来说明,有点粗糙,意思到了就好。这够简单了吧