计算方法数值积分含源代码

一.实验题目

数值积分

二.实验目的

学会使用数值积分的方法

三.实验软件

VC++6.0

四.流程图

   

 

float p,q

float H[1]

int m

输入并储存积分上限及积分下限

输入n节点

q=(log(n-1))/(log(2))

       m=int(q+0.5)

调用longbig函数

调用trapezia函数

输出积分结果

五.源程序[NextPage]

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

#include<string.h>

float x[100];

float f[100];

float a,b;

int n;

 

void trapezia(float y,float *S)

{   int i,t;

    t=(b-a)/y;

       for(i=0;i<=t;i++)

              x[i]=a+y*i;

       for(i=0;i<=t;i++)

       {

              f[i]=sin(x[i])/x[i];

              if(x[i]==0)

              f[i]=1;

       }

    (*S)=y*(f[0]+f[t])/2;

       for(i=1;i<t;i++)

        (*S)+=(f[i]*y);

}

void longbig(int l,float *U)

{    float h;

     float *S;

     float T[20],R[20];

     S=R;

     int i,j;

     h=b-a;

     for(i=0;i<=l;i++)

        {

       trapezia(h/pow(2,i),S);

         T[i]=*S;

        }

      for(j=l;j>0;j--)

         for(i=0;i<j;i++)

             T[i]=T[i+1]+((T[i+1]-T[i])/(pow(4,(l-j+1))-1));

     (*U)=T[0];

}

void main()

{   float p,q;

       float H[1];

       int m;

       printf("请输入积分上限\n");

       scanf("%f",&b);

       printf("请输入积分下限\n");

    scanf("%f",&a);

       printf("采用多少节点定步长复化梯形公式?\n");

       scanf("%d",&n);

    q=(log(n-1))/(log(2));

       m=int(q+0.5);

    longbig(m,H);

    p=H[0];

       printf("积分结果为\n");

    printf("%f\n",p);

}

 

六.实验结果

 

 

结果分析:输入积分上限10,下限1,节点5后得出积分结果0.701155,结果与预期相符。

  • 上一篇文章:
  • 下一篇文章:
  • Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有