1- #include " numerical/math /ContinuousToDiscrete.hpp"
1+ #include " numerical/control_analysis /ContinuousToDiscrete.hpp"
22#include " numerical/math/Tolerance.hpp"
33#include < cmath>
44#include < gtest/gtest.h>
@@ -8,7 +8,7 @@ namespace
88 class TestContinuousToDiscrete : public ::testing::Test
99 {
1010 protected:
11- math ::ContinuousToDiscrete<float , 2 , 1 , 1 > c2d{};
11+ control_analysis ::ContinuousToDiscrete<float , 2 , 1 , 1 > c2d{};
1212 math::LinearTimeInvariant<float , 2 , 1 , 1 > continuousSys{};
1313 };
1414}
@@ -21,7 +21,7 @@ TEST_F(TestContinuousToDiscrete, IntegratorZoh)
2121 continuousSys.D = math::Matrix<float , 1 , 1 >{ 0 .0f };
2222
2323 const float ts{ 0 .1f };
24- auto result = c2d.Convert (continuousSys, ts, math ::DiscretizationMethod::ZeroOrderHold);
24+ auto result = c2d.Convert (continuousSys, ts, control_analysis ::DiscretizationMethod::ZeroOrderHold);
2525
2626 EXPECT_NEAR (result.A .at (0 , 0 ), 1 .0f , math::Tolerance<float >());
2727 EXPECT_NEAR (result.B .at (0 , 0 ), ts, math::Tolerance<float >());
@@ -38,7 +38,7 @@ TEST_F(TestContinuousToDiscrete, FirstOrderZohMatchesAnalytic)
3838 continuousSys.C = math::Matrix<float , 1 , 2 >{ 1 .0f , 0 .0f };
3939 continuousSys.D = math::Matrix<float , 1 , 1 >{ 0 .0f };
4040
41- auto result = c2d.Convert (continuousSys, ts, math ::DiscretizationMethod::ZeroOrderHold);
41+ auto result = c2d.Convert (continuousSys, ts, control_analysis ::DiscretizationMethod::ZeroOrderHold);
4242
4343 const float expectedAd{ std::exp (-a * ts) };
4444 const float expectedBd{ (b / a) * (1 .0f - std::exp (-a * ts)) };
@@ -54,7 +54,7 @@ TEST_F(TestContinuousToDiscrete, ZohPreservesCAndD)
5454 continuousSys.C = math::Matrix<float , 1 , 2 >{ 3 .0f , 4 .0f };
5555 continuousSys.D = math::Matrix<float , 1 , 1 >{ 5 .0f };
5656
57- auto result = c2d.Convert (continuousSys, 0 .1f , math ::DiscretizationMethod::ZeroOrderHold);
57+ auto result = c2d.Convert (continuousSys, 0 .1f , control_analysis ::DiscretizationMethod::ZeroOrderHold);
5858
5959 EXPECT_NEAR (result.C .at (0 , 0 ), 3 .0f , math::Tolerance<float >());
6060 EXPECT_NEAR (result.C .at (0 , 1 ), 4 .0f , math::Tolerance<float >());
@@ -69,7 +69,7 @@ TEST_F(TestContinuousToDiscrete, ForwardEulerFormula)
6969 continuousSys.D = math::Matrix<float , 1 , 1 >{ 0 .0f };
7070
7171 const float ts{ 0 .1f };
72- auto result = c2d.Convert (continuousSys, ts, math ::DiscretizationMethod::ForwardEuler);
72+ auto result = c2d.Convert (continuousSys, ts, control_analysis ::DiscretizationMethod::ForwardEuler);
7373
7474 EXPECT_NEAR (result.A .at (0 , 0 ), 1 .0f + (-1 .0f ) * ts, math::Tolerance<float >());
7575 EXPECT_NEAR (result.A .at (1 , 1 ), 1 .0f + (-2 .0f ) * ts, math::Tolerance<float >());
@@ -87,7 +87,7 @@ TEST_F(TestContinuousToDiscrete, BackwardEulerFormula)
8787 continuousSys.C = math::Matrix<float , 1 , 2 >{ 1 .0f , 0 .0f };
8888 continuousSys.D = math::Matrix<float , 1 , 1 >{ 0 .0f };
8989
90- auto result = c2d.Convert (continuousSys, ts, math ::DiscretizationMethod::BackwardEuler);
90+ auto result = c2d.Convert (continuousSys, ts, control_analysis ::DiscretizationMethod::BackwardEuler);
9191
9292 const float expectedAd{ 1 .0f / (1 .0f + a * ts) };
9393 EXPECT_NEAR (result.A .at (0 , 0 ), expectedAd, math::Tolerance<float >());
@@ -105,7 +105,7 @@ TEST_F(TestContinuousToDiscrete, TustinBilinearReference)
105105 continuousSys.C = math::Matrix<float , 1 , 2 >{ 1 .0f , 0 .0f };
106106 continuousSys.D = math::Matrix<float , 1 , 1 >{ 0 .0f };
107107
108- auto result = c2d.Convert (continuousSys, ts, math ::DiscretizationMethod::Tustin);
108+ auto result = c2d.Convert (continuousSys, ts, control_analysis ::DiscretizationMethod::Tustin);
109109
110110 const float expectedAd{ (alpha - a) / (alpha + a) };
111111 const float expectedBd{ b * 2 .0f / (alpha + a) };
@@ -121,7 +121,7 @@ TEST_F(TestContinuousToDiscrete, TustinPreservesStability)
121121 continuousSys.C = math::Matrix<float , 1 , 2 >{ 1 .0f , 0 .0f };
122122 continuousSys.D = math::Matrix<float , 1 , 1 >{ 0 .0f };
123123
124- auto result = c2d.Convert (continuousSys, 0 .05f , math ::DiscretizationMethod::Tustin);
124+ auto result = c2d.Convert (continuousSys, 0 .05f , control_analysis ::DiscretizationMethod::Tustin);
125125
126126 EXPECT_LT (std::abs (result.A .at (0 , 0 )), 1 .0f );
127127 EXPECT_LT (std::abs (result.A .at (1 , 1 )), 1 .0f );
@@ -137,9 +137,9 @@ TEST_F(TestContinuousToDiscrete, SmallTsMethodsConverge)
137137 continuousSys.C = math::Matrix<float , 1 , 2 >{ 1 .0f , 0 .0f };
138138 continuousSys.D = math::Matrix<float , 1 , 1 >{ 0 .0f };
139139
140- auto zoh = c2d.Convert (continuousSys, ts, math ::DiscretizationMethod::ZeroOrderHold);
141- auto tustin = c2d.Convert (continuousSys, ts, math ::DiscretizationMethod::Tustin);
142- auto euler = c2d.Convert (continuousSys, ts, math ::DiscretizationMethod::ForwardEuler);
140+ auto zoh = c2d.Convert (continuousSys, ts, control_analysis ::DiscretizationMethod::ZeroOrderHold);
141+ auto tustin = c2d.Convert (continuousSys, ts, control_analysis ::DiscretizationMethod::Tustin);
142+ auto euler = c2d.Convert (continuousSys, ts, control_analysis ::DiscretizationMethod::ForwardEuler);
143143
144144 EXPECT_NEAR (zoh.A .at (0 , 0 ), tustin.A .at (0 , 0 ), 1e-3f );
145145 EXPECT_NEAR (zoh.A .at (0 , 0 ), euler.A .at (0 , 0 ), 1e-3f );
@@ -160,7 +160,7 @@ TEST_F(TestContinuousToDiscrete, DcGainPreserved)
160160
161161 const float continuousDcGain{ b / a };
162162
163- auto discrete = c2d.Convert (continuousSys, ts, math ::DiscretizationMethod::ZeroOrderHold);
163+ auto discrete = c2d.Convert (continuousSys, ts, control_analysis ::DiscretizationMethod::ZeroOrderHold);
164164
165165 const float oneMinusAd{ 1 .0f - discrete.A .at (0 , 0 ) };
166166 const float discreteDcGain{ discrete.C .at (0 , 0 ) * discrete.B .at (0 , 0 ) / oneMinusAd + discrete.D .at (0 , 0 ) };
0 commit comments