code 34286;
procedure PSDINVSVD(U, VAL, V, M, N, EM);
value M, N; integer M, N; array U, VAL, V, EM;
begin integer I, J;
    real MIN, VALI;
    array X[1:N];
    MIN:= EM[6];
    for I:= 1 step 1 until N do 
    if VAL[I] > MIN then 
    begin VALI:= 1 / VAL[I];
        for J:= 1 step 1 until M do U[J,I]:= U[J,I] * VALI
    end 
    else for J:= 1 step 1 until M do U[J,I]:= 0;
    for I:= 1 step 1 until M do 
    begin for J:= 1 step 1 until N do X[J]:= U[I,J];
        for J:= 1 step 1 until N do 
        U[I,J]:= MATVEC(1, N, J, V, X)
    end 
end PSDINVSVD;
        eop