summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/math/example/barycentric_interpolation_example.cpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
commit483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch)
treee5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/boost/libs/math/example/barycentric_interpolation_example.cpp
parentInitial commit. (diff)
downloadceph-upstream.tar.xz
ceph-upstream.zip
Adding upstream version 14.2.21.upstream/14.2.21upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/math/example/barycentric_interpolation_example.cpp')
-rw-r--r--src/boost/libs/math/example/barycentric_interpolation_example.cpp92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/boost/libs/math/example/barycentric_interpolation_example.cpp b/src/boost/libs/math/example/barycentric_interpolation_example.cpp
new file mode 100644
index 00000000..263e20f1
--- /dev/null
+++ b/src/boost/libs/math/example/barycentric_interpolation_example.cpp
@@ -0,0 +1,92 @@
+
+// Copyright Nick Thompson, 2017
+
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or
+// copy at http://www.boost.org/LICENSE_1_0.txt).
+
+#include <iostream>
+#include <limits>
+#include <vector>
+
+//[barycentric_rational_example
+
+/*`
+This example shows how to use barycentric rational interpolation, using Walter Kohn's classic paper
+"Solution of the Schrodinger Equation in Periodic Lattices with an Application to Metallic Lithium"
+In this paper, Kohn needs to repeatedly solve an ODE (the radial Schrodinger equation) given a potential
+which is only known at non-equally samples data.
+
+If he'd only had the barycentric rational interpolant of Boost.Math!
+
+References: Kohn, W., and N. Rostoker. "Solution of the Schrodinger equation in periodic lattices with an application to metallic lithium." Physical Review 94.5 (1954): 1111.
+*/
+
+#include <boost/math/interpolators/barycentric_rational.hpp>
+
+int main()
+{
+ // The lithium potential is given in Kohn's paper, Table I:
+ std::vector<double> r(45);
+ std::vector<double> mrV(45);
+
+ // We'll skip the code for filling the above vectors with data for now...
+ //<-
+
+ r[0] = 0.02; mrV[0] = 5.727;
+ r[1] = 0.04, mrV[1] = 5.544;
+ r[2] = 0.06, mrV[2] = 5.450;
+ r[3] = 0.08, mrV[3] = 5.351;
+ r[4] = 0.10, mrV[4] = 5.253;
+ r[5] = 0.12, mrV[5] = 5.157;
+ r[6] = 0.14, mrV[6] = 5.058;
+ r[7] = 0.16, mrV[7] = 4.960;
+ r[8] = 0.18, mrV[8] = 4.862;
+ r[9] = 0.20, mrV[9] = 4.762;
+ r[10] = 0.24, mrV[10] = 4.563;
+ r[11] = 0.28, mrV[11] = 4.360;
+ r[12] = 0.32, mrV[12] = 4.1584;
+ r[13] = 0.36, mrV[13] = 3.9463;
+ r[14] = 0.40, mrV[14] = 3.7360;
+ r[15] = 0.44, mrV[15] = 3.5429;
+ r[16] = 0.48, mrV[16] = 3.3797;
+ r[17] = 0.52, mrV[17] = 3.2417;
+ r[18] = 0.56, mrV[18] = 3.1209;
+ r[19] = 0.60, mrV[19] = 3.0138;
+ r[20] = 0.68, mrV[20] = 2.8342;
+ r[21] = 0.76, mrV[21] = 2.6881;
+ r[22] = 0.84, mrV[22] = 2.5662;
+ r[23] = 0.92, mrV[23] = 2.4242;
+ r[24] = 1.00, mrV[24] = 2.3766;
+ r[25] = 1.08, mrV[25] = 2.3058;
+ r[26] = 1.16, mrV[26] = 2.2458;
+ r[27] = 1.24, mrV[27] = 2.2035;
+ r[28] = 1.32, mrV[28] = 2.1661;
+ r[29] = 1.40, mrV[29] = 2.1350;
+ r[30] = 1.48, mrV[30] = 2.1090;
+ r[31] = 1.64, mrV[31] = 2.0697;
+ r[32] = 1.80, mrV[32] = 2.0466;
+ r[33] = 1.96, mrV[33] = 2.0325;
+ r[34] = 2.12, mrV[34] = 2.0288;
+ r[35] = 2.28, mrV[35] = 2.0292;
+ r[36] = 2.44, mrV[36] = 2.0228;
+ r[37] = 2.60, mrV[37] = 2.0124;
+ r[38] = 2.76, mrV[38] = 2.0065;
+ r[39] = 2.92, mrV[39] = 2.0031;
+ r[40] = 3.08, mrV[40] = 2.0015;
+ r[41] = 3.24, mrV[41] = 2.0008;
+ r[42] = 3.40, mrV[42] = 2.0004;
+ r[43] = 3.56, mrV[43] = 2.0002;
+ r[44] = 3.72, mrV[44] = 2.0001;
+ //->
+
+ // Now we want to interpolate this potential at any r:
+ boost::math::barycentric_rational<double> b(r.data(), mrV.data(), r.size());
+
+ for (size_t i = 1; i < 8; ++i)
+ {
+ double r = i*0.5;
+ std::cout << "(r, V) = (" << r << ", " << -b(r)/r << ")\n";
+ }
+}
+//] [/barycentric_rational_example]