用c语言如何编写“用梯形法求定积分∫sinxdx的近似值 上限为不b=π下限为a=0”这一问题,求代码

 我来答
帐号已注销
推荐于2016-08-01 · TA获得超过464个赞
知道小有建树答主
回答量:598
采纳率:65%
帮助的人:282万
展开全部

首先解决怎么算,计算机肯定不会积分,所以我开始想用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下面附上手绘图来说明,有点粗糙,意思到了就好。这够简单了吧

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式