用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下面附上手绘图来说明,有点粗糙,意思到了就好。这够简单了吧

追问

可以的话 顺便把全部代码写出来吧 谢谢了

追答

#include

#include
#define PI 3.14
int main()
{
int i=0;
float a=0;
long float f=0;
for(i=0;i<30;i++)
{
f=f+(sin(a)+sin(a+PI/60))*(PI/60);/*其实意义不大,因为这样算,误差太大了*/
a+=PI/30;
}
printf("the answer is%lf",f);
}

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网