回 帖 发 新 帖 刷新版面

主题:chi2检测的程序问题


主要问题是精度,所有的real都是*8的精度
f(i)=1./c*1000,因为这里是均匀分布,所有的f(i)都是一样,而c取值是10000
然后f(i)=1001.00000000000000,其实应该等于1000.的
而p(i)=9.99000000000018346e-002,其实应该等于0.1的
这样一来
ita=0
DO i=1,10
ita=ita+f(i)**2./(c*p(i))
ENDDO

ita=ita-10000
######
ita应该等于0,但是由于精度问题,结果却是30.040040039855739,如果ita<5.899就说明这个结果合格,这样一来就让本身合格的ita变成了不合格。很蛋疼的精度问题。

求大神指导

chi2检验的那段程序如下:
!chi2
!chi2...ita=sigma[i](f(i)**2./(n*p(i)))-n
!calculate f(i)
    DO i=1,10
    f(i)=0
    ENDDO

    DO i=1,10
    f(i)=(m(i+1)-m(i)+1)
    ENDDO
    
    DO i=1,10
    WRITE(10,*)f(i)
    ENDDO
!calculate p(i)
    DO i=1,10
    p(i)=0
    ENDDO

    DO i=1,10
    DO j=m(i)+1,m(i+1)-1
    p(i)=p(i)+(a(j+1)-a(j))*0.5*(q(j+1)+q(j))
    ENDDO
    ENDDO

    DO i=1,10
    WRITE(14,*)p(i)
    ENDDO
!calculate ita
    ita=0
    DO i=1,10
    ita=ita+f(i)**2./(c*p(i))
    ENDDO

    ita=ita-c
    ita=(ita**2.)**0.5
    WRITE(11,*)ita
!end
    END 

回复列表 (共1个回复)

沙发

DO i=1,10
    f(i)=(m(i+1)-m(i)+1)
    ENDDO
這才是f(i)的值啊~~~~哪有什么1.0/c*1000啊~~~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册