谢谢‘风花雪月’
下面是我在一个delphi程序上改的,没运行过,大家看看,希望能抛砖引玉。
c *******************************************************
! GM(1,1)
parameter(m=4)
REAL sz(2,m),zjsz(2,m),ymsz(2,m)shuzu(2,m)
REAL D1,D2,D3,D4,V
read(*,*) (sz(1,j),j=1,m)
READ(*,*) (sz(2,j),j=1,m)
d3=sz(2,1)
DO i=1,m-1
ymsz(1,i)=sz(2,i+1)
ENDDO
d1=0
d2=0
DO i=1,m-1
SZ(2,i+1)=SZ(2,i+1)+sz(2,i)
ENDDO
d4=sz(2,m)
DO i=1,m-1
zjsz(1,i)=-(sz(2,i+1)+sz(2,i))/2
ENDDO
DO i=1,m-1
zjsz(2,i)=1
ENDDO
sz(1,1)=0
sz(1,2)=0
DO i=1,m-1 !x(b)的转置
sz(1,1)=sz(1,1)+(zjsz(1,i))**2
sz(1,2)=sz(1,2)+zjsz(1,i)
ENDDO
SZ(2,1)=SZ(1,2)
sz(2,2)=m-1 !sz是x(b)与其转置之积
d1= sz(1,1)*sz(2,2)-sz(1,2)*sz(2,1)
d2= sz(1,1)
sz(1,1)= sz(2,2)/d1
sz(1,2)= -sz(1,2)/d1
sz(2,1)= -sz(2,1)/d1
sz(2,2)= d2/d1 !sz是逆阵
d1=0
d2=0
DO i=1,m-1
d1=d1+zjsz(1,i)*ymsz(1,i)
d2=d2+ymsz(1,i)
ENDDO
zjsz(1,1)=d1
zjsz(1,2)=d2
d1=sz(1,1)*zjsz(1,2)+sz(1,2)*zjsz(1,2)
d2=sz(2,1)*zjsz(1,1)+sz(2,2)*zjsz(1,2)
d1=(d3-d2/d1)*EXP(d1*m*(-1))+d2/d1
v=d1-d4
IF v<1 THEN
d=v
s='0'+d
WRITE(*,*) s
ELSE
WRITE(*,*) v
ENDIF
END |