"CODE"36022; "PROCEDURE" MINMAXPOL(N,M,Y,FY,CO,EM); "VALUE" N,M;"INTEGER" N,M; "ARRAY" Y,FY,CO,EM; "COMMENT" MINMAXPOL CALCULATES THE COEFFICIENTS, CO[I],I=,.....N OF THE POLYNOMIAL P(Y)=CO[0]+CO[1]*Y+...+CO[N]*Y**N, THAT APPROXIMATES THE DISCRETE FUNCTION FY[I],I=0,...M, GIVEN FOR THE ARGUMENTS Y[I],I=0,...M, IN THE MINIMAX NORM. THE ARGUMENTS MUST BE GIVEN IN MONOTONE INCREASING ORDER. IN ARRAY EM[0:3], ONE MUST GIVE THE MAXIMUM ALLOWED NUMBER OF ITERATIONS,EM[2]. MOREOVER, EM[0]:=THE DIFFERENCE OF THE GIVEN FUNCTION AND THE POLYNOMIAL IN THE FIRST APPROXIMATION POINT, EM[1]:=THE MAXIMUM OF ! P(Y[I])-FY[I]! FOR I=0,...M, EM[3]:=THE NUMBER OF ITERATIONS PERFORMED. THE PROCEDURES ELMVEC,DUPVEC,POL,NEWTON,NEWGRN, INI,SNDREMEZ ARE USED. REFERENCE:MEINARDUS,G.(1964,CH.7), APPROXIMATION VON FUNKTIONEN UND IHRE NUMERISCHE BEHANDLUNG; "BEGIN" "INTEGER" NP1,K,POMK,COUNT,CNT,J,MI; "REAL" E,ABSE,ABSEH; NP1:=N+1; "BEGIN" "INTEGER" "ARRAY" S[0:NP1]; "ARRAY" X,B,COEF[0:NP1] ,G[0:M]; "PROCEDURE" ERRPOL(N,M,E,CO,S,Y,FY,G); "VALUE" N,M,E;"INTEGER" N,M; "REAL" E; "INTEGER" "ARRAY" S;"ARRAY" CO,Y,FY,G; "COMMENT"ERRPOL DELIVERS THE VALUE OF CO[0]+CO[1]*Y[I]+...+CO[N]*Y[I]**N - FY[I] IN G[I] FOR I=0,1,...M AND I NOT EQUAL S[J],J=0,1,...N+1. FOR J=0,1,...N+1 THEN G[S[J]]:=(-1)**J*E. THE INTEGERS S[J],FOR J=0,1,...N+1 ARE A SUBSET OF 0,1,...M; "BEGIN" "INTEGER" J,K,NP1,SJM1,SJ,S0,UP; NP1:=N+1;S0:=SJM1:=S[0]; G[S0]:=E; "FOR" J:=1 "STEP" 1 "UNTIL" NP1 "DO" "BEGIN" SJ:=S[J];UP:=SJ-1; "FOR" K:= SJM1+1 "STEP" 1 "UNTIL" UP "DO" G[K]:=FY[K]-POL(N,Y[K],CO); G[SJ]:=E:=-E; SJM1:=SJ; "END" J; "FOR" K:= S0-1 "STEP"-1 "UNTIL" 0 "DO" G[K]:=FY[K]-POL(N,Y[K],CO); "FOR" K:= SJ+1 "STEP" 1 "UNTIL" M "DO" G[K]:=FY[K]-POL(N,Y[K],CO); "END" ERRPOL; INI(NP1,M,S); MI:=EM[2]; ABSE:= 0; "FOR" COUNT:= 1, COUNT + 1 "WHILE" COUNT <= MI & ABSE > ABSEH "DO" "BEGIN" POMK:=1; "FOR" K:= 0 "STEP" 1 "UNTIL" NP1 "DO" "BEGIN" X[K]:= Y[S[K]]; COEF[K]:= FY[S[K]]; B[K]:= POMK; POMK:=-POMK "END"; NEWTON(NP1,X,COEF); NEWTON(NP1,X,B); EM[0]:= E:= COEF[NP1]/B[NP1]; ELMVEC(0,N,0,COEF,B,-E); NEWGRN(N,X,COEF); ERRPOL(N,M,E,COEF,S,Y,FY,G); SNDREMEZ(NP1,M,S,G,EM); ABSEH:=ABSE; ABSE:=ABS(E); CNT:=COUNT; "END" WHILE COUNT; EM[2]:=MI; EM[3]:=CNT; DUPVEC(0,N,0,CO,COEF); "END"; "END" MINMAXPOL "EOP"