//JOB(ERCC07,STEPHENS,T=200,L=10000) //OPTIONS(QUOTES,OPT) //ALGOL 'COMMENT' *************** * * * ALGG048 * * * *************** ; 'BEGIN' 'BEGIN' 'COMMENT' THIS PROGRAMME ENABLES ONE TO EXPRESS THE FREQUENCY RESPONSE OF A DYNAMIC SYSTEM AS A RATIO OF TWO FREQUENCY DEPENDENT POLYNOMIALS; 'COMMENT' A0,A6,A12,A30,B3037; 'INTEGER' I,J,X,Y,Z,K,H,F1,F2; 'REAL' PIC,SUM1,SUM2,SUM3,SUM4; X:=READ;Y:=READ;Z:=READ; 'BEGIN' 'REAL' 'ARRAY' LAMDA[0:2*X],S,T,U[0:2*Y],RR,II,AA,MAG,F[0:Z] , M[1:X+Y+1,1:X+Y+1],C,N[1:X+Y+1], O[1:X+1,1:X+1],P[1:Y,1:X+1],Q[1:X+1,1:Y], R[1:Y,1:Y],A[0:X+1],B[0:Y]; 'COMMENT' THIS PART OF THE PROGRAMME EVALUATES RR AND II; A[0]:=A[1]:=A[2]:=A[3]:=A[4]:=0; B[0]:=B[1]:=B[2]:=B[3]:=B[4]:=0; PIC:=3.14159265359/180; 'FOR' K:=0 'STEP' 1 'UNTIL' Z 'DO' 'BEGIN' MAG[K]:=READ;AA[K]:=READ*PIC;F[K]:=READ; RR[K]:=MAG[K]*COS(AA[K]); II[K]:=MAG[K]*SIN(AA[K]); 'END'; 'FOR' H:=0 'STEP' 1 'UNTIL' 2*Y 'DO' 'BEGIN' SUM1:=SUM2:=SUM3:=SUM4:=0; 'FOR' K:=0 'STEP' 1 'UNTIL' Z 'DO' 'BEGIN' SUM1:=('IF' H=0 'THEN' 1 'ELSE' F[K]**H)+SUM1; SUM2:=('IF' H=0 'THEN' 1 'ELSE'(F[K]**H*RR[K]))+SUM2; SUM3:=('IF' H=0 'THEN' 1 'ELSE'(F[K]**H*II[K]))+SUM3; SUM4:=('IF' H=0 'THEN' 1 'ELSE'(F[K]**H*(RR[K]**2+ II[K]**2)))+SUM4; 'END'; LAMDA[H]:=SUM1;S[H]:=SUM2;T[H]:=SUM3;U[H]:=SUM4; 'END'; 'COMMENT' THIS PART OF THE PROGRAMME SETS UP THE MATRICES [M],[N] AND [C] USING THE VALUES OF LAMDA,S,T AND U PREVIOUSL Y EVAULATED. LET THE TRANFER FUNCTION BE G(JW)=A(JW)/B(JW) WHERE THE POLYNOMIALS A AND B ARE OF ORDER X AND Y RESPECTIVELY. ASSUME B(0)=1; L1: 'FOR' I:=1 'STEP' 1 'UNTIL' X+1 'DO' 'FOR' J:=1 'STEP' 1 'UNTIL' X+1 'DO' 'IF' (I+J)'/'2*2#I+J'THEN' O[I,J]:=0 'ELSE' O[I,J]:=LAMDA[I+J-2]; 'FOR' I:=1 'STEP' 1 'UNTIL' Y 'DO' L2: 'FOR' J:=1 'STEP' 1 'UNTIL' X+1 'DO' 'IF' (I+J)'/'2*2=I+J 'THEN' P[I,J]:=T[I+J-1] 'ELSE' P[I,J]:=S[I+J-1]; L3: 'FOR' I:=1 'STEP' 1 'UNTIL' X+1 'DO' 'FOR' J:=1 'STEP' 1 'UNTIL' Y 'DO' 'IF' (I+J)'/'2*2=I+J 'THEN' Q[I,J]:=T[I+J-1] 'ELSE' Q[I,J]:=S[I+J-1]; L4: 'FOR' I:=1 'STEP' 1 'UNTIL' Y'DO' 'FOR' J:=1 'STEP' 1 'UNTIL' Y 'DO' 'IF' (I+J)'/'2*2#I+J'THEN' R[I,J]:=0 'ELSE' R[I,J]:=U[I+J]; L5: 'FOR' I:=1 'STEP' 1 'UNTIL' X+1 'DO' 'IF' I'/'2*2#I'THEN' C[I]:=S[I-1] 'ELSE' C[I]:=T[I-1]; L6: 'FOR' I:=X+2 'STEP' 1 'UNTIL' X+Y+1 'DO' 'IF' (I-X-1)'/'2*2#I-X-1'THEN' C[I]:=0 'ELSE' C[I]:=U[I-X-1]; L7: 'FOR' I:=1 'STEP' 1 'UNTIL' X+1 'DO' N[I]:=A[I-1]; 'FOR' I:=X+2 'STEP' 1 'UNTIL' X+Y+1 'DO' N[I]:=B[I-X-1]; 'BEGIN' 'FOR' I:=1 'STEP' 1 'UNTIL' X+1 'DO' 'IF' I'/'2*2#I'THEN' L8: 'BEGIN' 'FOR' J:=3,4 'STEP' 4 'UNTIL' Y 'DO' Q[I,J]:=-Q[ I, J];'END' 'ELSE' 'BEGIN' 'FOR' J:=1,4 'STEP' 4 'UNTIL' Y 'DO' Q[I,J]:=-Q[I,J]; 'FOR' J:=3,4 'STEP' 4 'UNTIL' X+1 'DO' O[I,J]:=-O[I,J] ; 'END'; 'END'; 'FOR' I:=1 'STEP' 1 'UNTIL' Y 'DO' 'BEGIN' 'IF' I'/'2*2#I'THEN' L9: 'BEGIN' 'FOR' J:=1,2 'STEP' 4 'UNTIL' X+1 'DO' P[I,J]:=- P[ I,J]; 'END' 'ELSE' L10: 'FOR' J:=3,4 'STEP' 4 'UNTIL' X+1 'DO' P[I,J]:=-P[I,J] ; 'FOR' J:=3,4 'STEP' 4 'UNTIL' Y 'DO' R[I,J]:=-R[I,J]; 'END'; L11: 'BEGIN' 'FOR' I:=1 'STEP' 1 'UNTIL' X+Y+1 'DO' 'FOR' J:=1 'STEP' 1 'UNTIL' X+Y+1 'DO' L12: 'IF' I <= X+1 'AND' J <= X+1 'THEN' M[I,J]:=O[I,J] 'ELSE' L13: 'IF' I>X+1 'AND' J <= X+1 'THEN' M[I,J]:=P[I-X-1,J] 'ELSE' L14: 'IF' I <= X+1 'AND' J>X+1 'THEN' M[I,J]:=Q[I,J-X-1] 'ELSE' M[I,J]:=R[I-X-1,J-X-1]; 'END'; 'FOR' I:=1 'STEP' 1 'UNTIL' X+Y+1 'DO' 'FOR' J:=1 'STEP' 1 'UNTIL' X+Y+1 'DO' 'BEGIN' PRINT(M[I,J],0,4); 'IF' J = X+Y+1 'OR' J'/'5*5= J 'THEN' NEWLINES(1); 'END'; 'FOR' I:=1 'STEP' 1 'UNTIL' X+Y+1 'DO' 'BEGIN' PRINT(N[I],0,4); 'IF' I '/'5*5= I 'THEN' NEWLINES(1); PRINT(C[I],0,4); 'IF' I '/'5*5= I 'THEN' NEWLINES(1); 'END'; 'END'; 'END'; 'END' //RUN 4;4;13;1;0;0;1;5;0.1;1.02;10;0.21.12;24;0.5;1.24;31;0.7;1.44; 39;1;2.27;51.5;2;4.44;50.5;4;8.17;28;7;10.05;-6;10;5.56;-59; 20;2.55;-76;40;1.45;-82;70;1;-84;100;