Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: mockingbirdnest/Principia
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 87a5554f64b2
Choose a base ref
...
head repository: mockingbirdnest/Principia
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 5904965bea55
Choose a head ref
  • 3 commits
  • 3 files changed
  • 1 contributor

Commits on Sep 6, 2020

  1. Copy the full SHA
    da1a435 View commit details
  2. A test.

    pleroy committed Sep 6, 2020
    Copy the full SHA
    8caf182 View commit details
  3. Merge pull request #2710 from pleroy/PoissonAtOrigin

    Origin change for Poisson series
    pleroy authored Sep 6, 2020
    Copy the full SHA
    5904965 View commit details
Showing with 38 additions and 0 deletions.
  1. +3 −0 numerics/poisson_series.hpp
  2. +21 −0 numerics/poisson_series_body.hpp
  3. +14 −0 numerics/poisson_series_test.cpp
3 changes: 3 additions & 0 deletions numerics/poisson_series.hpp
Original file line number Diff line number Diff line change
@@ -90,6 +90,9 @@ class PoissonSeries {

Value operator()(Instant const& t) const;

// Returns a copy of this series adjusted to the given origin.
PoissonSeries AtOrigin(Instant const& origin) const;

// The constant term of the result is zero.
PoissonSeries<quantities::Primitive<Value, Time>, degree_ + 1, Evaluator>
Primitive() const;
21 changes: 21 additions & 0 deletions numerics/poisson_series_body.hpp
Original file line number Diff line number Diff line change
@@ -23,6 +23,7 @@ using quantities::Cos;
using quantities::Infinity;
using quantities::Primitive;
using quantities::Sin;
using quantities::Time;
using quantities::Variation;
using quantities::si::Radian;
using quantities::si::Second;
@@ -187,6 +188,26 @@ Value PoissonSeries<Value, degree_, Evaluator>::operator()(
return result;
}

template<typename Value, int degree_,
template<typename, typename, int> class Evaluator>
PoissonSeries<Value, degree_, Evaluator>
PoissonSeries<Value, degree_, Evaluator>::AtOrigin(
Instant const& origin) const {
Time const shift = origin - origin_;
auto const aperiodic = aperiodic_.AtOrigin(origin);

PolynomialsByAngularFrequency periodic;
for (auto const& [ω, polynomials] : periodic_) {
Polynomial const sin = polynomials.sin.AtOrigin(origin);
Polynomial const cos = polynomials.cos.AtOrigin(origin);
periodic.emplace(
ω,
Polynomials{/*sin=*/sin * Cos(ω * shift) - cos * Sin(ω * shift),
/*cos=*/sin * Sin(ω * shift) + cos * Cos(ω * shift)});
}
return PoissonSeries(aperiodic, periodic);
}

template<typename Value, int degree_,
template<typename, typename, int> class Evaluator>
PoissonSeries<quantities::Primitive<Value, Time>, degree_ + 1, Evaluator>
14 changes: 14 additions & 0 deletions numerics/poisson_series_test.cpp
Original file line number Diff line number Diff line change
@@ -153,6 +153,20 @@ TEST_F(PoissonSeriesTest, Algebra) {
(*pb_)(t0_ + 1 * Second), 6, 38));
}

TEST_F(PoissonSeriesTest, AtOrigin) {
auto const pa_at_origin = pa_->AtOrigin(t0_ + 2 * Second);
for (int i = -5; i < 5; ++i) {
Instant const t = t0_ + i * Second;
EXPECT_THAT(pa_at_origin(t), AlmostEquals((*pa_)(t), 0, 45));
}

auto const pb_at_origin = pb_->AtOrigin(t0_ - 7 * Second);
for (int i = -5; i < 5; ++i) {
Instant const t = t0_ + i * Second;
EXPECT_THAT(pb_at_origin(t), AlmostEquals((*pb_)(t), 0, 96));
}
}

TEST_F(PoissonSeriesTest, PointwiseInnerProduct) {
using Degree2 = PoissonSeries<Displacement<World>, 2, HornerEvaluator>;
Degree2::Polynomial::Coefficients const coefficients_a({