From 0bd2ab4d1f9e8fdbf55ed11d61fe2e75720a334a Mon Sep 17 00:00:00 2001 From: justanothercatgirl Date: Thu, 17 Apr 2025 12:48:23 +0300 Subject: finished 206, 207 --- libprakpp/include/prakmath.hpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'libprakpp/include/prakmath.hpp') diff --git a/libprakpp/include/prakmath.hpp b/libprakpp/include/prakmath.hpp index bb09e74..d43c11f 100644 --- a/libprakpp/include/prakmath.hpp +++ b/libprakpp/include/prakmath.hpp @@ -321,7 +321,6 @@ void least_squares_linear( << ", s.size() = " << ss.size() << std::endl; return; } - [[assume(xs.size() == ys.size() && ys.size() == ss.size())]]; size_t sz = xs.size(); prak::vector ones(sz); @@ -364,6 +363,27 @@ void least_squares_linear( b.err = sqrt(d1 / D); } +template +void least_squares_prop( + const prak::vector &xs, + const prak::vector &ys, + const prak::vector &ss, + struct pvalue &a) { + assert("Different-sized vectors passed to least squares method" && xs.size() == ys.size()); + size_t s = xs.size(); + prak::vector buf(s), si(s); + vmul(ss.data(), ss.data(), si.data(), s); + + vmul(xs.data(), ys.data(), buf.data(), s); + vdiv(buf.data(), ss.data(), buf.data(), s); + T D1 = vsum(buf.data(), s); + + vmul(xs.data(), xs.data(), buf.data(), s); + vdiv(buf.data(), ss.data(), buf.data(), s); + T D2 = vsum(buf.data(), s); + a.val = D1/D2; + a.err = 1/D2; +} /// May throw std::bad_optional_access template -- cgit v1.2.3-70-g09d2