Fortran Coder

查看: 11654|回复: 1
打印 上一主题 下一主题

[求助] 相关系数求取问题

[复制链接]

57

帖子

15

主题

0

精华

熟手

F 币
242 元
贡献
166 点
跳转到指定楼层
楼主
发表于 2020-5-6 18:16:42 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
这是我写的两个subroutine
!线性趋势检验
[Fortran] 纯文本查看 复制代码
subroutine ls(n,x,y,yz)
integer::n,i
real::x(n),y(n),yx(n),yz(n),b2,b1,s1,s2,s3,s4,q,u,f,as3
s1=0.0
s2=0.0
s3=0.0
s4=0.0
u=0.0
q=0.0
do i=1,n
s1=s1+x(i)*y(i)
s2=s2+x(i)
s3=s3+y(i)
s4=s4+x(i)**2
enddo
b2=(n*s1-s2*s3)/(n*s4-s2**2)
b1=(s3-b2*s2)/n
do i=1,n
yx(i)=b1+b2*x(i)
yz(i)=y(i)-yx(i)
enddo

as3=s3/n
   do i=1,n
  q=q+(y(i)-yx(i))**2
  u=u+(yx(i)-as3)**2
enddo
f=(u/1)/(q/(n-1-1))
print*,'podu',b2
print*,'jianyan f',f
end subroutine

!相关系数
subroutine r2(n,x,y,corr)
implicit none
integer::n,i
real::x(n),y(n),s1,s2,s3,s4,s5,corr
s1=0.0
s2=0.0
s3=0.0
s4=0.0
s5=0.0
do i=1,n
s1=s1+x(i)*y(i)
s2=s2+x(i)
s3=s3+y(i)
s4=s4+x(i)**2
s5=s5+y(i)**2
enddo
corr=(n*s1-s2*s3)/sqrt((n*s4-s2**2)*(n*s5-s3**2))
print *, corr
end subroutine
end module


这是主程序的代码
  call indexit(ymd(1,1),12,31)
  if(v<365)then
  call ls((soy-1),ytemminave(2:soy),soya(2:soy),yz)
  call r2((soy-1),soya(2:soy),ytemminave(2:soy),corr)
   else
   call ls(soy,ytemminave,soya,yz)
   call r2(soy,soya,ytemminave,corr)
  end if

然后就是我这个筛选的意思就是:如果这个数据中的第一年是一整年的话我就把这个年份数组从头至尾都要算上,如果第一年不是一整年,我就要从第二年开始算起
问题就出在标红的这一行,编译的时候没有问题,但是运行时会出现这个错误,如果去掉就会正确,加上就会错误
也出现了有时能得出结果,有时不能得出结果的情况
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
沙发
发表于 2020-5-7 09:29:50 | 只看该作者
1、给出完整的、可以执行的代码。
2、给错误提示。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-24 00:46

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表