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