]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/math/example/daubechies_wavelets/wavelet_transform.cpp
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / boost / libs / math / example / daubechies_wavelets / wavelet_transform.cpp
diff --git a/ceph/src/boost/libs/math/example/daubechies_wavelets/wavelet_transform.cpp b/ceph/src/boost/libs/math/example/daubechies_wavelets/wavelet_transform.cpp
new file mode 100644 (file)
index 0000000..67cdde8
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright Nick Thompson, 2020
+ * Use, modification and distribution are subject to 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 <cstdint>
+#include <cmath>
+#include <boost/math/quadrature/wavelet_transforms.hpp>
+#include <Eigen/Dense>
+
+
+int main()
+{
+    using boost::math::quadrature::daubechies_wavelet_transform;
+    double a = 1.3;
+    auto f = [&a](double t) {
+        if(t==0) {
+            return double(0);
+        }
+        return std::sin(a/t);
+    };
+
+    auto Wf = daubechies_wavelet_transform<decltype(f), double, 8>(f);
+
+    Eigen::MatrixXd grid(512, 512);
+    double s = 7;
+    double t = 0;
+    grid(0,0) = Wf(s, t);
+
+    auto g = [&a](double t)->std::complex<double> {
+        if (t==0) {
+            return {0.0, 0.0};
+        }
+        return std::exp(std::complex<double>(0.0, a/t));
+    };
+
+    auto Wg = daubechies_wavelet_transform<decltype(g), double, 8>(g);
+    std::cout << "W[f](s,t) = " << Wf(s,t) << "\n";
+    std::cout << "W[g](s,t) = " << Wg(s, t) << "\n";
+    std::cout << Wg(0.0, 3.5) << "\n";
+    std::cout << Wf(0.0, 4.8) << "\n";
+    std::cout << "W[f](-s,t) = " << Wf(-s, t) << "\n";
+    std::cout << "W[g](-s,t) = " << Wg(-s, t) << "\n";
+
+}