Added Project and Report

This commit is contained in:
elvis
2024-07-30 14:43:25 +02:00
parent c828453e94
commit 3ad6f7f86f
311 changed files with 13490 additions and 3280 deletions

View File

@ -0,0 +1,91 @@
include("dataset.jl")
using Random
datasetpath = joinpath(@__DIR__, "../data_for_testing/dataset.csv")
VALID = [:dataset, :randDataset, :exactRandDataset, :rand, :exactRand]
@doc raw"""
genFunc(t::Symbol, [lambda::Real=1, m::Integer=1000, n::Integer=10, rng=default_rng()])
Generates different matrices for the least squares problem
### Input
- `t` -- The type of problem to generate. Possible values are:
`:dataset`,
`:randDataset`,
`:exactRandDataset`,
`:rand`,
`:exactRand`
### Output
A named tuple with the matrix ``\hat{X}``, the vector ``\hat{y}``, the starting vector and the solution vector ``w^*``.
See also [`gen_dataset`](@ref).
"""
function genFunc(
t::Symbol;
λ::Real=1,
m::Integer=1000,
n::Integer=10,
rng=Random.default_rng())::NamedTuple
if t VALID
throw(ArgumentError("The type of matrix to produce is not recognized, available types: " * join(String.(VALID), ", ")))
end
if t == :dataset
tmp = get_dataset(datasetpath, λ)
return (; :X_hat => tmp[1], :y_hat => tmp[2], :start => tmp[3], :w_star => tmp[4])
end
if t == :randDataset
X_hat = [(rand(rng, n, m).*2 .-1); λ .* I(m)]
y_hat = [(rand(rng, n).*2 .-1); zeros(m)]
# initial starting point
start = ones(m)
# w_star is the optimal solution of the julia solver
w_star = X_hat \ y_hat
return (; :X_hat => X_hat, :y_hat => y_hat, :start => start, :w_star => w_star)
end
if t == :exactRandDataset
X_hat = [(rand(rng, n, m).*2 .-1); λ .* I(m)]
w_star = rand(rng, m).*2 .-1
# initial starting point
start = ones(m)
y_hat = X_hat * w_star
return (; :X_hat => X_hat, :y_hat => y_hat, :start => start, :w_star => w_star)
end
if t == :rand
X_hat = rand(rng, m+n, m).*2 .-1
y_hat = rand(rng, m+n)
# initial starting point
start = ones(m)
# w_star is the optimal solution of the julia solver
w_star = X_hat \ y_hat
return (; :X_hat => X_hat, :y_hat => y_hat, :start => start, :w_star => w_star)
end
if t == :exactRand
X_hat = rand(rng, m+n, m).*2 .-1
w_star = rand(rng, m).*2 .-1
# initial starting point
start = ones(m)
y_hat = X_hat * w_star
return (; :X_hat => X_hat, :y_hat => y_hat, :start => start, :w_star => w_star)
end
end