| 查看: 505 | 回复: 5 | |||
| 当前主题已经存档。 | |||
nuo2004lyn木虫 (正式写手)
|
[交流]
【求助】 关于辛普森积分
|
||
|
想请教一下关于辛普森积分的问题,在进行辛普森积分的时候,是不是有一个软件之类的或者还是要编程进行计算? 谢谢解答 [ Last edited by woshilsh on 2008-12-14 at 20:40 ] |
» 猜你喜欢
实验室接单子
已经有6人回复
假如你的研究生提出不合理要求
已经有11人回复
全日制(定向)博士
已经有5人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有4人回复
Materials Today Chemistry审稿周期
已经有4人回复
参与限项
已经有3人回复
对氯苯硼酸纯化
已经有3人回复
求助:我三月中下旬出站,青基依托单位怎么办?
已经有12人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复
lvjian8596
木虫 (小有名气)
- 应助: 0 (幼儿园)
- 贵宾: 0.014
- 金币: 3531.7
- 红花: 2
- 帖子: 296
- 在线: 209.1小时
- 虫号: 545009
- 注册: 2008-04-13
- 性别: GG
- 专业: 凝聚态物性I:结构、力学和
★ ★ ★ ★
coldwind042(金币+4,VIP+0):非常感谢!现在加大了奖励力度,以后多多留言!
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
nuo2004lyn
木虫 (正式写手)
- 应助: 0 (幼儿园)
- 金币: 2542.1
- 红花: 1
- 帖子: 332
- 在线: 251.1小时
- 虫号: 98595
- 注册: 2005-11-10
- 专业: 能源化工
3楼2008-12-15 19:04:25
4楼2008-12-15 19:20:07
5楼2008-12-15 20:28:22
dakr_sfg
铁虫 (小有名气)
- 应助: 1 (幼儿园)
- 金币: 343.3
- 散金: 7
- 帖子: 124
- 在线: 58.3小时
- 虫号: 626250
- 注册: 2008-10-14
- 性别: GG
- 专业: 金属结构材料
★ ★ ★
woshilsh(金币+3,VIP+0):感谢,期待楼主认可,即可加大奖励,谢谢常来!
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< { data << f[1]<<' '< if(f[1]==0) {break;} } data.close(); return 0; } 用C编的 |
6楼2008-12-23 01:42:51












回复此楼
;