我正在尝试编写代码并定义一个运行MRQMIN子例程所需的函数
program mrqmin
!ifort mrqmin.f90 module_cosmo.o gaussj.o covsrt.o nrtype.o nrutil.o nr.o -o mrqmin
implicit none
integer i,b,ok
double precision,dimension(:),allocatable :: a,Nrow,iz,Nbin,fi,fiStdDev,fiAvr,Magbin,zup
double precision,dimension(:),allocatable :: fiStdDev2,RfiStdDev2,fi_expected,DFI,CHISQ
double precision fi_star,alpha,M_star
open(1,file='new.asc')
b=14
! Ln10=2.3025
A=0.4*2.3025
do I=1,b
read (1,*) Nrow(I),iz(I),Nbin(I),fi(I),fiStdDev(I),fiAvr(I),Magbin(I),zup(I)
fiStdDev2(I)=fiStdDev(I)*fiStdDev(I)
RfiStdDev2(I)=1/fiStdDev2(I)
write(*,*)fiStdDev2(I),RfiStdDev2(I)
fi_expected(I)=A*fi_star*10**(0.4*(alpha+1)*(M_star-Magbin(I)))*exp(-10**(0.4*(M_star-Magbin(I))))
DFI(I)=fi_expected(I)-FI(I)
CHISQ(I)=DFI(I)*DFI(I)*RfiStdDev2(I)
end do
deallocate(a,Nrow,iz,Nbin,fi,fiStdDev,fiAvr,Magbin,zup,fiStdDev2,RfiStdDev2,fi_expected,CHISQ,DFI)
end program mrqmin
但是我正在接收错误:数组表达式的形状不符合。 [FI_EXPECTED]
如果我在其他代码中使用了相同形状的这个函数,但我没有问题,我可以理解我的错误在哪里?
答案 0 :(得分:0)
编译器告诉你完全问题出在哪里:在定义fi_expected
的行中:
fi_expected(I)=A*fi_star*10**(0.4*(alpha+1)*(M_star-Magbin(I)))&
*exp(-10**(0.4*(M_star-Magbin(I))))
请注意,fi_expected
的维度为b
,而A
的维度为3
。这是因为Fortran 不区分大小写,因此a
和A
是相同的,因此您需要将a
与A
区分开来你感觉最好的方式。
另请注意,您在分配之前定义A
,这将导致运行时错误。