Taylor法测试异常:打印x(1)输出3.30448736E+17的排查求助
泰勒法Fortran程序异常输出问题排查
嘿,我懂你看到那个离谱的超大数值时的困惑——咱们来快速揪出问题所在!
首先看你代码里的最后一行:print*,x(1)的内容,这是非法的Fortran语法!Fortran的print语句里,如果要加说明文本,必须把文本放在引号里,不然编译器会把“的内容”当成未定义的变量或者乱码解析,直接去访问错误的内存地址,输出的自然是内存里的随机垃圾值(也就是你看到的3.30448736E+17)。
而你的x(1)其实从一开始就被正确赋值为1.0,而且整个循环里根本没修改过x(1),正常情况下它的值应该是1.0才对。
给你修正后的代码片段,重点看最后一行的print语句:
implicit none real,parameter :: x1=1,y1=2,h=0.5 real,dimension(1:20) :: x,y integer :: n n=1 x(1)= x1 y(1)= y1 do while(n<21) y(n+1)= y(n)+h*x(n)*y(n)+0.5*y(n)*(1+x(n)**2)*h**2 x(n+1)=x(n)+h n=n+1 end do print *, "x(1)的值为:", x(1) ! 这里把说明文本放进引号,语法就合法了
你编译运行修正后的代码,x(1)就会输出正确的1.0啦。另外也可以直接写print *, x(1),只打印变量值,这样更简单。
内容的提问来源于stack exchange,提问作者Samael
相关产品推荐
相关产品推荐

