//JOB(ERCC07,STEPHENS,T=200,L=10000) //OPTIONS(QUOTES,OPT) //ALGOL 'COMMENT' *************** * * * ALGG016 * * * *************** ; 'BEGIN''COMMENT' FORSYTHE'S LEAST SQUARE FIT; 'PROCEDURE' FORS(M,SMIN,B,R,Q,C,YY,W,X,Y,N); 'VALUE' M,N; 'INTEGER' M,N; 'REAL' SMIN; 'ARRAY' B,R,Q,C,YY,W,X,Y; 'BEGIN' 'INTEGER' I,J,K; 'REAL' S,T,E1,E2,F1,E3,F3,E4,G; 'FOR'I:=1'STEP'1'UNTIL'N'DO' Q[1,I]:=0.5; 'IF'M=1'THEN''GOTO' L1; S:=0; T:=0; 'FOR'I:=1'STEP'1'UNTIL'N'DO' 'BEGIN' S:=S+W[I]*X[I]*0.25; T:=T+W[I]*0.25; 'END'; B[1]:=-2*S/T; 'FOR'I:=1'STEP'1'UNTIL'N'DO' Q[2,I]:=(2*X[I]+B[1])*0.5; 'IF'M=2'THEN''GOTO' L1; K:=M-1; 'FOR'I:=2'STEP'1'UNTIL'K'DO' 'BEGIN' E1:=0; F1:=0; E2:=0; 'FOR'J:=1'STEP'1'UNTIL'N'DO' 'BEGIN' E1:=E1+W[J]*(Q[I,J]**2); F1:=F1+W[J]*(Q[I-1,J]**2); E2:=E2+W[J]*X[J]*(Q[I,J]**2); 'END'; R[I-1]:=-E1/F1; B[I]:=-2*E2/E1; 'FOR'J:=1'STEP'1'UNTIL'N'DO' Q[I+1,J]:=(2*X[J]+B[I])*Q[I,J]+R[I-1]*Q[I-1,J]; 'END'; L1: 'FOR'I:=1'STEP'1'UNTIL'M'DO' 'BEGIN' E3:=0; F3:=0; 'FOR'J:=1'STEP'1'UNTIL'N'DO' 'BEGIN' E3:=E3+W[J]*Y[J]*Q[I,J]; F3:=F3+W[J]*(Q[I,J]**2); 'END'; C[I]:=E3/F3; 'END'; 'FOR'I:=1'STEP'1'UNTIL'N'DO' 'BEGIN' E4:=0; 'FOR'J:=1'STEP'1'UNTIL'M'DO' E4:=E4+C[J]*Q[J,I]; YY[I]:=E4; 'END'; SMIN:=0; 'FOR'I:=1'STEP'1'UNTIL'N'DO' 'BEGIN' G:=0; 'FOR'J:=1'STEP'1'UNTIL'M'DO' G:=G+(C[J]**2)*(Q[J,I]**2); SMIN:=SMIN+W[I]*(Y[I]**2-G); 'END'; 'END'; 'PROCEDURE' CPUTIM(T); 'REAL' T; 'EXTERNAL'; 'COMMENT' START OF THE MAIN ROUTINE; 'INTEGER' M,N,I,J; 'REAL' SMIN,T; CPUTIM(T); N := READ; 'BEGIN' 'ARRAY' W,X,Y,B,R,C,YY[1:N],Q[1:N,1:N]; 'FOR'I:=1'STEP'1'UNTIL'N'DO' W[I] := READ; 'FOR'I:=1'STEP'1'UNTIL'N'DO' X[I] := READ; 'FOR'I:=1'STEP'1'UNTIL'N'DO' Y[I] := READ; 'FOR'M:=1'STEP'1'UNTIL'N'DO' FORS(M,SMIN,B,R,Q,C,YY,W,X,Y,N); 'FOR'I:=1'STEP'1'UNTIL'N'DO' OUTPUT(C[I]); 'END'; CPUTIM(T); OUTPUT(T); 'END' //RUN 13,1.50,1.80,2.10,2.50,2.80,3.10,3.50,3.90,4.00,4.10,4.10,4.10,4.20, 1.80,3.00,4.20,5.10,6.00,6.60,7.20,8.60,9.60,10.00,11.20,12.00,14.70, 0.23,0.71,1.35,2.16,3.49,4.33,6.51,8.84,9.18,9.40,9.63,8.81,9.93,