; ________________________________________________________________ ; MODEL6.PRO ; The name of this program should I forget it ; ________________________________________________________________ PRO IDEA,X,A,F,PDER ; SUBROUTINE F=0.+A(0)+A(1)*COS(X)+A(2)*SIN(X) ; g (model) PDER=DBLARR(N_ELEMENTS(X),3) ; Partial derivatives PDER(*,0)=1.D0 ; dg/dM PDER(*,1)=COS(X) ; dg/dB_1 PDER(*,2)=SIN(X) ; dg/dC_1 RETURN & END ; Ends any subroutine. ; ________________________________________________________________ ; ; MAIN PROGRAM N =4.D0 & READ,'Choose ..... n = ',N ; n simulated pts Z=1.D0 & READ,'Choose A/sigma = ',Z ; S/N=Signal to noise M =0.D0 & READ,'Choose ..... M = ',M ; Simulated M B_1=0.D0 & READ,'Choose ... B_1 = ',B_1 ; Simulated B_1 C_1=0.D0 & READ,'Choose ... C_1 = ',C_1 ; Simulated C_1 X=4.D0*!PI*RANDOMU(S,N) ; Simulated X Y=M+B_1*COS(X)+C_1*SIN(X) ; Simulation model A =MAX(Y)-MIN(Y) & E =(A/Z) ; A and sigma range E =E*RANDOMN(S,N) ; Random error MOVE=RANDOMN(S,N) ; Simulated y shift Y =Y+(1.+MOVE)*E ; Simulated data J=SORT(X) & X=X(J) & Y=Y(J) & E=E(J) ; Rank order. ; ________________________________________________________________ ERASE & !P.NOERASE=1 ; PLOT X1=0 & X2=MAX(X) ; X-limits Y1=MIN(Y-3.*E) & Y2=MAX(Y+3.*E) ; Y-limits SET_VIEWPORT,.1,.9,.1,.9 ; Viewport place SET_XY,X1,X2,Y1,Y2 ; XY-limits PLOTERR,X,Y,E,PSYM=4 ; Simulated data U=FINDGEN(101)/100.D0 ; Simulated model U=MIN(X)+(MAX(X)-MIN(X))*U ; -"- V=M+B_1*COS(U)+C_1*SIN(U) ; -"- OPLOT,U,V,PSYM=0,LINESTYLE=0 ; -"- W=E^(-2.D0) & B=DBLARR(3) ; w_i and BETA_0 YFIT=CURVEFIT(X,Y,W,B,EB,FUNCTION_NAME='IDEA') ; LSF XX=MIN(X)+(MAX(X)-MIN(X))*FINDGEN(101)/100.D0 ;Argument YY=B(0)+B(1)*COS(XX)+B(2)*SIN(XX) ; Fitted model OPLOT,XX,YY,PSYM=0,LINESTYLE=1 ; -"- ; ________________________________________________________________ PRINT,'LSF gives M = ',B(0),' +/- ',EB(0); PRINT PRINT,'LSF gives B_1 = ',B(1),' +/- ',EB(1); -"- PRINT,'LSF gives C_1 = ',B(2),' +/- ',EB(2); -"- CHI0=TOTAL(((YFIT-Y)/E)^2.D0) & NU=N-3 ; Chi^2, nu=n-Q NYT=1.D0-CHISQR_PDF(CHI0,NU) ; P(CHI^2 > CHI0) PRINT,'CHI^2 = ',CHI0,' Probability = ',NYT ; ; ________________________________________________________________ ; -The nexty line converts CHI0 to string and shows the result. XYOUTS,X1+0.1*(X2-X1),Y1+0.9*(Y2-Y1),STRING(CHI0,'(F8.1)'),SIZE=2 ; ________________________________________________________________ END ; ________________________________________________________________