作者rinb0919 (冷叶)
看板Fortran
标题[问题] 以切割法 求球积分
时间Mon Apr 11 21:03:36 2011
最近又开始在写作业
这次其中有一题 是要求球积分
爬完文後 虽然有人问过一样的问题
但我想利用"切割"法来逼近(以前高中刚开始教积分时的算法)
也就是假设[a,b]区间 切割成n等份
利用左右夹挤 来求得近似解
老师提到 为了增加code的弹性
所以不使用半径的算法
但我写出来後 遇到问题
就是答案根本不正确
因此想请问 我的逻辑是不是不正确 还是有其他error
导致答案错误?
我将球体分成八等份
最後再把体积*8而求得球体积
=======以下为我写的code=======
Program HW2_Q2
implicit none
integer ::i,j,n
real ::a,b !x轴区间
real ::c,d !y轴区间
real ::x,y,z
real ::dx,dy
real ::V !1/8球体体积
real ::sum=0
write(*,*) "n=" !假设切成n等份
read(*,*) n
write(*,*) "a=? ","b=? ","c=? ","d=? "
read(*,*) a,b,c,d !可自订x,y座标
dx= (b-a)/n
dy= (d-c)/n
do i=1,n
x=a+(i-1)*dx
do j=1,n
y=c+(j-1)*dy
if ( x**2+y**2<=1 ) then
z=(1-x**2-y**2)**0.5 !因为开根号内需大於零
V=dx*dy*z
endif
enddo
enddo
sum=(sum+V)*8.0 !乘上8即球体积
write(*,*) "The volume of the sphere= ",sum
stop
End Program HW2_Q2
=========================
跑出来的结果
n=
100
a=? b=? c=? d=?
0,1,0,1 (我的假设)
The volume of the sphere= 1.385833E-05 (大错特错....T_T)
恳请各位高人指导...
谢谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.184.177.30
1F:→ Cypresslin:你的z是多少,然後sum放的位置对吗? 04/11 21:38
2F:→ Cypresslin:^^^^^^^^^^^我看到了= =换页时被吃掉,哈哈 04/11 22:12
3F:→ rinb0919:我解决这个问题了! 谢谢 04/11 22:26
4F:推 tonyruler:sum位置放错啦~ 04/11 22:58
5F:→ rinb0919:已修改 谢谢! 04/11 23:04