
fortran运行提示error M6201:math-**,现将代码贴出,求高手帮忙看看,急求解答!
functionf(x)result(f_re)real::x,f_ref_re=32.93*x**2-2344*x+41710endfunctionffunctiong...
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
program main
real(kind=8)::z1=38,v1,v2,q1=174,q2=340,z2_suan,z2,p2,z2_jiashe
real::t=10800.0,q_jun,f,h,g,p1=173.9
v1=g(z1)
do
z2_jiashe=z1+0.001
p2=f(z1)
v2=(q1+q2)/2*t-(p1+p2)/2*t+v1
z2_suan=h(v2)
if(abs(z2_jiashe-z2_suan)<1e-6)then
z2=z2_jiashe
v2=g(z2)
exit
endif
enddo
write(*,'(f20.9)')z2,v2
end program main
运行结果见图 展开
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
program main
real(kind=8)::z1=38,v1,v2,q1=174,q2=340,z2_suan,z2,p2,z2_jiashe
real::t=10800.0,q_jun,f,h,g,p1=173.9
v1=g(z1)
do
z2_jiashe=z1+0.001
p2=f(z1)
v2=(q1+q2)/2*t-(p1+p2)/2*t+v1
z2_suan=h(v2)
if(abs(z2_jiashe-z2_suan)<1e-6)then
z2=z2_jiashe
v2=g(z2)
exit
endif
enddo
write(*,'(f20.9)')z2,v2
end program main
运行结果见图 展开
1个回答
展开全部
我不能确定你的错误是怎么引起的。可能咱们的编译器不同。
你的代码在我这里的问题是:
虚参和实参精度不同。在程序中,你定义了部分 real*8,但是对应的虚参和返回值却定义为 real。比如 主程序里的 z1(双精度),传入函数g里面的x却定义为单精度。
主程序 Do 死循环了。z2_jiashe 和 z2_suan 每一次循环都没有发生改变,于是永远跳不出循环。
我给你的建议是:
同一个程序,统一使用 real*8 或 real*4,尽量不要混用,除非你很自信能理清他们的关系。
检查 Do 循环,尤其是 z2_jiashe 和 z2_suan,是否应该每次循环不同?
追问
照你的提示改了程序,运行没问题,非常感谢!不过新问题是我把上述算法用在数组中求一组解,程序也能够走,只是结果有问题,你能再帮我看下不?具体代码私信给你
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询