本帖最后由 武清河 于 2014-4-7 13:40 编辑
我又照你的提示改了下程序:z2,v2,q2,p2 数组长度还是7,i循环从1到7,输入文件不变,运行结果基本没问题。其实这就是一个水文学上水库调洪计算的试算法,谢谢你的指拨!另外,我还有一点不懂,就是我在if块中z2(i)=z2_jiashe这条语句下面加上 p2(i)=f(z2(i)),其他不变,在输出p2数组时不能得到正确结果,然而我直接输出f(z2(i))就能得到正确结果,你能帮我解释下这是怎么回事不?修改后的代码[Fortran] 纯文本查看 复制代码 program main
real,dimension(12)::z1,v1,q1,p1
real::t=10800,z2_jiashe,q_pj,f,h,g,z2_suan
real,dimension(11)::z2,v2,q2,p2
open(1,file='1.dat')
open(2,file='2.out')
read(1,*)q1,q2
!READ*,Q1,Q2
z1(1)=38.0
p1(1)=173.9
do i=1,11
v1(i)=g(z1(i))
q_pj=(q1(i)+q2(i))/2
do j=-10000,10000
z2_jiashe=z1(i)+0.0001*j
p2(i)=f(z2_jiashe)
v2(i)=q_pj*t-(p1(i)+p2(i))/2*t+v1(i)
z2_suan=h(v2(i))
if(abs(z2_jiashe-z2_suan)<1e-4)then
z2(i)=z2_jiashe
v2(i)=g(z2(i))
p2(i)=f(z2(i))
z1(i+1)=z2(i)
p1(i+1)=p2(i)
endif
enddo
enddo
do i=1,11
write(2, '(3f20.9)'),z2(i),p2(i),v2(i)
enddo
end program main
function f(x) result(f_re)
real::x,f_re
f_re=32.93*x**2-2344*x+41710
end function f
function g(x) result(g_re)
real::x,g_re
g_re=1.911e-4*x**7.297
end function g
function h(x) result(h_re)
real::x,h_re
h_re=3.24*x**0.1369
end function h
如下
|