24小时热门版块排行榜    

查看: 506  |  回复: 5
当前主题已经存档。

nuo2004lyn

木虫 (正式写手)

[交流] 【求助】 关于辛普森积分

想请教一下关于辛普森积分的问题,在进行辛普森积分的时候,是不是有一个软件之类的或者还是要编程进行计算?

谢谢解答

[ Last edited by woshilsh on 2008-12-14 at 20:40 ]
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lvjian8596

木虫 (小有名气)

★ ★ ★ ★
coldwind042(金币+4,VIP+0):非常感谢!现在加大了奖励力度,以后多多留言!
给你一段关于simpson积分的fortran 代码
mesh是产生网格的个数,func是在格点上的函数值,rab是格点距离,asum是积分结果
subroutine simpson2(mesh,func,rab,asum)
  !-----------------------------------------------------------------------
!
  !     simpson's rule integrator for function stored on the
  !     radial logarithmic mesh
  !

  implicit none

  integer :: i, mesh
  real(8) ::  rab(mesh), func(mesh), f1, f2, f3, r12, asum

      !     routine assumes that mesh is an odd number so run check
      !     if ( mesh+1 - ( (mesh+1) / 2 ) * 2 .ne. 1 ) then
      !       write(*,*) '***error in subroutine radlg'
!       write(*,*) 'routine assumes mesh is odd but mesh =',mesh+1
!       stop
!     endif

  asum = 0.0d0
  r12 = 1.0d0 / 12.0d0
  f3  = func(1) * rab(1) * r12

  do i = 2,mesh-1,2
     f1 = f3
     f2 = func(i) * rab(i) * r12
     f3 = func(i+1) * rab(i+1) * r12
     asum = asum + 4.0d0*f1 + 16.0d0*f2 + 4.0d0*f3
  enddo

  return
end subroutine simpson2
2楼2008-12-14 19:27:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nuo2004lyn

木虫 (正式写手)

你这是用的什么东西?matlab?
3楼2008-12-15 19:04:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lvzhu2007

荣誉版主 (著名写手)

fortran
4楼2008-12-15 19:20:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

archun

铜虫 (初入文坛)

★ ★
lei0736(金币+2,VIP+0):谢谢
simpson积分我觉得还是用自适应步长比较好。给定一个精度,步长从1开始增加叠代计算,当两次叠代求得的值相差小于这个精度时即停止。当然要用到编程。
5楼2008-12-15 20:28:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dakr_sfg

铁虫 (小有名气)

★ ★ ★
woshilsh(金币+3,VIP+0):感谢,期待楼主认可,即可加大奖励,谢谢常来!
#include
#include
#include
using namespace std;

ofstream data("data_xya.dat";
// 添加函数,我这里是fx(x)和fy(y),可以改成一个函数
void sim(float a,float *b,float *IX,float *IY)
{   float x,y;
     x=(*b-a)*(fx(a)+4*fx(a/2+*b/2)+fx(*b))/6;
         y=(*b-a)*(fy(a)+4*fy(a/2+*b/2)+fy(*b))/6;
          *IX=x;
          *IY=y;
}//simpson三点线性差值积分公式
float deal(float a,float b,float *ix,float *iy)
{   float ix0=0,iy0=0,ix1=0,iy1=0,ix2=0,iy2=0,t,m,n;
    t=(a+b)/2;
        sim(a,&b,&ix0,&iy0);
        sim(a,&t,&ix1,&iy1);
        sim(t,&b,&ix2,&iy2);
        m=ix0-ix1-ix2;
        n=iy0-iy1-iy2;
        if((m*m)<(k*k/2)&&(n*n)<(k*k/2))
         { *ix=ix1+ix2;
           *iy=iy1+iy2;}
         else
     {b=(a+b)/2;*ix=0;}
         return(b);
}//步长计算函数
main()
{       float a=0,b=17.4,ix=0,iy=0,x=0,y=0;
        int X=0,A=1,i=1;
        float f[100][100]={0},ANGLE[100]={0};
        b=deal(a,b,&ix,&iy);
                while(1)
                {    while(!ix)
                        {b=deal(a,b,&ix,&iy);}
                 f[X+1][1]=f[X][1]+ix;
                 f[X+1][2]=f[X][2]+iy;
                         X++;
                     ANGLE[A]=b;
                 A++;
                         ix=0;
                         a=b;
                         b=17.4;
                         if((17.4-a)<0.01)
                         { break;}
                }
                data<<0<<' '<<0<<' '<<0<         while(1)
                {    data << f[1]<<' '<[2]<<' '<<                      i++;
             if(f[1]==0)
                         {break;}
                }
                data.close();
        return 0;

}
用C编的
6楼2008-12-23 01:42:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 nuo2004lyn 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见