using Random using LinearAlgebra """ problem(i) Returns objective of problems 1,2, and 3. """ problem(i::Int) = problem(Val{i}()) problem(::Val{1}) = Sum(NormL2(0.5),SqrNormL2(0.5)) problem(::Val{2}) = CubeNormL2(1.0/3.0) problem(::Val{3}) = SqrNormL2() """ parameters() Returns objective parameters of the problems 4 and 5. """ function parameters() mt = MersenneTwister(123) mu = 13 L = 598 n = 17 N = 323 evals = rand(mt,n) evals = (evals .- minimum(evals))./(maximum(evals) - minimum(evals)).*(L-mu) .+ mu f = svd([randn(mt,N,n-1) ones(N)]) A = f.U*diagm(sqrt.(evals))*f.Vt ai = [A[i,:] for i in 1:size(A,1)] l = ones(N) return ai,A,l end """ prescale(A,r) Returns a prescaling matrix H to be used in Task 9. The argument 0 <= r <= 1 determine the computational effort expended to reduce the condition number, r = 1 gives the best but most expensive prescaling and r = 0 the worst but cheapest. """ function prescale(A,r) mt = MersenneTwister(159) sel = max(size(A,2), round(Int,r*size(A,1))) fact = svd(A[1:sel,:]) H = fact.V*diagm((1-r) .+ r ./ fact.S) end