diff options
author | Jaron Kent-Dobias <jaron@kent-dobias.com> | 2025-02-10 08:05:34 -0300 |
---|---|---|
committer | Jaron Kent-Dobias <jaron@kent-dobias.com> | 2025-02-10 08:05:34 -0300 |
commit | 02d4139a09cf817d3acc93591a51402bb82054b0 (patch) | |
tree | 5384e77dd9888d308759d82cff6764ff63817754 /fits.cpp | |
parent | 2a2cd2547124aa809732e3c259e0a41582d2b99f (diff) | |
download | ictp-saifr_colloquium-02d4139a09cf817d3acc93591a51402bb82054b0.tar.gz ictp-saifr_colloquium-02d4139a09cf817d3acc93591a51402bb82054b0.tar.bz2 ictp-saifr_colloquium-02d4139a09cf817d3acc93591a51402bb82054b0.zip |
Some changes.
Diffstat (limited to 'fits.cpp')
-rw-r--r-- | fits.cpp | 21 |
1 files changed, 18 insertions, 3 deletions
@@ -13,7 +13,7 @@ using Real = double; using Vector = Eigen::Matrix<Real, Eigen::Dynamic, 1>; /* -inline Real basisFunctions(unsigned i, Real x) const { +inline Real basisFunctions(unsigned N, unsigned i, Real x) { if (i == 0) { return 1; } else { @@ -22,9 +22,21 @@ inline Real basisFunctions(unsigned i, Real x) const { } */ +Real legendreP(unsigned n, Real x) { + if (n == 0) return 1; + else if (n == 1) return x; + else return ((2 * (n - 1) + 1) * x * legendreP(n - 1, x) - (n - 1) * legendreP(n - 2, x)) / n; +} + +inline Real basisFunctions(unsigned N, unsigned i, Real x) { + return legendreP(i, x); +} + +/* inline Real basisFunctions(unsigned N, unsigned i, Real x) { return abs(x - i / (N - 1.0)); } +*/ Real value(const Vector& coeffs, Real x) { Real v = 0; @@ -167,7 +179,7 @@ int main(int argc, char* argv[]) { Rng r; - std::list<std::tuple<Real, Real>> data = generateData([](Real x) {return x;}, M, σ, r); + std::list<std::tuple<Real, Real>> data = generateData([](Real x) {return std::cos(2 * M_PI * x);}, M, σ, r); std::cout << std::setprecision(15); @@ -177,7 +189,10 @@ int main(int argc, char* argv[]) { std::cout << std::endl; Vector a₀ = Vector::Zero(N); - Vector a = stochasticGradientDescent(data, a₀, r, maxSteps); + for (Real& aa : a₀) { + aa = r.variate<Real, std::normal_distribution>(0, 0); + } + Vector a = gradientDescent(data, a₀, maxSteps); for (unsigned i = 0; i < N; i++) { std::cout << a[i] << " "; |