📄 mrqmin.for
字号:
SUBROUTINE mrqmin(x,y,sig,ndata,a,ia,ma,covar,alpha,nca,chisq,
*funcs,alamda)
INTEGER ma,nca,ndata,ia(ma),MMAX
REAL alamda,chisq,funcs,a(ma),alpha(nca,nca),covar(nca,nca),
*sig(ndata),x(ndata),y(ndata)
PARAMETER (MMAX=20)
CU USES covsrt,gaussj,mrqcof
INTEGER j,k,l,mfit
REAL ochisq,atry(MMAX),beta(MMAX),da(MMAX)
SAVE ochisq,atry,beta,da,mfit
if(alamda.lt.0.)then
mfit=0
do 11 j=1,ma
if (ia(j).ne.0) mfit=mfit+1
11 continue
alamda=0.001
call mrqcof(x,y,sig,ndata,a,ia,ma,alpha,beta,nca,chisq,funcs)
ochisq=chisq
do 12 j=1,ma
atry(j)=a(j)
12 continue
endif
do 14 j=1,mfit
do 13 k=1,mfit
covar(j,k)=alpha(j,k)
13 continue
covar(j,j)=alpha(j,j)*(1.+alamda)
da(j)=beta(j)
14 continue
call gaussj(covar,mfit,nca,da,1,1)
if(alamda.eq.0.)then
call covsrt(covar,nca,ma,ia,mfit)
return
endif
j=0
do 15 l=1,ma
if(ia(l).ne.0) then
j=j+1
atry(l)=a(l)+da(j)
endif
15 continue
call mrqcof(x,y,sig,ndata,atry,ia,ma,covar,da,nca,chisq,funcs)
if(chisq.lt.ochisq)then
alamda=0.1*alamda
ochisq=chisq
do 17 j=1,mfit
do 16 k=1,mfit
alpha(j,k)=covar(j,k)
16 continue
beta(j)=da(j)
17 continue
do 18 l=1,ma
a(l)=atry(l)
18 continue
else
alamda=10.*alamda
chisq=ochisq
endif
return
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -