code 31425;
    procedure GSS JAC WGHTS(N, ALFA, BETA, X, W);
    value N, ALFA, BETA; integer N; real ALFA, BETA;
    array X, W;
    if ALFA = BETA then 
    begin integer I, J, M;
        array B[1:N - 1]; real R0, R1, R2, S, H0, ALFA2, XI;

        ALL JAC ZER(N, ALFA, ALFA, X); ALFA2:= 2*ALFA;
        H0:= 2**(ALFA2 + 1)*GAMMA(1 + ALFA)**2/GAMMA(ALFA2 + 2);
        B[1]:= 1/SQRT(3 + ALFA2); M:= N - (N//2);
        for I:= 2 step 1 until N - 1 do 
        B[I]:= SQRT(I*(I + ALFA2)/(4*(I + ALFA)**2 - 1));
        for I:= 1 step 1 until M do 
        begin XI:= ABS(X[I]); R0:= 1; R1:= XI/B[1];
            S:= 1 + R1*R1;
            for J:= 2 step 1 until N - 1 do 
            begin R2:= (XI*R1 - B[J - 1]*R0)/B[J];
                R0:= R1; R1:= R2; S:= S + R2*R2
            end;
            W[I]:= W[N + 1 - I]:= H0/S
        end 
    end else 
    begin integer I, J; array A, B[0:N];
        real MIN, SUM, H0, R0, R1, R2, XI, ALFABETA;
        ALFABETA:= ALFA + BETA; MIN:= (BETA - ALFA)*ALFABETA;
        B[0]:= 0; SUM:= ALFABETA + 2; A[0]:= (BETA - ALFA)/SUM;
        A[1]:= MIN /SUM/(SUM + 2);
        B[1]:= 2*SQRT((1 + ALFA)*(1 + BETA)/(SUM + 1))/SUM;
        for I:= 2 step 1 until N - 1 do 
        begin SUM:= I + I + ALFABETA;
            A[I]:= MIN/SUM/(SUM + 2);
            B[I]:= (2/SUM)*
            SQRT(I*(SUM - I)*(I + ALFA)*(I + BETA)/(SUM*SUM - 1))
        end;
        H0:= 2**(ALFABETA + 1)*GAMMA(1 + ALFA)*GAMMA(1 + BETA)/
                                  GAMMA(2 + ALFABETA);
        ALL JAC ZER(N, ALFA, BETA, X);
        for I:= 1 step 1 until N do 
        begin XI:= X[I]; R0:= 1; R1:= (XI - A[0])/B[1];
            SUM:= 1 + R1*R1;
            for J:= 2 step 1 until N - 1 do 
            begin R2:= ((XI - A[J - 1])*R1 - B[J - 1]*R0)/B[J];
                SUM:= SUM + R2*R2; R0:= R1; R1:= R2
            end;
            W[I]:= H0/SUM
        end 
    end GSS JAC WGHTS

         eop